1.4 编译和运行Java程序
现在,悟空已经创建了 Monkey.java 源程序。接下来,悟空要把它编译为Monkey.class类文件,然后再拜托Java虚拟机来运行这个Monkey类。如图1-9所示,编译Java源程序需要有专门的Java编译器程序,运行Java程序需要有Java虚拟机程序。那么Java编译器程序和Java虚拟机程序在哪里呢?答案是:在JDK里面。
图1-9 编译和运行Java程序
1.4.1 JDK简介
Java开发工具包(Java Development Kit,JDK)由Oracle公司提供。它为Java程序提供了基本的开发和运行环境。JDK还可以称为Java标准开发环境( Java Standard Edition,JavaSE)。JDK的官方下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/index.htm。
为了便于读者下载到与本书配套的 JDK 软件,在本书的技术支持网站JavaThinker.net上也提供了该软件的下载:http://www.javathinker.net/download.jsp。
JDK主要包括以下内容:
Java虚拟机程序:负责解析和运行Java程序。在各种操作系统平台上都有相应的Java虚拟机程序。在Windows操作系统中,该程序对应的文件为:JDK的安装根目录\bin\java.exe。
Java编译器程序:负责编译Java源程序。在Windows操作系统中,该程序对应的文件为:JDK的安装根目录\bin\javac.exe。
JDK类库:提供了编写Java程序所需要的最基础的Java类及各种实用类。java.lang、java.io、java.util、java.awt和javax.swing包中的类都位于JDK类库中。关于Java包的概念参见第2章的2.5节(包声明语句)。
假设JDK安装到本地后的根目录为C:\jdk,在C:\jdk\bin目录下有java.exe和javac.exe两文件,它们分别为Java虚拟机程序和Java编译器程序。
为了便于在DOS命令行下直接运行Java虚拟机程序和Java编译器程序,可以把C:\jdk\bin目录添加到操作系统的Path系统环境变量中。在Windows操作系统中,选择【控制面板】→【系统和安全】→【系统】→【高级系统设置】→【环境变量】命令。接下来就可以编辑Path系统环境变量了,如图1-10所示。
图1-10 在操作系统的Path系统变量中添加C:\jdk\bin目录
1.4.2 本范例的目录结构
本章范例位于chapter01目录下,读者可以把chapter01目录复制到本地硬盘的C:\目录下。为了便于管理Java源文件及Java类文件,悟空决定把所有的Java源文件放在src子目录下,把编译生成的所有的Java类文件放在classes目录下,如图1-11所示。
图1-11 本范例的目录结构
1.4.3 编译Java源程序
JDK中的javac.exe为Java编译器程序,可以在DOS控制台中运行该Java编译器程序。如图1-12所示,在Windows操作系统中选择【开始】→【运行】命令,然后输入“cmd”命令,就会打开一个DOS控制台。在DOS命令行中,在同一行输入以下用于运行javac.exe程序的命令:
javac -sourcepath C:\chapter01\src
-d C:\chapter01\classes
C:\chapter01\src\Monkey.java
以上javac命令包含以下内容:
-sourcepath选项:用于设定Java源文件所在的目录,此处为C:\chapter01\src目录。-sourcepath选项的默认值为DOS命令行的当前目录。
-d选项:用于指定编译生成的Java类文件的存放目录,此处为C:\chapter01\classes目录。-d选项的默认值为DOS命令行的当前目录。
待编译的Java源文件:此处为C:\chapter01\src\Monkey.java文件。
以上javac命令将对C:\chapter01\src\ Monkey.java源文件进行编译。先对该文件进行 Java 语法检查,如果发现错误,就停止编译,并返回错误信息。如果 Monkey.java源文件中无语法错误,就会生成Monkey.class文件,并把它存放在C:\chapter01\classes目录下。
图1-12 在Windows中用“cmd”命令打开DOS控制台
如果DOS控制台无法识别javac命令,那么说明事先没有把C:\jdk\bin目录添加到Path系统环境变量中。此时,必须在DOS命令行中显式指定地javac命令所在的目录:
C:\jdk\bin\javac -sourcepath C:\chapter01\src
-d C:\chapter01\classes C:\chapter01\src\Monkey.java
此外,也可以在DOS命令行设置当前的path环境变量,这个path环境变量只对当前打开的DOS控制台有效。在DOS控制台输入以下命令即可:
set path=C:\jdk\bin;%path%
1.4.4 运行Java程序
本章1.2节已经讲过,Java程序必须依靠Java虚拟机才能运行,而JDK中的java.exe程序就是Java虚拟机程序。在DOS命令行下,输入以下用于运行java.exe程序的命令:
java –classpath C:\chapter01\classes Monkey
以上java命令包含以下内容:
-classpath选项:用来设置classpath,该选项的默认值为当前路径。在运行Java程序时,很重要的一个环节是设置classpath,classpath代表Java类的根路径,Java虚拟机会从classpath中寻找所需Java类的.class文件。在本例中,classpath选项的值为C:\chapter01\classes。
待运行的Java类:此处为Monkey类。
以上java命令将会启动Java虚拟机,Java虚拟机会从C:\chapter01\classes目录下找到Monkey.class类文件,然后运行Monkey类,执行它的如下main()方法:
public static void main(String[] args) {
//创建代表智多星的Monkey对象
Monkey m=new Monkey("智多星");
//智多星说话
m.speak();
}
悟空把智多星叫过来,指着如图1-13所示的程序运行结果,对智多星说:“你看,计算机里的那个虚拟智多星在学你说话呢。”智多星对悟空佩服得五体投地,赞叹道:“孙爷爷,没想到这愣头计算机也能轻而易举地变出我的化身,这和爷爷您身上的猴毛有异曲同工之妙啊。”
图1-13 运行Monkey类的打印结果
不过,调皮的智多星很快就意识到,计算机里的虚拟智多星看不见摸不着,要是有个模样就更好玩了。在本书第22章的22.5节(创建动画),悟空将运用GUI编程,创建一个有模有样的虚拟智多星,来满足智多星的心愿。
悟空觉得每次用java命令运行Monkey类时,都要通过-classpath选项设置classpath有点麻烦。因此他运用“set classpath”命令在当前DOS控制台先设置了classpath,接下来在使用java命令时,就不用再设置classpath了:
C:\>set classpath=C:\chapter01\classes
C:\>java Monkey
以上“set classpath”命令只对当前DOS控制台有效。如果重新打开DOS控制台,还需重新执行该命令。
1.4.5 创建用于编译和运行Java程序的批处理文件
每次编译或运行Java程序时,都要在DOS命令行中输入很长的javac或java命令,悟空觉得太麻烦,就编写了一个适用于Windows操作系统的批处理文件build.bat,它的内容如下:
set currpath=.\
if "%OS%" == "Windows_NT" set currpath=%~dp0%
set src=%currpath%src
set dest=%currpath%classes
set classpath=%dest%
javac -sourcepath %src% -d %dest% %src%\Monkey.java
java -classpath %classpath% Monkey
以上build.bat批处理文件包含了javac命令和java命令。build.bat批处理文件位于chapter01根目录下。只要运行这个批处理文件,就会编译并运行Monkey类。本书后面章节的范例中都提供了build.bat批处理文件。如果要编译特定目录下的所有Java源文件,可以采用以下方式:
javac-sourcepath %src% -d %dest% %src%\*.java