
1.3 Java程序基本结构
Java应用程序是独立的,可以直接在Java平台上运行的程序。本书主要介绍这种类型的程序。
1.3.1 Java程序开发步骤
开发Java程序通常分三步:编辑源程序;编译源程序;执行或调试程序,得到程序输出结果。图1-5给出了开发Java程序的具体过程。

图1-5 Java程序的编辑、编译和执行过程
下面程序功能是在控制台输出一个字符串。
程序1.1 HelloWorld.java

1.编辑源程序
可以使用任何文本编辑器(如Windows的记事本)编辑Java源程序,也可以使用专门的集成开发环境(如Eclipse、NetBeans等)。使用Windows的记事本编写源程序,如图1-6所示。

图1-6 Java源文件的编辑
源程序输入完毕后,选择“文件”→“保存”命令,打开“另存为”对话框,在“保存在”列表框中选择文件的保存位置,这里将文件保存在D:\study目录中(假设该目录已经存在),在“文件名”文本框中输入源程序的文件名,如HelloWorld.java。
注意:输入文件名时应加双引号,否则文件将可能被保存为文本文件。
启动命令行窗口,进入D:\study目录,使用DIR命令可以查看到文件HelloWorld.java已保存到磁盘了。
2.编译生成字节码
接下来,需要将HelloWorld.java源文件编译成字节码文件。编译源文件需要使用JDK的javac命令,如下所示:

若源程序没有语法错误,该命令执行后返回到命令提示符,编译成功。在当前目录下产生一个HelloWorld.class字节码文件,该文件的扩展名为class,主文件名与程序中的类名相同,该文件也称为类文件。可以使用DIR命令查看生成的类文件。
提示:假如正确安装了JDK,而在尝试编译程序时,计算机提示找不到javac,说明没有指定命令工具的路径。例如,在Windows中,需要设置PATH环境变量,使其指向JDK的bin目录。
3.执行字节码
源程序编译成功生成字节码文件后可以使用Java解释器执行该程序。注意,这里不要加上扩展名class,运行结果如图1-7所示。

当一个Java程序执行时,JVM首先会用一个称为类加载器(class loader)的程序将类的字节码加载到内存中。如果程序还要用到其他类,类加载程序会在需要它们之前动态地加载它们。当加载该类后,JVM使用一个称为字节码验证器(bytecode verifier)的程序来校验字节码的合法性,以确保字节码不违反Java的安全规范。最后,通过校验的字节码由运行时解释器(runtime interpreter)翻译和执行。

图1-7 程序的运行结果
1.3.2 第一个程序分析
下面对第一个程序中涉及的内容作简单说明。
1.类定义
Java程序的任何代码都必须放到一个类的定义中,本程序定义一个名为HelloWorld的类。public为类的访问修饰符,class为关键字,其后用一对大括号括起来,称为类体。
2.main()方法
Java应用程序的标志是类体中定义一个main()方法,称为主方法。主方法是程序执行的入口点,类似于C语言的main()函数。main()方法的格式如下:

public是方法的访问修饰符,static说明该方法为静态方法,void说明该方法的返回值为空。main()方法必须带一个字符串数组参数String[] args,可以通过命令行向程序中传递参数。方法的定义也要括在一对大括号中,大括号内可以书写合法的Java语句。
3.输出语句
本程序main()方法中只有一行语句:

该语句的功能是在标准输出设备上打印输出一个字符串,字符串字面值用双引号定界。Java语言的语句要以分号(;)结束。
System为系统类。out为该类中定义的静态成员,是标准输出设备,通常指显示器。println()是输出流out中定义的方法,功能是打印输出字符串并换行。若不带参数,仅起到换行的作用。另一个常用的方法是print(),该方法输出后不换行。
4.源程序命名
在Java语言中,一个源程序文件被称为一个编译单元。它是包含一个或多个类定义的文本文件。Java编译器要求源程序文件必须以java为扩展名。当编译单元中有public类时,主文件名必须与public类的类名相同(包括大小写),如本例的源程序文件名应该是HelloWorld.java。若编译单元中没有public类,源程序的主文件名可以任意。
提示:Java程序在任何地方都区分大小写,如main不能写成Main,否则编译器可以编译,但在程序执行时解释器会报告一个错误,因为它找不到main()方法。