1.4 第一个Java程序

1.4 第一个Java程序

1.4.1 编辑Java源代码

编辑Java源代码可以使用任何无格式的文本编辑器,在Windows操作系统上可使用记事本(NotePad)、Editplus等程序,在Linux平台上可使用Vi工具等。

编写Java程序不要使用写字板,更不可使用word等文档编辑器。因为写字板、Word等工具是有格式的编辑器,当使用它们编辑一份文档时,这个文档中会包含一些隐藏的格式化字符,这些隐藏字符会导致程序无法正常编译、运行。

在记事本中新建一个文本文件,并在该文件中输入如下代码

1
2
3
4
5
6
7
public class HelloWorld {
// Java程序的入口方法,程序将从这里开始执行
public static void main(String[] args) {
// 向控制台打印一条语句
System.out.println("Hello World!");
}
}

编辑上面的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 destDirjavac命令的选项,用以指定编译生成的字节码文件的存放路径destDir只需是本地磁盘上的一个有效路径即可;而
  • srcFileJava源文件所在的位置,这个位置既可以是绝对路径,也可以是相对路径

通常,总是将生成的字节码文件放在当前路径下,当前路径可以用点(.)来表示。在命令行窗口进入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程序还需要JDKlib路径下dt.jartools.jar文件中的java类,因此还需要把这两个文件添加到CLASSPATH环境变量里。

JDK9不包含dt.jar和tools.jar

JDK9lib目录已经不再包含dt.jartools.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类。