一、计算机编程语言概述

1.1 语言

语言(英文:Language)是人类进行沟通交流的表达方式。例如:中国人与中国人用普通话沟通。而中国人要和英国人交流,就要学习英语。
    
        语言的三要素是语音、语法和词汇,是由词汇按一定的语法所构成的语音表义系统。

1.2 计算机编程语言

计算机编程语言是程序设计的最重要的工具,它是指计算机能够接受和处理的、具有一定语法规则的语言。从计算机诞生至今,计算机语言经历了机器语言、汇编语言和高级语言几个阶段。
    
        在所有的程序设计语言中,只有机器语言编制的源程序能够被计算机直接理解和执行,用其它程序设计语言编写的程序都必须利用语言处理程序“翻译”成计算机所能识别的机器语言程序。

简而言之:计算机语言,是人与计算机交流的方式。

如果人要与计算机交流,那么就要学习计算机语言。计算机语言有很多种。如:C,C++,Java,PHP, Kotlin,Python,Scala等。

1.2.1 第一代:机器语言

机器语言是机器能直接识别的程序语言或指令代码,无需经过翻译,每一操作码在计算机内部都有相应的电路来完成它,或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。

机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。

1.2.2 第二代:汇编语言

汇编语言, 即第二代计算机语言,用一些容易理解和记忆的字母,单词来代替一个特定的指令,比如:用“ADD”代表数字逻辑上的加减,“ MOV”代表数据传递等等,通过这种方法,人们很容易去阅读已经完成的程序或者理解程序正在执行的功能,对现有程序的bug修复以及运营维护都变得更加简单方便。
    
        但计算机的硬件不认识字母符号,这时候就需要一个专门的程序把这些字符变成计算机能够识别的二进制数。因为汇编语言只是将机器语言做了简单编译,所以并没有根本上解决机器语言的特定性,所以汇编语言和机器自身的编程环境息息相关,推广和移植很难,但是还是保持了机器语言优秀的执行效率,因为他的可阅读性和简便性,汇编语言到现在依然是常用的编程语言之一。

1.2.3 第三代:高级语言

高级语言(High-level programming language)是一种独立于机器,面向过程或对象的语言。高级语言是参照数学语言而设计的近似于日常会话的语言。

高级语言并不是特指的某一种具体的语言,而是包括很多编程语言;
                C、Pascal、Fortran面向过程的语言
                C++面向过程/面向对象
                Java跨平台的纯面向对象的语言
                .NET跨语言的平台
                Python、Scala…

为什么Java应用最广泛?

Java是基于JVM的跨平台语言,一次编写,到处运行;
        Java程序易于编写,而且有内置垃圾收集,不必考虑内存管理;
        Java虚拟机拥有工业级的稳定性和高度优化的性能;
        Java拥有最广泛的开源社区支持,各种高质量组件随时可用。

二、Java语言概述

2.1 Java概述

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

Java是SUN(Stanford University Network,斯坦福大学网络公司 ) 1995年推出的一门高级编程语言。

Java之父——詹姆斯·高斯林出生于加拿大,是一位计算机编程天才。在卡内基·梅隆大学攻读计算机博士学位时,他编写了多处理器版本的Unix操作系统,是JAVA编程语言的创始人。

1991年,在Sun公司工作期间,高斯林和一群技术人员创建了一个名为Oak的项目,旨在开发运行于虚拟机的编程语言,同时允许程序在电视机机顶盒等多平台上运行。后来,这项工作就演变为Java。
    
        Java一开始富有吸引力是因为Java程序可以在Web浏览器中运行。这些Java程序被称为Java小程序(applet)。applet使用现代的图形用户界面与Web用户进行交互。 applet内嵌在HTML代码中。

随着互联网的普及,尤其是网景开发的网页浏览器的面世,Java成为全球流行的开发语言。因此被人称作Java之父。

小典故:Java名字的由来
        我们所见到的Java标志,总是一杯热咖啡,这杯热咖啡你很难与计算机编程联想到一起。这杯热咖啡、Java这个名字的由来,是Java创始人员团队中其中一名成员由于灵感想到的,想起自己在Java岛(爪哇岛)上曾喝过一种美味的咖啡,于是这种计算机编程语言就命名为Java,与此同时它的标起来是我们最熟悉不过的一杯热咖啡。

2.2 Java发展史

20世纪90年代,硬件领域出现了单片式计算机系统,这种价格低廉的系统一出现就立即引起了自动控制领域人员的注意,因为使用它可以大幅度提升消费类电子产品(如电视机顶盒、面包烤箱、移动电话等)的智能化程度。Sun公司为了抢占市场先机,在1991年成立了一个称为Green的项目小组,帕特里克、詹姆斯·高斯林、麦克·舍林丹和其他几个工程师一起组成的工作小组在加利福尼亚州门洛帕克市沙丘路的一个小工作室里面研究开发新技术,专攻计算机在家电产品上的嵌入式应用。

由于C++所具有的优势,该项目组的研究人员首先考虑采用C++来编写程序。但对于硬件资源极其匮乏的单片式系统来说,C++程序过于复杂和庞大。另外由于消费电子产品所采用的嵌入式处理器芯片的种类繁杂,如何让编写的程序跨平台运行也是个难题。为了解决困难,他们首先着眼于语言的开发,假设了一种结构简单、符合嵌入式应用需要的硬件平台体系结构并为其制定了相应的规范,其中就定义了这种硬件平台的二进制机器码指令系统(即后来成为“字节码”的指令系统),以待语言开发成功后,能有半导体芯片生产商开发和生产这种硬件平台。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太实用及影响安全的成分,并结合嵌入式系统的实时性要求,开发了一种称为Oak的面向对象语言。

由于在开发Oak语言时,尚且不存在运行字节码的硬件平台,所以为了在开发时可以对这种语言进行实验研究,他们就在已有的硬件和软件平台基础上,按照自己所指定的规范,用软件建设了一个运行平台,整个系统除了比C++更加简单之外,没有什么大的区别。
    
        1992年的夏天,当Oak语言开发成功后,研究者们向硬件生产商进行演示了Green操作系统、Oak的程序设计语言、类库和其硬件,以说服他们使用Oak语言生产硬件芯片,但是,硬件生产商并未对此产生极大的热情。因为他们认为,在所有人对Oak语言还一无所知的情况下,就生产硬件产品的风险实在太大了,所以Oak语言也就因为缺乏硬件的支持而无法进入市场,从而被搁置了下来。

1994年6、7月间,在经历了一场历时三天的讨论之后,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克·诺顿写了一个小型万维网浏览器WebRunner。

1995年,互联网的蓬勃发展给了Oak机会。业界为了使死板、单调的静态网页能够“灵活”起来,急需一种软件技术来开发一种程序,这种程序可以通过网络传播并且能够跨平台运行。于是,世界各大IT企业为此纷纷投入了大量的人力、物力和财力。这个时候,Sun公司想起了那个被搁置起来很久的Oak,并且重新审视了那个用软件编写的试验平台,由于它是按照嵌入式系统硬件平台体系结构进行编写的,所以非常小,特别适用于网络上的传输系统,而Oak也是一种精简的语言,程序非常小,适合在网络上传输。Sun公司首先推出了可以嵌入网页并且可以随同网页在网络上传输的Applet(Applet是一种将小程序嵌入到网页中进行执行的技术),并将Oak更名为Java(在申请注册商标时,发现Oak已经被人使用了,再想了一系列名字之后,最终,使用了提议者在喝一杯Java咖啡时无意提到的Java词语)。5月23日,Sun公司在Sun world会议上正式发布Java和HotJava浏览器。IBM、Apple、DEC、Adobe、HP、Oracle、Netscape和微软等各大公司都纷纷停止了自己的相关开发项目,竞相购买了Java使用许可证,并为自己的产品开发了相应的Java平台。

