
1.5 Java程序开发过程
1. 开发过程简介
要编写和运行第一个Java程序,需要有文本编辑器和Java开发平台。可以使用DOS操作系统提供的Edit或记事本作为文本编辑器,用J2SDK(Java 2 Software Development Kit)作为开发平台,J2SDK往往习惯称为JDK。也可以在安装好JDK之后,下载TextPad作为编辑和运行平台。通常,初学者使用Windows环境中的记事本作为创建源文件的文件编辑器。
要创建一个Java需要3个基本步骤。
①创建带有文件扩展名.java的源文件。
②利用Java编译器生成文件扩展名为.class的字节码文件。
③Application程序利用Java解释器运行该字节码文件,Applet利用Java自带查看器或浏览器运行嵌有字节码文件的HTML文件。
注意
保存文件时一定要使用public的类名作为文件名,用.java作为后缀。记事本默认的扩展名是.txt,所以必须修改文件扩展名为.java,可在文件名的开始和扩展名的结尾处加上一对双引号后保存;或者不加双引号,保存类型选择all files。
Java编译器是JDK中的javac.exe, 将Java源程序编译成字节码文件,语法如下:
javac 类名.java
然后按Enter键。如果源程序没有错误,则屏幕上没有输出,否则将显示出错信息。
Java解释器是JDK中的java.exe,解释和执行Java应用程序使用语法:
java 类名
然后按Enter键。Java的平台无关性就是因为每一种计算机上都安装了一个合适的解释器,将不同计算机上的系统差别隐藏起来,使字节码面对一个相同的运行环境,实现了“编写一次,到处运行”的目标。
注意
随着JDK版本的升级,编译器javac后边的类名可以不是主类的名称,但是解释执行的时候必须是:主类.class,因为文件名可以是任一类名,但是生成的class文件,解释从主类开始。
对于Applet程序来说,需要HTML文件的配合,使用语法:
appletviewer HTML文件名.html
然后按Enter键。字节码文件嵌入HTML文件中,appletviewer为Applet查看器(JDK中的appletviewer.exe),含有内置Java解释器。appletviewer又称小浏览器,它仅显示相关Applet的属性,初学者使用方便。
2. 创建Java Application程序示例
编写一个Java Application程序,其过程简要描述如下。
首先,用户需要下载和安装J2SDK(JDK)。这里以JDK 1_5_0_06版本为例。暂且把程序源文件放置在JDK的bin目录之下自己创建的code文件夹中。
其次,确定文本编辑器。在本例中使用记事本,以Windows 2000/XP为例,从“开始”菜单项中选择“程序”→“附件”→“记事本”。当然,用户也可以选择其他文本编辑器。
【例1.1】 实现第一个简单的应用程序:打印一行文字。
(1)在“记事本”中编写如下源程序
// 文件名: Welcome.java public class Welcome { public static void main( String args[] ) { System.out.println( "Welcome to Java Programming!" ); } //结束main 方法的定义 } // 结束类Welcome的定义
(2)语法说明
程序中的“//”为单行注释符,只对当前行有效,表示该行是注释行。程序人员在程序中加入注释,用于提高程序的可读性,使程序便于阅读和理解。程序执行时注释行会被Java编译器忽略。多行注释用“/*”开始,以“*/”结束。
Java程序由类或类的定义组成,类构成了Java程序的基本单元。创建一个类是Java程序的首要工作。Java用关键字class标志一个类定义的开始,class前面的public关键字代表该类的访问属性是公共的,表示这个类在所有场合中可使用。一个程序文件中可以声明多个类,但仅允许有一个公共的类。class后面是该类的类名,在本例中是Welcome。
Application中有一个显著标记就是必须定义一个main()主方法,而且应该按照例1.1中所示的那样来定义其修饰符和命令行参数,用关键字说明它是public,静态的static,无返回值的void,主方法的参数是字符串类型String的数组args[]。一个类中可以声明多个方法,Java应用程序自动从main主方法开始运行,通过主方法再调用其他的方法。Java语言的每条语句都必须用分号结束。
System.out是标准输出对象,它用于在Java应用程序执行的过程中向命令窗口显示字符串和其他类型的信息。方法System.out.println在命令窗口中显示一行文字后,会自动将光标位置移到下一行(与在文本编辑器中按Enter键类似)。
(3)编译运行程序
源程序编写并保存好之后,接下来准备执行该程序。为此,打开一个命令提示符窗口,用cd..退到根目录,如图1.4所示。

