1.4 编译和运行Java程序
现在,悟空已经创建了Monkey.java源程序。接下来,悟空要把它编译为Monkey.class类文件,然后就劳驾Java虚拟机来运行这个Monkey类。如图1-8所示,编译Java源程序需要有专门的Java编译器程序,运行Java程序需要有Java虚拟机程序。那么,Java编译器程序和Java虚拟机程序在哪里呢?在JDK里面。
图1-8 编译和运行Java程序
1.4.1 JDK简介
JDK是Java Development Kit(Java开发工具包)的缩写,由SUN公司提供。它为Java程序提供了基本的开发和运行环境。JDK还可以称为JavaSE(Java Standard Edition,Java标准开发环境)。JDK的官方下载地址为:http://java.sun.com。此外,在JavaThinker.org网站上也提供了JDK的下载,网址为:http://www.javathinker.org/download/software/jdk.rar。
JDK主要包括以下内容:
● Java虚拟机程序:负责解析和运行Java程序。在各种操作系统平台上都有相应的Java虚拟机程序。在Windows操作系统中,该程序的文件名为java.exe。
● Java编译器程序:负责编译Java源程序。在Windows操作系统中,该程序的文件名为javac.exe。
● JDK类库:提供了最基础的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-9。
图1-9 在操作系统的PATH系统变量中添加C:\jdk\bin目录
1.4.2 本范例的目录结构
本章范例位于sourcecode\chapter01目录下,读者可以把chapter01目录复制到本地硬盘的C:\目录下。为了便于管理Java源文件及Java类文件,悟空决定把所有的Java源文件放在src子目录下,把所有的Java类文件放在classes目录下,参见图1-10。
图1-10 本范例的目录结构
1.4.3 编译Java源程序
JDK中的javac.exe为Java编译器程序,可以在DOS控制台中运行该Java编译器程序。在Windows中选择【开始】→【程序】→【附件】→【命令提示符】,就会打开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目录下。
如果操作系统无法识别javac命令,那么说明事先没有把C:\jdk\bin目录添加到PATH系统环境变量中。此时,必须显式指定javac命令所在的目录:
C:\jdk\bin\javac -sourcepath C:\chapter01\src
-d C:\chapter01\classes C:\chapter01\src\Monkey.java
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-11所示的程序运行结果,对智多星说:“你看,电脑里的那个虚拟智多星在学你说话呢。”智多星对悟空佩服得五体投地,赞叹道“孙爷爷,没想到这愣头电脑也能轻而易举地变化出我的化身,这和爷爷您身上的猴毛有异曲同工之妙啊。”
图1-11 运行Monkey类的打印结果
不过,调皮的智多星很快就意识到,电脑里的虚拟智多星看不见摸不着,要是有个模样就更好玩了。在第21章的21.6节(创建动画),悟空将运用GUI编程,创建一个有模有样的虚拟智多星,来满足智多星的心愿。
悟空觉得每次用java命令运行Monkey类时,都要通过-classpath选项来设置classpath,有点麻烦。因此,他运用“set classpath”命令在当前DOS控制台先设置了classpath,接下来再使用java命令时,就不用再设置classpath了:
C:\> set classpath=C:\chapter01\classes C:\> java Monkey
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批处理文件。