1996年1月,Sun公司发布了Java的第一个开发工具包(JDK 1.0),这是Java发展历程中的重要里程碑,标志着Java成为一种独立的开发工具。9月,约8.3万个网页应用了Java技术来制作。10月,Sun公司发布了Java平台的第一个即时(JIT)编译器。

1997年2月,JDK 1.1面世,在随后的3周时间里,达到了22万次的下载量。4月2日,Java One会议召开,参会者逾一万人,创当时全球同类会议规模之纪录。9月,Java Developer Connection社区成员超过10万。

1998年12月8日,第二代Java平台的企业版J2EE发布。1999年6月,Sun公司发布了第二代Java平台(简称为Java2)的3个版本:J2ME(Java2 Micro Edition,Java2平台的微型版),应用于移动、无线及有限资源的环境;J2SE(Java 2 Standard Edition,Java 2平台的标准版),应用于桌面环境;J2EE(Java 2Enterprise Edition,Java 2平台的企业版),应用于基于Java的应用服务器。Java 2平台的发布,是
Java发展过程中最重要的一个里程碑,标志着Java的应用开始普及。

1999年4月27日,HotSpot虚拟机发布。HotSpot虚拟机发布时是作为JDK 1.2的附加程序提供的,后来它成为了JDK 1.3及之后所有版本的SunJDK的默认虚拟机。

2000年5月,JDK1.3、JDK1.4和J2SE1.3相继发布,几周后其获得了Apple公司Mac OS X的工业标准的支持。2001年9月24日,J2EE1.3发布。

2002年2月26日,J2SE1.4发布。自此Java的计算能力有了大幅提升,与J2SE1.3相比,其多了近62%的类和接口。在这些新特性当中,还提供了广泛的XML支持、安全套接字(Socket)支持(通过SSL与TLS协议)、全新的I/OAPI、正则表达式、日志与断言。
    
        2004年9月30日,J2SE1.5发布,成为Java语言发展史上的又一里程碑。为了表示该版本的重要性,J2SE 1.5更名为Java SE 5.0(内部版本号1.5.0),代号为“Tiger”,Tiger包含了从1996年发布1.0版本以来的最重大的更新,其中包括泛型支持、基本类型的自动装箱、改进的循环、枚举类型、格式化I/O及可变参数。

2005年6月,在Java One大会上,Sun公司发布了Java SE 6。此时,Java的各种版本已经更名,已取消其中的数字2,如J2EE更名为JavaEE,J2SE更名为JavaSE,J2ME更名为JavaME。

2006年11月13日,Java技术的发明者Sun公司宣布,将Java技术作为免费软件对外发布。Sun公司正式发布的有关Java平台标准版的第一批源代码,以及Java迷你版的可执行源代码。从2007年3月起,全世界所有的开发人员均可对Java源代码进行修改。

2009年,甲骨文公司宣布收购Sun。2010年,Java编程语言的共同创始人之一詹姆斯·高斯林从Oracle公司辞职。
    
        2011年,甲骨文公司举行了全球性的活动,以庆祝Java7的推出,随后Java7正式发布。

2014年,甲骨文公司发布了Java8正式版。

2016年9月,Java SE 9 Oracle宣布发布。
    
        2018年3月,发布JDK 10.0,版本号也称为18.3

2018年9月,发布JDK 11.0,版本号也称为18.9

之后,每半年更新一版,目前最新版本为JDK16。

2.3 Java技术体系平台

Java SE(Java Platform,Standard Edition)标准版:
        Java SE 以前称为 J2SE。
        它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。

Java EE(Java Platform,Enterprise Edition)企业版:
        Java EE以前称为 J2EE。
        企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 应用程序。

