1.4 第一个Java程序
1.4 第一个Java程序
1.4.1 编辑Java源代码
编辑Java
源代码可以使用任何无格式的文本编辑器,在Windows
操作系统上可使用记事本(NotePad
)、Editplus
等程序,在Linux
平台上可使用Vi
工具等。
编写Java
程序不要使用写字板,更不可使用word
等文档编辑器。因为写字板、Word
等工具是有格式的编辑器,当使用它们编辑一份文档时,这个文档中会包含一些隐藏的格式化字符,这些隐藏字符会导致程序无法正常编译、运行。
在记事本中新建一个文本文件,并在该文件中输入如下代码
1 | public class HelloWorld { |
编辑上面的Java
文件时,Java
程序严格区分大小写。将上面文本文件保存为HelloWorld.java
文件,这个文件就是Java
程序的源程序。编写好Java
程序的源代码后,接下来就应该编译该Java
源文件来生成字节码了。
1.4.2 编译Java程序
编译Java
程序需要使用javac
命令,因为前面已经把javac
命令所在的路径添加到了系统的PATH
环境变量中,因此现在可以使用javac
命令来编译Java
程序了。
如果直接在命令行窗口里输入javac
,不跟任何选项和参数,系统将会输出大量提示信息,用以提示javac
命令的用法,读者可以参考该提示信息来使用javac
命令。
对于初学者而言,先掌握javac
命令的如下用法:
1 | javac -d destDir srcFile |
在上面命令中:
-d destDir
是javac
命令的选项,用以指定编译生成的字节码文件的存放路径,destDir
只需是本地磁盘上的一个有效路径即可;而srcFile
是Java
源文件所在的位置,这个位置既可以是绝对路径,也可以是相对路径。
通常,总是将生成的字节码文件放在当前路径下,当前路径可以用点(.
)来表示。在命令行窗口进入HelloWorld.java
文件所在路径,在该路径下输入如下命令:
1 | javac -d . HelloWorld.java |
运行该命令后,在该路径下生成一个HelloWorld.Class
文件。
使用javac
编译文件只需要指定存放目标文件的位置即可,无须指定字节码文件的文件名。因为javac
编译后生成的字节码文件有默认的文件名:文件名总是以源文件所定义类的类名作为主文件名,以.class
作为扩展名。这意味看如果一个源文件里定义了多个类,将编译生成多个字节码文件。事实上,指定目标文件存放位置的-d选项
也是可省略的,如果省略-d选项
,则意味着将生威的字节码文件放在当前路径下。
1.4.3 运行Java程序
运行Java
程序使用java
命令,启动命令行窗口,进入HelloWorld.class
所在的位置,在命令行窗口里直接输入java
命令,不带任何参数或选项,将看到系统输出大量提示,告诉开发者如何使用java
命令.
对于初学者而言,当前只要掌握java
命令的如下用法即可:
1 | java Java类名 |
值得注意的是,java命令后的参数是Java
类名,而不是字节码文件的文件名,也不是Java
源文件名.
通过命令行窗口进入HelloWorld.class
所在的路径,输入如下命令:
1 | java HelloWorld |
运行上面命令,将看到如下输出:
1 | Hello World! |
这表明Java
程序运行成功
1.4.4 根据CLASSPATH环境变量定位类
JDK1.4之前需要设置CLASSPATH环境变量
实际上,如果使用1.5以上版本的JDK
,完全可以不用设置CLASSPATH
环境变量————正如上面编译、运行Java
程序所见到的,即使不设置CLASSPATH
环境变量,完全可以正常编译和运行Java
程序
那么CLASSPATH
环境变量的作用是什么呢?当使用java Java类名命令来运行Java
程序时,JRE
到哪里去搜索Java
类呢?可能有读者会回答,在当前路径下搜索啊。这个回答很聪明,但1.4以前版本的JDK
都没有设计这个功能,这意味着即使当前路径已经包含了HelloWorld.class
,并在当前路径下执行”java HelloWorld
“,系统将一样提示找不到HelloWorld
类。
除此之外,编译和运行Java
程序还需要JDK
的lib
路径下dt.jar
和tools.jar
文件中的java
类,因此还需要把这两个文件添加到CLASSPATH
环境变量里。
JDK9不包含dt.jar和tools.jar
JDK9
的lib
目录已经不再包含dt.jar
和tools.jar
文件。
因此,如果使用1.4以前版本的JDK
来编译和运行Java
程序,常常需要设置CLASSPATH
环境变量的值为
1 | .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar |
(其中%JAVA_HOME%
代表JDK
的安装目录)。
只有使用早期版本的JDK
时,才需要设置CLASSPATH
环境变量
CLASSPATH加载第三方库
当然,即使使用JDK1.5
以上版本的JDK
,也可以设置CLASSPATH
环境变量(通常用于加载第三方类库),一旦设置了该环境变量,JRE
将会按该环境变量指定的路径来搜索Java
类。这意味着如果CLASSPATH
环境变量中不包括点(.),也就是没有包含当前路径,JRE
不会在当前路径下搜索Java
类。
使用java命令的-cp选项临时指定JRE搜索路径
如果想在运行Java
程序时临时指定JRE
搜索Java
类的路径,则可以使用-classpath
选项(或用-cp
选项,cp
是简写,作用完全相同),即按如下格式来运行java
命令:
1 | java -classpath %CLASSPATH%;.;dir1;dir2;dir3;......;dirN Java类名 |
-classpath
选项的值可以是一系列的路径,多个路径之间在Windows
平台上以分号(;
)隔开,在Linux
平台上则以冒号(:
)隔开。
上面命令通过%CLASSPATH%
来引用CLASSPATH
环境变量的值,并在-classpath
选项的值里添加了一个点,强制JRE
在当前路径下搜索Java
类。