图1.4 “命令提示符”窗口
接着,进入程序所存储的目录(假定应用程序存放在C:\Program Files\Java\jdk1.5.0_06\bin\code下),在“命令提示窗口”中键入dir Welcome.java命令,显示文件,如图1.5所示。

图1.5 显示Welcome.java文件
再在“命令提示符”窗口中键入javac Welcome.java,如图1.6所示。

图1.6 编译Welcome.java文件
如果此程序不含语法错误提示,那么,将生成一个Welcome.class文件,自动保存在源文件同级目录下,此文件含有表示该程序的Java字节码。
再在“命令提示符”中键入dir命令,就可以看到编译后生成的.class文件,表明程序编译成功,如图1.7所示。

图1.7 显示编译后的情况
运行字节码文件,键入java Welcome。
此命令启动Java解释器,载入“.class”文件,字节代码被Java解释器解释执行。解释命令省略了.class文件扩展名,否则解释器不执行。解释器自动调用方法main,然后通过System.out.println方法显示“Welcome to Java Programming!”,如图1.8所示。

图1.8 运行程序并显示运行结果
注意
如果在安装时没有另外指定JDK安装目录,则javac.exe和java.exe被存放在C:\Program Files\Java\jdk1.5.0_06\bin目录之下(以JDK1.5.0_06 版本为例)。如果想在任何目录下都能使用编译器和解释器,应在DOS提示符下运行命令:C:\>path C:\Program Files\Java\jdk1.5.0_06 \bin或将path C:\Program Files\Java\jdk1.5.0_06\bin放到autoexe.bat文件中,或在“我的电脑”→“属性”→“高级”→“环境变量”中设置。path环境变量指定操作系统应到什么地方查找Java工具。
3. 创建Java Applet程序示例
Java Applet用来实现动态的、交互式网页功能,在当今网络世界中扮演着重要的角色。Applet是一种嵌入到HTML文件当中的Java程序,可以通过网络下载来运行。HTML是超文本标记语言,它采用一整套标记来定义Web页。HTML文件的扩展名为.html或.htm。与从命令窗口执行Java应用程序不同,Applet通过JDK的查看器appletvierer或支持Java的Web浏览器运行。
【例1.2】 显示一行字符串的简单Java Applet。
(1)在记事本中编写源代码
// 文件名: WelcomeApplet.java // A first applet in Java import javax.swing.JApplet; // 加载系统类 JApplet import java.awt.Graphics; // 加载系统类 Graphics public class WelcomeApplet extends JApplet { public void paint( Graphics g ) { g.drawString( " Welcome to Java Programming!", 25, 25 ); } //结束paint方法的定义 } //结束类WelcomeApplet 的定义
(2)语法说明
“//”表示单行注释。Java含有许多预定义的类或数据类型,这些类被归入Java API(Java应用程序编程接口,Java类库)的各个包中。程序中使用import语句引入系统预定义类。程序中两行加载语句告诉编译器JApplet类的位置在javax.swing包中,Graphics类的位置在java.awt包中。当创建一个Applet小应用程序时,要加载JApplet类或Applet类。加载Graphics类为的是使程序能够画图(如线、矩形、椭圆和字符串等)。
注意
java.applet中有一个传统的Applet类,它没有包括在Java最新的GUI构件javax.swing包中。
Java API中的所有包存放在java目录或javax目录中,这两个目录下还有许多子目录,包括awt目录和swing目录。注意:在磁盘上找不到这些目录,因为它们都存储在一个称为JAR的特殊的压缩文件中。在J2SDK安装结构中有一个名为rt.jar的文件,该文件包括了Java API里所有.class文件。
与应用程序一样,每一个Java Applet至少由一个类定义组成。但是,用户几乎不必“从头开始”定义一个类。因为Java提供继承机制,使用户可以在已存在的类的基础上创建一个新类。程序中通过关键字extends 实现。extends前面为用户自定义的类,作为派生类或子类,extends后边的类名为被继承的类,称为基类或父类,或者超类,如此程序中的系统类JApplet。通过继承建立的新类具有其父类的属性(数据)和行为(方法),同时增加了新功能(如在屏幕上显示Welcome to Java Programming!的能力)。
实际上,一个Applet小应用程序需要定义200多个不同的方法,而在上边的程序中,我们只定义了一个paint方法。如果非得定义200多个方法,仅仅为了显示一句话,我们可能永远无法完成一个Applet。使用extends继承JApplet类,这样JApplet的所有方法就已成为 WelcomeApplet的一部分。使用继承机制,程序员不必知道所继承的基类的每一个细节,只需知道JApplet类具有创建一个Applet小应用程序的能力即可。
注意
学习Java语言,一方面是学习用Java语言编写自己所需的类和方法,另一方面是学习如何利用Java类库中的类和方法。这样,有助于确保不会重复定义已提供的功能。
程序中重写了父类JApplet的paint( )方法,其中参数g为Graphics类的对象。在paint( )方法中,通过用Graphics对象g后的点操作符(.)和方法名drawString来调用drawString( )方法,在坐标(25,25)窗口处输出字符串,其中坐标是以像素点为单位,第一个坐标为x轴的坐标,它表示距离Applet框架左边界的像素个数;第二个坐标为y轴坐标,它表示距离Applet框架上边界的像素个数。Applet程序没有main( )方法是Applet小应用程序与Application应用程序的一个显著区别。JApplet类的方法paint在缺省情况下,不做任何事情。WelcomeApplet类覆盖了或重新定义了这个行为,以使appletviewer或浏览器调用paint方法,在屏幕上显示一行字符串。
(3)用记事本编写与例1.2 Java源文件配合的HTML文件
<html> <applet code="WelcomeApplet.class" width=400 height=50> </applet> </html>
HTML标记是用尖括号括起来,成对出现。加斜杠表明标记结束。用<html>和</html>标记HTML文件的开始和结束,用<applet>和</applet>标记Applet的开始和结束。<applet>包含3个必需的参数。
• code:表示要打开的Applet字节码文件名。
• width: 表示Applet所占用浏览器页面的宽度,以像素点为单位。
• height: 表示Applet所占用浏览器页面的高度,以像素点为单位。
一般情况下,字节码文件和HTML文件处于同一目录下。否则字节码文件的路径要在code中给出。
(4)编译运行
①编译Java源文件,和例1.1一样,使用javac 命令:
javac WelcomeApplet.java,如图1.9所示。
②运行时使用如下命令格式:
appletviewer WelcomeApplet.html,如图1.9所示。