Java ME(Java Platform,Micro Edition)微型版:
        Java ME以前称为 J2ME。
        Java ME 为在移动设备和嵌入式设备(比如手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。Java ME 包括灵活的用户界面、健壮的安全模型、许多内置的网络协议以及对可以动态下载的连网和离线应用程序的丰富支持。基于 Java ME 规范的应用程序只需编写一次,就可以用于许多设备,而且可以利用每个设备的本机功能。

2.4 Java在各领域的应用

企业级应用:
        主要指复杂的大企业的软件系统、各种类型的网站。Java的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛应用。应用领域包括金融、电信、交通、电子商务等。
    
Android平台应用:
        Android应用程序使用Java语言编写。Android开发水平的高低很大程度上取决于Java语言核心能力是否扎实。
    
大数据平台开发:
        各类框架有Hadoop,spark,storm,flink等,就这类技术生态圈来讲,还有各种中间件如flume,kafka,sqoop等等 ,这些框架以及工具大多数是用Java编写而成,但提供诸如Java,scala,Python,R等各种语言API供编程。

移动领域应用:
        主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手机、PDA、机顶盒、汽车通信设备等

2.5 Java语言特点

1.简单性
        Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征等。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。

2.面向对象(重点)
        Java是一个面向对象的语言。对程序员来说,这意味着要注意应用中的数据和操纵数据的方法(method),而不是严格地用过程来思考。
        两个基本概念:类、对象
        三大特性:封装、继承、多态

3.分布性
        Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
        分布式和集群的区别:https://www.zhihu.com/question/20004877

4.编译和解释性(跨平台性)(重点)
        Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。

5.稳健性(重点)
        Java原来是用作编写消费类家用电子产品软件的语言,所以它是被设计成写高可靠和稳健软件的。Java消除了某些编程错误,使得用它写可靠软件相当容易。Java是一个强类型语言,它允许扩展编译时检查潜在类型不匹配问题的功能。Java要求显式的方法声明,它不支持C风格的隐式声明。这些严格的要求保证编译程序能捕捉调用错误,这就导致更可靠的程序。
        可靠性方面最重要的增强之一是Java的存储模型。Java不支持指针,它消除重写存储和讹误数据(违背数据一致性的情况)的可能性。
        异常处理是Java中使得程序更稳健的另一个特征。异常是某种类似于错误的异常条件出现的信号。使用try/catch/finally语句,程序员可以找到出错的处理代码,这就简化了出错处理和恢复的任务。

6.安全性
        Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。如:安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查。
    另外一种关于安全性的解释:https://www.cnblogs.com/amirsterry/p/3737821.html

7、可移植性(跨平台)
        Java使得语言声明不依赖于实现的方面。例如,Java显式说明每个基本数据类型的大小和它的运算行为(这些数据类型由Java语法描述)。
        Java环境本身对新的硬件平台和操作系统是可移植的。Java编译程序也用Java编写,而Java运行系统用ANSIC语言编写。

8、高性能
        Java是一种先编译后解释的语言,所以它不如全编译性语言快。但是有些情况下性能是很要紧的,为了支持这些情况,Java设计者制作了“及时”编译程序,它能在运行时把Java字节码翻译成特定CPU(中央处理器)的机器代码,也就是实现全编译了。
        Java字节码格式设计时考虑到这些“及时”编译程序的需要,所以生成机器代码的过程相当简单,它能产生相当好的代码。

9、多线索性(多线程性)
        Java是多线索语言,它提供支持多线索的执行(也称为轻便过程),能处理不同任务,使具有线索的程序设计很容易。Java的lang包提供一个Thread类,它支持开始线索、运行线索、停止线索和检查线索状态的方法。

10、动态性
        Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。

跨平台性解析:

跨平台性:通过Java语言编写的应用程序在不同的系统平台上都可以运行。“Write once , Run Anywhere”

原理:只要在需要运行 java 应用程序的操作系统上,先安装一个Java虚拟机 (JVM Java Virtual Machine) 即可。由JVM来负责Java程序在该系统中的运行。

三、Java环境搭建

3.1 什么是JDK、JRE

JDK:Java Development Kit(JAVA软件开发包):
        JDK是整个java开发的核心,是提供给Java开发人员使用的,包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。

JRE:Java Runtime Environment(Java运行时环境):
        JRE是运行JAVA程序所必须的环境的集合,包含了Java virtual machine(JVM),runtime class libraries(运行时类库)和Java application launcher(Java应用程序启动器),这些是运行Java程序的必要组件。
        JRE是运行基于Java语言编写的程序所不可缺少的运行环境。也是通过它,Java的开发者才得以将自己开发的程序发布到用户手中,让用户使用。
        与大家熟知的JDK不同,JRE是Java运行环境,并不是一个开发环境,所以没有包含任何开发工具(如编译器和调试器),只是针对于使用Java程序的用户。

3.2 下载JDK

1、下载地址:https://www.oracle.com/java/technologies/javase-downloads.html
        2、找到JDK8进行下载即可;

3.3 安装JDK

如果已经安装,但是不是JDK8,那么可以提前卸载再安装。
        1、控制面板-卸载程序-删除和Java相关的程序
        2、删除安装文件夹
        3、计算机-属性-高级系统设置-高级选项卡-环境变量按钮
        4、删除JAVA_HOME系统变量
        5、在Path里面,把JAVA_HOME的引用删除

注:当然也可以直接安装,因为一个电脑可以安装多个JDK,但是只能使用其中一个;

1. 双击jdk-8u281-windows-x64.exe,进入jdk8安装向导界面,直接点击下一步

2.选择JDK的安装目录(安装路径尽量使用:字母、数组、下划线等组合,避免出现非法字符或空格等),点击下一步进行安装即可;

3. JDK安装完毕之后,直接进入JRE的安装界面
    注:一般来说安装了JDK,就不用在单独安装JRE了,但是为了IDE工具的使用,也要安装jre。

4. 修改JRE安装路径(最好和JDK安装在同一个父级目录),点击下一步安装即可;

5. 点击关闭,结束安装;

JDK目录详解:

3.4 环境变量的配置

为了在任何路径下,都可以执行javac和java工具,所以需要配置环境变量;
 
1、在我的电脑 - 右键选择属性,选择高级系统设置。

2、点击高级选项卡 — 环境变量

3、新建系统变量
        变量名:JAVA_HOME
        变量值:D:\Tools\Java\jdk1.8.0_281
        用途:定义一个变量,供其他地方使用

4、配置Path 
        选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,并使用半角的分号和已有的路径进行分隔。 
        path:windows系统执行命令时要搜寻的路径。
    
        Win7配置方式:
                变量名:Path 
                变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;...    
                注:给Path变量值添加内容而不是覆盖
        Win10配置方式:    
                双击Path,在编辑环境变量界面,点击新建;
                把%JAVA_HOME%\bin填写进去;
                最好把%JAVA_HOME%\bin上移到最上面;

为什么要配置Path?
                每次执行 java 的工具都要进入到bin目录下,是非常麻烦的。可不可以在任何目录下都可以执行java的工具呢?
                根据windows系统在查找可执行程序的原理,可以将java工具所在路径定义到path 环境变量中,让系统帮我们去找运行执行的程序。
        
                用途:让系统在任何路径下都可以识别java、javac、javap等命令。

3.5 环境测试

1、运行cmd
        2、运行java
        3、运行javac
        4、运行java -version

如果运行java或javac命令,出现“javac/java”不是内部或外部命令,也不是可以运行的程序或批处理文件,那么表示环境变量没有配置成功;

错误原因:当前执行的程序在当前目录下如果不存在,windows系统会在系统中已有的一个名为path的环境变量指定的目录中查找。如果仍未找到,会出现以上的错误提示。所以进入到 jdk安装路径\bin目录下,执行javac,会看到javac参数提示信息。

3.6 CLASSPATH详解

很多同学去网上翻阅教程的时候,经常会看到配置CLASSPATH,这是以前需要做的,现在不需要配置CLASSPATH,只需要配置JAVA_HOME即可;

变量名:CLASSPATH 
        变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
        注:点号表示当前目录,不能省略
        用途:告诉jvm要使用或执行的class放在什么路径上,便于JVM加载class文件,.;表示当前路径,tools.jar和dt.jar为类库路径

tools.jar
        工具类库(编译和运行等),它跟我们程序中用到的基础类库没有关系。我们注意到在Path中变量值bin目录下的各个exe工具的大小都很小,一般都在27KB左右,这是因为它们实际上仅仅相当于是一层代码的包装,这些工具的实现所要用到的类库都在tools.jar中,用压缩软件打开tools.jar,你会发现有很多文件是和bin目录下的exe工具相对性的。当然,如果tools.jar的功能只有这些的话,那么我们根本不用把它加入到CLASSPATH变量中,因为bin目录下的工具自己可以完成对这些类库的调用,因此tools.jar应该还有其他的功能。在里面还可以看到有Applet和RMI等相关的文件,因此tools.jar应该还是远程调用等必须的jar包。tools.jar的其他作用可以查看其他资料。

dt.jar
        运行环境类库,主要是Swing包,这一点通过用压缩软件打开dt.jar也可以看到。如果在开发时候没有用到Swing包,那么可以不用将dt.jar添加到CLASSPATH变量中。

CLASSPATH中的类库是由Application ClassLoader或者我们自定义的类加载器来加载的,这里当然不能包括基础类库,如果包括基础类库的话,并用两个不同的自定义类加载器去加载该基础类,那它得到的该基础类就不是唯一的了,这样便不能保证Java类的安全性。

基本类库和扩展类库rt.jar
        基本类库是所有的 import java.* 开头的类,在 %JAVA_HOME%\jre\lib 目录下(如其中的 rt.jar、resource.jar ),类加载机制提到,该目录下的类会由 Bootstrap ClassLoader 自动加载,并通过亲委派模型保证了基础类库只会被Bootstrap ClassLoader加载,这也就保证了基础类的唯一性。

扩展类库是所有的 import javax.* 开头的类,在 %JAVA_HOME%\jre\lib\ext 目录下,该目录下的类是由Extension ClassLoader 自动加载,不需要我们指定。
        rt.jar 默认就在根classloader的加载路径里面,放在claspath也是多此一举

配置好环境之后,我们接下来要做什么呢?

 常规Java程序开发流程:编写源代码 --> 编译 --> 运行

四、 HelloWorld

4.1 实现步骤

将 Java 代码编写到扩展名为 .java 的文件中。
        通过 javac 命令对该 java 文件进行编译。
        通过 java 命令对生成的 class 文件进行运行。

4.2 编写源程序

1、使用记事本编写HelloWorld.java 源文件 
        创建文本文档,命名为HelloWorld,然后把文本文档的扩展名改为.java,这就是一个Java源文件。

2、右键编辑HelloWorld.java 文件,写入如下代码:

public class HelloWorld{public static void main(String []args){System.out.println("HelloWorld");}
}

3、检查无误后,Ctrl+s 保存代码。

4.3 代码解析

public class HelloWorld{}解析:
        public 访问控制修饰符,后面课程详解[注意,也可以不加public,如果使用public来修饰类,那么类名必须和源文件名一致。]
        class 用来定义类,所有的Java程序都离不开类,所有的代码都需要写在类里面。
        HelloWorld 我们自定义的类名,类名要符合标识符规范,后面章节给大家介绍
        { } 代码块,成对出现

public static void main(String[] args) 解析:
        在Java中,碰到左花括号,要缩进 tab一下。
        固定语法,java程序的执行入口,也叫做main方法

System.out.println(“你好,世界!”); 解析:
        调用系统输出流,向控制台打印信息

在一个java源文件中可以声明多个class。但是,只能最多有一个类声明为public的。而且要求声明为public的类的类名必须与源文件名相同。

五、Java程序的运行

5.1 常用的DOS命令

盘符: : 进入某个磁盘空间

dir : 列出当前目录下的文件以及文件夹,dir是directory的缩写

md : 创建目录,md是make directory的缩写

rd : 删除目录,当目录不为空时,无法删除,rd是remove directory的缩写
                注: 可以先删除目录下所有文件,再删除目录

cd : 进入指定目录,可以多层嵌套,比如 cd 一级目录/二级目录...,cd是change directory的缩写

cd.. : 退回到上一级目录

cd\: 退回到根目录

del : 删除文件,del是delete的缩写

exit : 退出 dos 命令行

echo javase>1.txt : 创建文件及内容

cls :清屏,cls是clean screen的缩写

DOS快捷键:
                ← →:移动光标
                ↑ ↓:调阅历史操作命令
                Delete和Backspace:删除字符

注:tab:可以自动补全当前输入的文件夹名字

5.2 编译源程序

有了Java源文件,通过编译器将其编译成JVM可以识别的字节码文件。
        在该源文件目录下,通过javac编译工具对HelloWorld.java文件进行编译。
        如果程序没有错误,没有任何提示,但在当前目录下会出现一个HelloWorld.class文件,该文件称为字节码文件,也是可以执行的java的程序。

1、打开cmd命令行,快捷键win键+R,输入cmd(command 命令行),回车即可

2、在cmd命令行中使用命令进入源文件所在目录,输入 javac 源文件名.扩展名,比如 javac HelloWorld.java

3、运行成功之后,在源文件目录会多出来一个.class文件,这个文件才是jvm可识别的字节码文件。

修改win10 cmd窗口字符集:
    https://blog.csdn.net/tfs411082561/article/details/78416569

5.3 运行字节码

编译生成.class 字节码文件之后,我们就可以让jvm执行字节码文件啦

在cmd窗口输入: java 字节码文件名 (注意不需要写扩展名),只要源程序发生改变,肯定要重新编译再运行。
                java命令的作用: 负责运行,会启动jvm,加载运行时所需的类库,并对class文件进行执行.
                一个文件要被执行,必须需要一个执行的起始点,这个起始点就是main函数。

5.4 常见错误

1、文件找不到错误。
        原因1:文件扩展名问题,请检查文件类型,只有是JAVA文件才可以;后缀名隐藏问题;
        原因2:路径错误,一定要在Java源文件所在目录执行编译和运行;
        原因3:编译的类和生成的字节码文件名可能不一样,以生成才class文件名为主;

2、编译错误。
        原因1:大小写错误;
        原因2:字母拼写错误;
        原因3:缺失符号或中文符号;
        注:修改源代码之后,必须重新编译;

3、中文乱码。
        初学Java用的记事本写源码,命令行输出Hello World成功,想输出中文,结果出现乱码。
        原因:命令行编码格式和源码编码格式不同。
        解决方法1:修改源码编码格式,改为ANSI。(只适用于当前程序代码,如果重写一个还需此操作)。
        解决方法2:修改命令行控制台编码格式。(永久解决)
                https://jingyan.baidu.com/article/d7130635e8a38413fdf4753b.html

学习编程最容易犯的错是语法错误。Java要求你必须按照语法规则编写代码。如果你的程序违反了语法规则,例如:忘记了分号、大括号、引号,或者拼错了单词,java编译器都会报语法错误。尝试着去看懂编译器报告的错误信息。

5.5 print() 和 println()

无论是使用println()还是print()都是用来打印输出的,但是println()是换行打印,print是不换行打印。

println 换行打印

print 不换行打印

5.6 转义符

转义符          说  明
\n         用来定义换行
\r          用来定义回车
\t          用来定义水平制表符(相当于按了一下tab
\"          用来在双引号里面定义双引号
\'          用来在双引号里面定义单引号
        在Java中,只能使用""来表示字符串,如果想在字符串中使用双引号,必须使用转义字符;但是单引号可以用也可以不用。
\\          用来表示'\'
        在Java中,反斜杠是用来做转义字符串的,那么如果我们想要使用反斜杠呢,也可以使用转义符

System.out.println("张三\t12\t河南省郑州市");
System.out.println("李四\t14\t河南省郑州市");
System.out.print("Hello\n");
System.out.print("qqq\n");System.out.println("----------------------");
System.out.println("我叫\\李四\\,\'朋友们\'都亲切的叫我\"小李子\"");

5.7 Java注释

什么是注释?
        注释就是程序的说明。

注释作用:
        提高了代码的阅读性;调试程序的重要方法。

java注释类型:
        分为单行注释,多行注释和文档注释。
        //  单行注释
        /* 多行注释 */
        /** 文档注释 */
        javadoc命令    用来生成帮助文档的
        对于单行和多行注释,被注释的文字,不会被JVM(java虚拟机)解释执行。
        多行注释里面不允许有多行注释嵌套。

注释是一个程序员必须要具有的良好编程习惯。将自己的思想通过注释先整理出来,再用代码去体现。

5.8 良好的编程风格

正确的注释和注释风格:
        使用文档注释来注释整个类或整个方法。
        如果注释方法中的某一个步骤,使用单行或多行注释。

正确的缩进和空白:
        使用一次tab操作,实现缩进。
        运算符两边习惯性各加一个空格。比如:2 + 4 * 5。

块的风格:
        Java API 源代码选择了行尾风格

六、Java程序运行原理

6.1 Java程序的运行流程

1、按照代码规范来定义Java源文件
2、Java源文件不能直接运行,需要先编译后运行
3、当我们执行javac...的时候,会调用Java编译器对Java源文件进行编译,生成字节码文件
4、当我们执行java...的时候,会调用jvm运行字节码文件(JVM的三项主要功能)
        加载代码:由类加载器(class loader)完成;
        校验代码:由字节码校验器(bytecode verifier)完成;
        执行代码:由运行时解释器(runtime interpreter)完成
javac和java对于代码的校验-注:
        javac命令简单来说:可以对我们的语法进行校验,只要语法没有问题,就会生成字节码文件(编译时异常)。
        java命令简单来说:校验字节码,判断字节码是否符合代码规范或语言特性(运行时异常)。

6.2 Java两大核心机制

Java虚拟机(Java Virtual Machine)
        JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器。
        对于不同的平台,有不同的虚拟机。只有某平台提供了对应的Java虚拟机,java程序才可在此平台运行。
        Java虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,随处运行”。

垃圾收集机制(Garbage collection)
        不再使用的内存空间应回收——垃圾收集 
        Java语言相对于C/C++而言消除了程序员回收无用内存空间的责任;提供了一种系统线程跟踪存储空间的分配情况。并在JVM的空闲时,检查并释放那些可被释放的存储器空间。
        垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制而后干预。

基本上所有的编程语言都应该回收无用内存,不然就会宕机。
        宕机是计算机术语,口语里面我们简单的把停掉机器叫做down机,转换为汉字是“宕机”,但很多人都叫做“当机”/“死机”,虽然不规范但却流行。
        宕机,指操作系统无法从一个严重系统错误中恢复过来,或系统硬件层面出问题,以致系统长时间无响应,而不得不重新启动计算机的现象。它属于电脑运作的一种正常现象,任何电脑都会出现这种情况。

6.3 垃圾回收机制-Java与C/C++

一、谁在做 Garbage Collection? 
        一种流行的说法:在C++里,是系统在做垃圾回收;而在Java里,是Java自身在做。
        在C++里,释放内存是手动处理的,要用delete运算符来释放分配的内存。这是流行的说法。确切地说,是应用认为不需要某实体时,就需用 delete告诉系统,可以回收这块空间了。这个要求,对编码者来说,是件很麻烦、很难做到的事。随便上哪个BBS,在C/C++版块里总是有一大堆关于 内存泄漏的话题。
  Java采用一种不同的,很方便的方法:Garbage Collection。垃圾回收机制放在JVM里。JVM完全负责垃圾回收事宜,应用只在需要时申请空间,而在抛弃对象时不必关心空间回收问题。

二、对象在啥时被丢弃?
        在C++里,当对象离开其作用域时,该对象即被应用抛弃。是对象的生命期不再与其作用域有关,而仅仅与引用有关。Java的垃圾回收机制一般包含近十种算法。对这些算法中的多数,我们不必予以关心。只有其中最简单的一个:引用计数法,与编码有关。一个对象,可以有一个或多个引用变量指向它。当一个对象不再有任何一个引用变量指向它时,这个对象就被应用抛弃了。或者说,这个对象可以被垃圾回收机制回收了。这就是说,当不存在对某对象的任何引用时,就意味着,应用告诉JVM:我不要这个对象,你可以回收了。JVM的垃圾回收机制对堆空间做实时检测。当发现某对象的引用计数为0时,就将该对象列入待回收列表中。但是,并不是马上予以销毁。

三、丢弃就被回收?
        该对象被认定为没有存在的必要了,那么它所占用的内存就可以被释放。被回收的内存可以用于后续的再分配。但是,并不是对象被抛弃后当即被回收的。JVM进程做空间回收有较大的系统开销。如果每当某应用进程丢弃一个对象,就立即回收它的空间,势必会使整个系统的运转效率非常低下。
  前面说过,JVM的垃圾回收机制有多个算法。除了引用计数法是用来判断对象是否已被抛弃外,其它算法是用来确定何时及如何做回收。JVM的垃圾回收机制要在时间和空间之间做个平衡。因此,为了提高系统效率,垃圾回收器通常只在满足两个条件时才运行:即有对象要回收且系统需要回收。切记垃圾回收要占用时间,因此,Java运行时系统只在需要的时候才使用它。因此你无法知道垃圾回收发生的精确时间。
        注:丢弃只是代表我们不在使用该对象,可以被回收了。它不是立马被回收,而是先加入回收列表,等JVM空闲的时候才去进行回收。

四、没有引用变量指向的对象有用吗?  
        前面说了,没挂上引用变量的对象是被应用丢弃的,这意味着,它在堆空间里是个垃圾,随时可能被JVM回收。不过,这里有个不是例外的例外。对于一次性使用的对象(有些书称之为临时对象),可以不用引用变量指向它。举个最简单也最常见的例子:
  System.out.println(“I am Java!”);
  就是创建了一个字符串对象后,直接传递给println()方法。

五、应用能干预垃圾回收吗?
        许多人对Java的垃圾回收不放心,希望在应用代码里控制JVM的垃圾回收运作。这是不可能的事。对垃圾回收机制来说,应用只有两个途径发消息给 JVM.第一个前面已经说了,就是将指向某对象的所有引用变量全部移走。这就相当于向JVM发了一个消息:这个对象不要了。第二个是调用库方法 System.gc(),多数书里说调用它让Java做垃圾回收。第一个是一个告知,而调用System.gc()也仅仅是一个请求。JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,使垃圾回收操作容易发生,或提早发生,或回收较多而已。希望JVM及时回收垃圾,是一种需求。其实,还有相反的一种需要:在某段时间内最好不要回收垃圾。要求运行速度最快的实时系统,特别是嵌入式系统,往往希望如此。
  Java的垃圾回收机制是为所有Java应用进程服务的,而不是为某个特定的进程服务的。因此,任何一个进程都不能命令垃圾回收机制做什么、怎么做或做多少。

六、对象被回收时要做的事
        一个对象在运行时,可能会有一些东西与其关连。因此,当对象即将被销毁时,有时需要做一些善后工作。可以把这些操作写在finalize()方法(常称之为终止器)里。
  protected void finalize(){
                // finalization code here
        }
   这个终止器的用途类似于C++里的析构函数,而且都是自动调用的。但是,两者的调用时机不一样,使两者的表现行为有重大区别。C++的析构函数总是当对 象离开作用域时被调用。这就是说,C++析构函数的调用时机是确定的,且是可被应用判知的。但是,Java终止器却是在对象被销毁时。由上所知,被丢弃的 对象何时被销毁,应用是无法获知的。而且,对于大多数场合,被丢弃对象在应用终止后仍未销毁。
  在编码时,考虑到这一点。譬如,某对象在 运作时打开了某个文件,在对象被丢弃时不关闭它,而是把文件关闭语句写在终止器里。这样做对文件操作会造成问题。如果文件是独占打开的,则其它对象将无法 访问这个文件。如果文件是共享打开的,则另一访问该文件的对象直至应用终结仍不能读到被丢弃对象写入该文件的新内容。
  至少对于文件操作,编码者应认清Java终止器与C++析构函数之间的差异。
  那么,当应用终止,会不会执行应用中的所有finalize()呢?据Bruce Eckel在Thinking in Java里的观点:“到程序结束的时候,并非所有收尾模块都会得到调用”。这还仅仅是指应用正常终止的场合,非正常终止呢?
  因此,哪些收尾操作可以放在finalize()里,是需要酌酎的。

七、Java开发利器

7.1 文本编辑工具

7.1.1 EditPlus

EditPlus是一款由韩国 Sangil Kim (ES-Computing)出品的小巧但是功能强大的可处理文本、HTML和程序语言的Windows编辑器,你甚至可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。
    
        EditPlus(文字编辑器)汉化版是一套功能强大,可取代记事本的文字编辑器,拥有无限制的撤消与重做、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴板的功能,同步于剪贴板可自动粘贴进 EditPlus 的窗口中省去粘贴的步骤。另外它也是一个非常好用的HTML编辑器,它除了支持颜色标记、HTML 标记,同时支持C、C++、Perl、Java,另外,它还内建完整的HTML & CSS1 指令功能,对于习惯用记事本编辑网页的朋友,它可帮你节省一半以上的网页制作时间,若你有安装IE3.0 以上版本,它还会结合IE浏览器于 EditPlus 窗口中,让你可以直接预览编辑好的网页(若没安装IE,也可指定浏览器路径)。因此,它是一个相当棒又多用途多状态的编辑软件

7.1.2 NotePad

notepad(记事本)是一种代码编辑器,也是Windows 操作系统中的程序,用于文本编辑,在文字编辑方面与Windows写字板,Office功能相当。是一款开源、小巧、免费的纯文本编辑器。

Notepad内置支持多达 27 种语法高亮度显示(囊括各种常见的源代码、脚本)值得一提的是,它既支持 .nfo 文件查看,也支持自定义语言。

7.2 Eclipse

7.2.1 Eclipse简介

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,现在它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。2003年Eclipse 3.0选择OSGi服务平台规范为运行时架构。

2007年6月,稳定版3.3发布;
        2008年6月发布代号为Ganymede的3.4版;
        2009年6月发布代号为Galileo的3.5版;
        2010年6月发布代号为Helios的3.6版;
        2011年6月发布代号为Indigo的3.7版;
        2012年6月发布代号为Juno的4.2版;
        2013年6月发布代号为Kepler的4.3版;
        2014年6月发布代号为Luna的4.4版;
        015年6月项目发布代号为Mars的4.5版。

注:集成开发环境(IDE,Integrated Development Environment )是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。

7.2.2 Eclipse的下载和安装

1、打开Eclipse下载地址: https://www.eclipse.org/downloads/packages/

2、选择要下载的版本

3. 下载完毕直接解压即可使用,因为是解压版,所以我们需要自己设置快捷打开方式

4. 双击eclipse.exe直接启动,进入欢迎界面

7.2.3 Eclipse界面介绍

关闭启动时的欢迎界面,显示的是默认透视图——Java 透视图,整个窗口称为的工作台,主要有以下几个组成部分:主菜单、工具栏、透视图、状态栏,而透视图又由视图和编辑器组合而成,比如,下图的透视图为2+3+6+9的组合。

透视图所包含的视图并非一成不变,各视图的位置和大小均可通过鼠标拖动操作进行更改,也可以关闭一些视图或加入其它一些视图,可以自动记忆当前界面的改变。

1、主菜单:包括文件、编辑、源代码、搜索、运行与窗口等菜单,大部分的向导和各种配置对话框都可以从主菜单中打开。

2、包资源管理器视图:用于显示Java项目中的源文件、引用的库等,开发Java程序主要是用这个视图。

3、编辑器:用于代码的编辑。

4、工具栏:包括文件工具栏、调试、运行、搜索、浏览工具栏。工具栏中的按钮都是相应的菜单的快捷方式。

5、透视图快捷按钮:用来切换到提供的各个透视图,提供8种透视图,分别为:CVS资源库研究、Java(缺省值)、Java类型层次结构、Java浏览、插件开发、调试、小组同步和资源透视图。

6、大纲视图:用于显示代码的纲要结构,单击结构树的各结点可以在编辑器中快速定位代码。

7、每日小技巧:展示eclipse工具的使用快捷技巧。

8、状态栏:包含鼠标所点击位置的一些信息,如鼠标点击编辑器时,状态栏会显示编辑器所显示的文件是否可编辑,以及鼠标所处位置在编辑器中的行列号。
    
        9、问题视图:用于显示代码或项目配置的错误,双击错误项可以快速定位代码。

7.2.4 设置编码集和字体、颜色

默认的eclipse字符集为GBK,我们需要改为utf-8,如果觉得默认字体太小,也可以进行更改,包括背景颜色等

1、修改默认字符集:Window-->Preferences-->General-->Workspace-->Text file encoding-->Other-->UTF-8

2、修改字体大小:Window-->Preferences-->General-->Appearance-->Basic-->Text font

1、什么是字符集?
    字符(Character)是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。字符集(Character set)是多个字符的集合,字符集种类较多,每个字符集包含的字符个数不同,常见字符集名称:ASCII字符集、GB2312字符集、BIG5字符集、 GB18030字符集、Unicode字符集等。计算机要准确的处理各种字符集文字,就需要进行字符编码,以便计算机能够识别和存储各种文字。中文文字数目大,而且还分为简体中文和繁体中文两种不同书写规则的文字,而计算机最初是按英语单字节字符设计的,因此,对中文字符进行编码,是中文信息交流的技术基础。

2、GBK和UTF-8
    GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification),中华人民共和国全国信息技术标准化技术委员会1995年12月1日制订,国家技术监督局标准化司、电子工业部科技与质量监督司1995年12月15日联合以技监标函1995 229号文件的形式,将它确定为技术规范指导性文件。这一版的GBK规范为1.0版。

UTF-8(8-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,又称万国码,由Ken Thompson于1992年创建。现在已经标准化为RFC 3629。UTF-8用1到6个字节编码Unicode字符。用在网页上可以统一页面显示中文简体繁体及其它语言(如英文,日文,韩文)。

7.2.5 创建、删除、修改项目工程

项目是指一系列独特的、复杂的并相互关联的活动,这些活动有着一个明确的目标或目的,必须在特定的时间、预算、资源限定内,依据规范完成。
        注意: 点击透视图快捷按钮,把透视图改为java透视图

1、创建新的项目工程:右键点击包资源管理器视图空白处-->New-->Java Project

2、修改项目工程名:右键点击项目-->Refactor-->Rename

3、删除项目工程:右键点击项目-->Delete

7.2.6 使用Eclipse快捷创建HelloWorld

1、右键src目录-->New-->Class

2、在现有模版的基础上写入输出语句即可

3、Eclipse工具会自动对我们保存的java代码进行编译,所以直接运行即可
                在编辑器视图空白处右键-->Run As-->Java Application

7.3 IntelliJ IDEA

7.3.1 IDEA 简介

IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。

IntelliJ在业界被公认为最好的java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的。IDEA是JetBrains公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。它的旗舰版本还支持HTML,CSS,PHP,MySQL,Python等。免费版只支持Java,Kotlin等少数语言。

7.3.2 IDEA 下载和安装

1、下载 IDEA 安装包,我们先从 IDEA 官网下载 IDEA 2020.3.2 版本的安装包。
        下载链接如下:https://www.jetbrains.com/idea/download/

2、双击安装程序进行安装
    注意,如果电脑上之前有安装老版本的 IDEA, 需要先卸载干净,否则可能安装失败!注意,一定要先卸载干净掉老版本的 IDEA。

3、选择安装目录

4、勾选自己想要创建的桌面快捷方式,我的操作系统是 64 位的,所以勾选的 64 位快捷方式;

5、点击 Install

6、安装完成后,勾选 Run IntelliJ IDEA,点击 Finish 运行软件

7.3.4 IDEA 配置

idea 默认有settings来配置全局的配置项,例如:字体大小

八、Java API帮助文档

8.1 API概述

API (Application Programming Interface,应用程序编程接口)是 Java 提供的基本编程接口。

Java语言提供了大量的基础类,因此 Oracle 也为这些基础类提供了相应的API文档,用于告诉开发者如何使用这些类,以及这些类里包含的方法。
    
        我们在开发的过程中,需要经常使用到jdk自带的类库,通过API帮助文档可以很快的查找需要使用的相关内容。

Java类库非常庞大,提供了许多实用的类供程序使用,在进行Java编程时,我们常常需要使用Java类库所提供的这些类,这些类对程序的功能和质量起到了非常重要的作用。

下载API:http://www.oracle.com/technetwork/java/javase/downloads/index.html

8.2 API文档的使用

1、双击打开API帮助文档;

2、API帮助文档界面;

3、在API中查找:先找包-->再找类;
        String类:java.lang包-->String类
        System类:java.lang包-->System类
        Date类:java.util包-->Date类
        Math类:java.lang包-->Math类

4、如果不确定类所在的包,可以使用检索功能,点击API左上角显示按钮-->索引标签页-->输入查找的类;

九、课后练习

9.1 程序题

1、独立编写Hello World程序。
        要求记事本完成,并能背诵,默写在纸上出来。

public class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld");}
}

2、从控制台输出多行信息:姓名、年龄、爱好、住址,格式如下:
        提示:方法1:print()+\n 方法2:println()

public class UserMsg {public static void main(String[] args) {System.out.println("姓名:张三");System.out.println("年龄:12");System.out.println("爱好:足球、篮球、羽毛球");System.out.println("住址:河南省郑州市");System.out.println("------------------------");System.out.print("姓名:张三\n");System.out.print("年龄:12\n");System.out.print("爱好:足球、篮球、羽毛球\n");System.out.print("住址: 河南省郑州市");}
}

3、 编写并运行Java程序,输出输出个人名字、QQ号码、手机号码、你的家乡(要求用50字以上介绍你的家乡)及爱好(特长等)。(每条信息单独显示在一行) 。

public class UserMsg {public static void main(String[] args) {System.out.println("名字: XXX");System.out.println("QQ号码: 123456");System.out.println("手机号码: 17603877777");System.out.println("家乡简介: 河南省郑州市地处...");System.out.println("爱好: 吃饭、睡觉、打豆豆(豆豆好冤啊,天天被打)...");}
}

4、练习打字-马丁路德金分段练习;

9.2 改错题

1、找出如下代码的错误之处

public class helloWorld { //源文件名为HelloWorld.javapublic static void main(String[] args) {System.out.println("我的第一个Java小程序!");}
}// 源文件名和类名不一致

2、找出如下代码的错误之处

public class HelloWorld {public static main(String[] args) {System.out.println("我的第一个Java小程序!");}
}// main()缺少void

3、找出如下代码的错误之处

public class HelloWorld {public static void main(String[] args) {system.out.println("我的第一个Java小程序!")}
}// system应该写成System,语句应该使用;结束

4、找出如下代码的错误之处

public class HelloWorld {public static void main(String[] args) {System.out.println(我的第一个Java小程序!);}
}// 字符串应用使用双引号

9.3 简答题

1、JAVA三大开发平台分别是什么?
        Java SE(Java Platform,Standard Edition)标准版: 
                它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类,并为 Java Platform,Enterprise Edition(Java EE)提供基础。
        Java EE(Java Platform,Enterprise Edition)企业版: 
                企业版本帮助开发和部署可移植、健壮、可伸缩且安全的服务器端 Java 应用程序。Java EE 是在 Java SE 的基础上构建的,它提供 Web 服务、组件模型、管理和通信 API,可以用来实现企业级的面向服务体系结构(service-oriented architecture,SOA)和 Web 应用程序。Java EE是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如:Servlet 、Jsp等,主要针对于Web应用程序开发。
        Java ME(Java Platform,Micro Edition)微型版: 
                Java 平台微型版,支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持。

2、简述JAVA语言的特点?
        简单性: Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征等。因为Java没有结构,数组和字符串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。
        面向对象: Java是一个面向对象的语言。对程序员来说,这意味着要注意应用中的数据和操纵数据的方法(method),而不是严格地用过程来思考。
                在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。
                两个基本概念:类、对象
                三大特性:封装、继承、多态
        分布性: Java设计成支持在网络上应用,它是分布式语言。Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
        编译和解释性: Java编译程序生成字节码(byte-code),而不是通常的机器码。Java字节码提供对体系结构中性的目标文件格式,代码设计成可有效地传送程序到多个平台。Java程序可以在任何实现了Java解释程序和运行系统(run-time system)的系统上运行。
        安全性: Java的存储分配模型是它防御恶意代码的主要方法之一。Java没有指针,所以程序员不能得到隐蔽起来的内幕和伪造指针去指向存储器。更重要的是,Java编译程序不处理存储安排决策,所以程序员不能通过查看声明去猜测类的实际存储安排。编译的Java代码中的存储引用在运行时由Java解释程序决定实际存储地址。
        可移植性(跨平台性): 因为JVM的存在,可以实现一次编译,多处运行的机制。
        动态性: Java语言设计成适应于变化的环境,它是一个动态的语言。例如,Java中的类是根据需要载入的,甚至有些是通过网络获取的。

3、面向对象和面向过程的区别?
        面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
        面向对象是把构成问题事务分解成各个对象,这些对象共同参与解决问题。建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
        面向过程程序的特点:强调实现功能、算法和一切细节。
        面向对象程序的特点:强调具备了功能的对象。

4、什么是JDK、JRE、JVM以及它们的关系?
        JDK: Java Development Kit(JAVA软件开发包),JDK是整个Java开发的核心,它包括了Java运行环境JRE(Java Runtime Envirnment)、一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API)。
        JRE: Java Runtime Environment(Java运行时环境),运行JAVA程序所必须的环境的集合,包含JVM标准实现及Java核心类库。
        JVM: Java Virtual Machine,java虚拟机,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
        JDK = JRE + 开发工具集;
        JRE = JVM + Java标准类库;

