第一章 Java语言概述及开发环境
1.1Java程序运行机制
1.1.1 高级语言的运行机制
计算机高级语言按照程序的执行方式可分为编译型
和解释型
两种
编译型语言:使用专门的编译器
,一次性编译成(特定平台上的)机器码,并包装成该平台(操作系统)所能识别的可执行性程序的格式,因此可以脱离开发环境独立运行,但是无法移植到其他平台运行。
注:
有的程序编译完成后,还需要对其他编译好的目标代码进行链接生成最终的可执行性程序(这种形式可以实现低层次的代码复用)
解释型语言:使用某特定平台的解释器
对源程序逐行进行解释成该特定平台上的机器码并立即执行的语言。通常不会进行整体性的编译和链接处理。
可以认为:每次执行程序都需要进行一次编译
1.1.2 Java程序的运行机制和JVM
执行Java程序的两个步骤
:首先程序先经过编译
(Windows命令窗口使用java命令)生成
一种与平台无关的字节码
(*.class文件,不能执行);然后使用Java解释器来解释
(Windows命令窗口使用javac命令)执行
(解释成特定平台的机器码)
JVM:Java虚拟机(Java Virtual Machine),负责解释执行字节码文件。所有平台上的JVM(不同平台上的JVM都是不同的)向编译器提供相同
的编程接口
,而编译器生成虚拟机能解释的代码(字节码),然后由虚拟机来解释执行。
1.2 开发Java的准备
背景:1、Sun在1996年年初发布了JDK 1.0,包括了两部分:运行环境(JRE)和开发环境(JDK)。运行环境包括核心API、集成API、用户界面API、发布技术、Java虚拟机
5个部分;开发环境包括编译Java程序的编译器(即javac命令)。
2、Oracle把Java分成Java SE
(Java Standard Edition,Java 标准版)、Java EE
(Java Java Enterprise Edition,Java企业版)、Java ME
(Java Micro Edition,Java微型版)三个部分,而且为Java SE和Java EE分别提供了JDK
和Java SDK
(Software Development Kit)两个开发包。
1.2.1 下载和安装Java8的JDK(以Windows平台为实例)
JDK
:Java标准版开发包(Java SE Development Kit),它提供了编译、运行Java程序所需要的各种工具和资源,包括Java编译器、Java运行时环境(JRE),以及常用的Java类库等。
JRE
:Java运行时环境(Java Runtime Environment)。
下载可百度,下面只有注意事项及一些目录解释。
安装时:
1、不需要
安装Public JRE
,因为公共JRE一个独立的JRE系统,会单独安装在系统的其他路径下。公共JRE会向IE浏览器和系统中注册Java运行时环境。通过这种方式,系统中任何应用程序都可以使用公共JRE。由于现在网页上执行Applet的机会越来越少,而且完全可以选择使用JDK目录下JRE来运行Java程序,因此没有必要安装公共JRE。
2、Development Tools
:这是JDK的核心,包括编译Java程序必需的命令工具。这个选项里包含了运行Java程序的JRE,这个JRE会安装在JDK安装目录的子目录里,这也是无需安装公共JRE的原因。
3、Source Code
:安装这个选项将会安装Java所有核心类库的源代码。
4、选择JDK的安装路径,系统默认安装在C:\Program Files\Java路径下,但不建议
安装在有空格
的路径下,这样可能导致一些未知的问题,建议
直接安装在根目录
下,例如D:\Java\jdk1.8.0_05\。
安装完成后,可在JDK安装路径下看到如下的文件路径。
1、bin
:该路径下存放了JDK的各种工具命令
,常用的javac、java等命令。
2、db
:该路径是安装Java DB(database)的路径。
3、include
:一些平台特定的头文件。
4、jre
:改路径下安装的就是运行Java程序所必需的JRE环境
5、lib
:改路径下存放的是JDK工具命令的实际执行程序
。
补充说明:用于编译Java程序的javac.exe命令是使用Java编写的,这个类就是lib路径下tools.jar文件的sun\tools\javac路径下的Main类,JDK的bin路径下的javac.exe命令实际上仅仅包装了这个Java类。不仅如此,bin路径下的绝大部分命令都是包装了tools.jar文件里的工具类。
6、javafx-src.zip
:该压缩文件中存放的就是Java FX所有核心类库的源代码。
7、src.zip
:该压缩文件中存放的是Java所有核心类库的源代码。
8、README和LICENCE等说明性文档
。
1.2.2 设置PATH环境变量(具体可百度)
虽然计算机中已经安装了JDK,但此时还不能使用java和javac命令,因为计算机不知道去哪找着两个命令。
Windows操作系统(不区分大小写)是通过Path环境变量来查找命令的,Path环境变量的值是一系列路径,所以只需要把java和javac两个命令所在的路径添加到PATH环境变量中,就可以编译和运行Java程序了。(Linux也是,只是Linux区分大小写,所以Linux的path只能大写)。
Windows系统添加环境变量:
右击桌面上的“计算机
”图标,单击“属性
”,出现“控制面板\所有控制面板项\系统”窗口,单击“高级系统设
置”,出现“系统属性”对话框,单击“高级
”tab页,单击“环境变量
”,出现“环境变量”对话框,因为path的系统环境变量已经存在,所以直接编辑
。选中(单击)用户变量中的path,然后点击“编辑”,出现一个对话框,点击新建,设置path环境变量的值为D:\Java\jdk1.8.0_05\bin,保存即可。
补充说明:为什么是添加到用户变量中呢?用户变量和系统变量并没有太大区别,用户变量只对当前用户有效,而系统变量对所有用户都有效。使用用户变量是为了减少自己所在的修改对其他人的影响。(对于当前用户而言,两者效果差不多)。系统变量的路径排在用户变量的路径之前。这可能出现一种情况:如果Path系统变量的路径里包含了java命令,而PATH用户变量的路径里也包含了java命令,则优先执行Path系统路径里包含的java命令。
Linux 中添加环境变量:
1、进入当前用户的home路径下,输入命令:
ls -a
该命令列出当前目录下的全部文件,包括隐藏文件,Linux平台的环境变量是通过.bash_profile文件来设置的。
2、使用无格式编辑器打开该文件,在该文件的PATH变量后添加JDK的安装路径。
#设置PATH环境变量
PATH=.:$PATH:$HOME/bin:JDK的安装路径
Linux平台使用冒号作为多个路径间的分隔符,$PATH则用于引用原有的PATH变量值。
3、完成了PATH路径值的设置后,在.bash_profile文件最后添加导出PATH变量的语句
#导出PATH环境变量
export PATH
4、重新登录Linux平台或是执行命令(运行该文件,使文件中设置的PATH变量值生效)
source .bash_profile
1.3 第一个java程序
1.3.1 编辑Java源代码
注:编写Java程序不要使用
写字板,更不可使用Word等文档编辑器。因为它们是有格式
的编辑器,使用它们编辑一份文档时,文档中会包含一些隐藏的格式化字符,这些隐藏字符会导致程序无法正常编译、运行。Windows中可以使用记事本(NotePad)、EditPlus等,Linux中可以使用VI工具等。
打开记事本,第一个程序HelloWorld诞生啦
public class HelloWorld
{
//Java程序的第一个入口方法,程序将从这里开始执行
public static void main(String[] args)
{
//向控制台打印一条语句Hello World!
System.out.println("Hello World!");
}
}
将文本文件保存为HelloWorld.java,该文件就是Java程序的源程序。接下来就是将源程序编译生成字节码了。
1.3.2 编译Java程序
在Windows命令窗口输入javac
,提示javac命令的用法
javac命令的用法:
用法: javac <options> <source files>
其中, 可能的选项包括:
-g
生成所有调试信息
-g:none
不生成任何调试信息
-g:{lines,vars,source}
只生成某些调试信息
-nowarn
不生成任何警告
-verbose
输出有关编译器正在执行的操作的消息
-deprecation
输出使用已过时的 API 的源位置
-classpath <路径>
指定查找用户类文件和注释处理程序的位置
-cp <路径>
指定查找用户类文件和注释处理程序的位置
-sourcepath <路径>
指定查找输入源文件的位置
-bootclasspath <路径>
覆盖引导类文件的位置
-extdirs <目录>
覆盖所安装扩展的位置
-endorseddirs <目录>
覆盖签名的标准路径的位置
-proc:{none,only}
控制是否执行注释处理和/或编译。
-processor <class1>[,<class2>,<class3>...]
要运行的注释处理程序的名称; 绕过默认的搜索进程
-processorpath <路径>
指定查找注释处理程序的位置
-parameters
生成元数据以用于方法参数的反射
-d <目录>
指定放置生成的类文件的位置
-s <目录>
指定放置生成的源文件的位置
-h <目录>
指定放置生成的本机标头文件的位置
-implicit:{none,class}
指定是否为隐式引用文件生成类文件
-encoding <编码>
指定源文件使用的字符编码
-source <发行版>
提供与指定发行版的源兼容性
-target <发行版>
生成特定 VM 版本的类文件
-profile <配置文件>
请确保使用的 API 在指定的配置文件中可用
-version
版本信息
-help
输出标准选项的提要
-A关键字[=值]
传递给注释处理程序的选项
-X
输出非标准选项的提要
-J<标记>
直接将 <标记> 传递给运行时系统
-Werror
出现警告时终止编译
@<文件名>
从文件读取选项和文件名
对于初学者而言,先掌握javac命令用法如下:
javac -d destdir srcFile
在上面的命令中,-d destdir 是javac命令的选项,用以指定编译生成的字节码文件的存放路径,destdir只需是本地磁盘上的一个有效路径即可;而srcFile是Java源文件所在的位置,可以是绝对路径,也可以相对路径。
通常,总是将生成的字节码文件放在当前路径下,当前路径
可以用(.)
来表示。在命令行窗口进入HelloWorld.java文件所在路径,在该路径下输入命令:
//编译HelloWorld.java 文件
javac -d . HelloWorld.java
执行该命令后,在该路径下生成一个HelloWorld.class文件。
1.3.3 运行java程序
运行Java程序使用java命令
,进入HelloWorld.class在Windows命令窗口输入java
,提示java命令的用法。
初学时,先掌握java
命令的如下用法:
java Java类名
注:
java 命令后面的参数是Java类名
,不是
字节码文件的文件名,也不是
Java源文件名。
通过命令窗口进入HelloWorld.class所在的路径,输入命令:
//注意大小写
java HelloWorld
运行成功后,将看到输出:
Hello World!
1.3.4 根据CLASSPATH环境变量定位类
如果是1.5
版本以上的JDK,完全可以不用设置CLASSPATH环境变量。当我们使用java
命令来运行java程序时,JRE在当前路径下寻找Java类,1.4以前的版本没有设置这个功能,则需要在CLASSPATH环境变量中添加一点(.)
,用以告诉JRE在当前路径下搜索Java类。除此以外,编译和运行Java程序还需要JDK的lib路径下的dt.jar和tools.jar文件中的Java类,因此还需要把这两个文件添加到CLASSPATH环境变量中去,CLASSPATH 环境变量的值为
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
(其中%JAVA_HOME%代表JDK的安装目录)
当然,如果1.5
版本以上的JDK想要设置也是可以的,但一旦设置了
该环境变量,JRE将会按照该环境变量指定的路径
来搜索Java类。因此,如果在CLASSPATH环境变量中不包括一点(.)
,也就是没有包含当前的路径,JRE就不会在当前路径下搜索Java类。(所以修改的时候一定记得在CLASSPATH环境变量中添加一点
)
如果想在运行Java程序时临时指定JRE搜索路径,则可以使用-classpath
选项,如下:
java -classpath dir1;dir2...;dirN Java类
-classpath选项的值可以是一系列
的路径,多个路径之间在Windows中使用分号(;)
隔开,Linux中使用冒号(:)
隔开。
如果在运行Java程序时指定了-classpath选项的值,JRE将严格按照-classpath指定的路径来搜索Java类,即不会在当前路径下搜索,此时CLASSPATH环境变量所指定的搜索路径也不再有效。
如果想使CLASSPATH环境变量指定的搜索路径有效,而且还会在当前路径下搜索Java类,则可以按照如下方式来运行Java程序:
java -classpath %CLASSPATH%;.;dir1;dir2...;dirN Java类
通过%CLASSPATH%来引用CLASSPATH环境变量的值,并在-classpath选项的值里面添加了一点(.),强制JRE 在当前路径下搜索Java类。
1.4Java程序的基本规则
1、如需某个类能被解释器直接解释执行,则这个类中必须包含main方法
,且main方法必须使用public static void
来修饰,且main方法的形参必须是字符串数组类型(String[] args
是字符串数组形式)。
2、Java程序源文件的后缀必须
是.java
。
3、在通常情况下,Java程序源文件的主文件名可以是任意的。但是有一种情况例外
:如果Java程序源代码中定义了一个public
类,在该源文件的主文件名
必须与该public类的类名相同
。
4、严格区分大小写。
5、安装JDK以及Java相关程序、工具时,不要
安装在包含空格
的路径里,否则可能引发错误。