图1.9 Java Applet的操作步骤
③运行结果窗口如图1.10所示。

图1.10 Applet运行结果
注意
Java的跨平台不是没有任何条件的。Application的运行以各个平台上的虚拟机为前提条件。Applet也是如此。当需要用Java的Swing编写Applet时,Web浏览器中需要安装支持它的插件。所以,为了在学习时调试Applet方便,本书示例均以JDK提供的appletviewer工具来显示嵌有Applet的HTML文件。
4. 良好的编程习惯
①所有的Java语句必须以英文分号“;”结束。
②Java区分大小写,要注意关键字和标识符字母的大小写。
③花括号成对出现。在写左花括号时,立即再写一个右花括号,这样有助于防止漏写右花括号。类名称后面的花括号标示着类定义的开始和结束。
④习惯上,类名应以首字母大写开头,变量以小写字母开头,变量名有多个单词的第一个单词后边的每个单词首字母应大写。当读一个Java程序时,寻找以大写字母开头的标识符,这些通常代表Java类。
⑤程序段中适当增加空白行会增加程序的可读性。在定义方法内容的花括号中,将整个内容部分缩进一层,使程序结构清晰,程序易读。编译器会忽略这些空白行和空格字符。
⑥在程序中,一行最好只写一条语句。Java允许一个长句分割写在几行中,但是不允许从标识符或字符串的中间分割。
⑦文件名与public类名在拼写及大小写上必须保持一致。
⑧如果一个.java文件含有多于一个public类,则是一个错误。
⑨不以.java为扩展名的文件名是一个错误。
⑩运行appletviewer时,文件扩展名不是.htm或.html是一个错误,这将导致无法使appletviewer装载Applet。