5、为什么要配置path环境变量,如何配置?
        为了在任何路径下,都可以执行javac和java命令,所以需要配置环境变量;
        基于JAVA_HOME的配置方式:
                1、在我的电脑 - 右键选择属性,选择高级系统设置。
                2、点击高级选项卡 — 环境变量
                3、新建系统变量
                        变量名:JAVA_HOME
                        变量值:D:\Tools\Java\jdk1.8.0_311
                        用途: 定义一个变量,供其他地方使用
                4、双击Path,在编辑环境变量界面,点击新建;
                        把%JAVA_HOME%\bin填写进去; 
                        最好把%JAVA_HOME%\bin上移到最上面;

6、常见的几个命令行操作有哪些?
        dir : 列出当前目录下的文件以及文件夹,dir是directory的缩写
        md : 创建目录,md是make directory的缩写
        rd : 删除目录,当目录不为空时,无法删除,rd是remove directory的缩写
                注: 可以先删除目录下所有文件,再删除目录
        cd : 进入指定目录,可以多层嵌套,比如 cd 一级目录/二级目录...,cd是change directory的缩写
        cd.. : 退回到上一级目录
        cd\: 退回到根目录
        del : 删除文件,del是delete的缩写
        exit : 退出 dos 命令行
        echo javase>1.txt : 创建文件及内容
        cls :清屏,cls是clean screen的缩写

7、执行Java程序的步骤是什么?
        编写源代码 --> 编译 --> 运行
        编译: 执行 javac 源文件.扩展名,把java源文件编译成字节码文件;
        字节码文件: CLASS文件,就是java的字节码文件
        运行: 执行 java 字节码文件名,把字节码文件解释给对应的操作系统;
        注:如果我们更改了源代码,那么必须重新编译再运行;

8、Java程序运行流程?
        1.按照代码规范来定义Java源文件 (编写源文件)
        2.Java源文件不能直接运行,需要先编译后运行  (源文件需要先编译后运行)
        3.当我们执行javac...的时候,会调用Java编译器对Java源文件进行编译,生成字节码文件 (使用javac命令调用Java编译器来编译源文件,生成字节码文件)
        4.当我们执行java...的时候,会调用jvm运行字节码文件(使用java命令调用jvm来运行字节码文件)

9、System.out.println()和System.out.print()的区别?
        无论是使用println()还是print()都是用来打印输出的;
        println()是换行打印,print是不换行打印。

10、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?
        一个Java源文件可以包含多个类,只能有一个public修饰的类;

11、Java里面的常用转义符?
        \n     用来定义换行
        \r     用来定义回车
        \t   用来定义水平制表符
        \"   用来在双引号里面定义双引号
        \'   用来在双引号里面定义单引号
        \\   用来定义\

12、Java的两大核心机制是什么?
        Java虚拟机(Java Virtual Machine)Java虚拟机可以理解成一个以字节码为机器指令的CPU,对于不同的运行平台,有不同的虚拟机, Java虚拟机机制屏蔽了底层运行平台的差别,能够很好的实现跨平台。
        垃圾收集机制(Garbage collection) Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

13、JVM的三项主要功能是什么?
        加载代码: 由类加载器(class loader)完成;
        校验代码: 由字节码校验器(bytecode verifier)完成;
        执行代码: 由运行时解释器(runtime interpreter)完成;

14、什么是垃圾回收?
        垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用,以免造成内存泄露。
        不再使用的内存空间应回收。

15、对象无用了,就会立马被回收吗?
        垃圾回收器如发现一个对象不能被任何活线程访问时,他将认为该对象符合删除条件,就将其加入回收队列,但不是立即销毁对象,何时销毁并释放内存是无法预知的。

【Java基础系列教程】第二章 Java语言概述、配置环境变量相关推荐

  1. java基础案例教程第二章_第2章Java编程基础_补充案例教程.doc

    第2章Java编程基础_补充案例教程 博学谷--让IT教学更简单,让IT学习更有效博学谷--让IT教学更简单,让IT学习更有效 PAGE \* MERGEFORMAT34PAGE \* MERGEFO ...

  2. 登录注册小程序(JAVA基础案例教程第二章-课后作业)

    [案例介绍] 任务描述 编写程序实现简单的登录注册功能.程序包含以下4个功能: (1)登录功能,用户输入正确的账号密码进行成功: (2)注册功能,输入用户名和密码进行注册: (3)查看功能,查看所有的 ...

  3. ROS保姆级0基础入门教程⭐ |第一章 ROS的概述与环境搭建(4万字教程,建议收藏)

    目录 1 ROS简介 1.1 ROS概念 1.2 ROS设计目标 1.3 ROS发展历程 2 ROS安装 2.1安装ubuntu 2.2 安装 ROS 2.3 测试 ROS 3 ROS快速体验 3.1 ...

  4. 【JAVA SE】第一章 Java语言概述、环境变量和HelloWorld

    第一章 Java语言概述.环境变量和HelloWorld 文章目录 第一章 Java语言概述.环境变量和HelloWorld 一.Java语言概述 1.Java简介 2.Java发展历史 3.Java ...

  5. 《C Primer Plus》第二章——C语言概述(程序示例与解释,提高程序可读性,函数的定义与使用,调试,关键字,复习题与编程练习)

    文章目录 第二章-C语言概述 本章内容 简单的C程序示例 示例解释 快速概要 程序细节 简单程序的结构 提高程序可读性的技巧 进一步使用C 多个函数 调试程序 语法错误 语义错误 程序状态 关键字和保 ...

  6. 学习Java第一天:1、Java是什么?2、面向对象的编程思想的特点 3、Java的开发工具 4、安装JDK和配置环境变量 5、Java程序的运行过程 6、Java语言的特点

    目录 1.Java是什么? 2.面向对象的编程思想的特点 3.Java的开发工具 4.安装JDK和配置环境变量 5.Java程序的运行过程 6.Java语言的特点 1.Java是什么? java是一门 ...

  7. vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt

    第1章_C语言概述(vc环境如何运行c语言程序)[精选] C语言程序设计 授课对象:电子商务06 时间安排: 理论课(1-9周): 星期一 5-6节 9407D 星期三 5-6节 9410D 实验课( ...

  8. 描述java源程序构成_Java第二章Java程序设计

    <Java第二章Java程序设计>由会员分享,可在线阅读,更多相关<Java第二章Java程序设计(140页珍藏版)>请在人人文库网上搜索. 1.第2章 Java基本语法,2. ...

  9. java 计数器越界,[总结]-第二章 Java内存区域与内存溢出异常

    [总结]-第二章 Java内存区域与内存溢出异常 一.知识点 1.虚拟机运行时数据区 方法区:运行时常量池(JDK1.7被移出) 堆:存放对象实例或数组.新生代和老年代 虚拟机栈:线程私有.栈 本地方 ...

最新文章

  1. Linux基础-6性能监控
  2. 叮当快药产品体验报告
  3. Linux学习笔记 文件读写小细节
  4. 关于Android错误 View requires API level 14 (current...
  5. 计算机原理 ---- 程序之下
  6. Win10启用linux子系统(Linuxer福利)
  7. 数据库系统概论学习总结
  8. java常用设计模式详解及应用
  9. 书评 微权力下的成功项目管控(第2版)
  10. 【机器学习】常用激活函数及其导数
  11. [转贴][教学] 教你如何打飞机 ^_^
  12. js字符转换成分数_JavaScript实现分数显示
  13. splay的一些操作
  14. 【风靡全球年近40年的C++过时了吗?C++20来告诉大家】
  15. 北极熊扫描器4.0发布,无需过多介绍的国产安全工具
  16. 微信小程序怎么实现拍照功能,以及授权,拍完照保存到本地。
  17. 一个男孩子写的超级情书!!!
  18. 简要说明中国大学生篮球状况和未来发展前景(300字
  19. 微博内容爬取——陈一发儿微博实例
  20. 发布:双人联机岛屿争夺游戏 Enemies in the dark

热门文章

  1. matlab 堆排序
  2. [笔记]Unity粒子特效2:创建一个粒子特效
  3. SpringCloud Feign调用报错feign.RetryableException: too many bytes written executing
  4. java正则验证大陆以及港澳台手机号码
  5. 4.1.2 计算机网络之(电路交换、报文交换、分组交换--数据报--虚电路)
  6. 51单片机学习——语音模块
  7. linux dvb编译,linux dvb - frontend
  8. 聚类分析--基本原理、方法(Kmeans,层次聚类)
  9. microsoft visual studio 2010黑色主题
  10. 联通MM7彩信平台技术