1.5 第一个Java程序
安装并配置完JDK之后,便可以开始编写Java程序了。本节的目的并不在于讲解Java语言的语法细节,而是期望通过一个简单的程序让读者对Java程序的编写步骤有一个粗略的认识,同时阐述1.4节中配置的Classpath环境变量的作用。
编程之前,先请读者思考一个问题—用什么样的工具来编写源文件?在学习C语言时一般采用Turbo C或Visual Studio等IDE。然而,IDE的使用并非必需,任何编程语言的源文件都是纯文本格式的,因此,从理论上来说,仅仅采用简单的纯文本编辑工具(如Editplus、UltraEdit、Windows自带的记事本等)就能编写任何语言的源文件了。
初学者需要掌握Java编程的一些基本原理和细节,而这些往往只有通过命令行的方式才能有较为深刻的理解,另一方面,很多IDE在某些操作和配置上也与这些原理和细节有着一定的联系。因此,建议读者在初学阶段使用纯文本编辑器来编写Java程序,在理解了必要的原理和细节后再使用IDE,以提高开发效率。
接下来,我们开始编写本书的第一个Java程序。
1.5.1 编辑源文件
在D盘下新建一个名为MyJavaSource的文件夹,以作为本书所有源文件的根目录,然后在文本编辑器中输入以下代码,并保存到MyJavaSource下名为HelloWorld.java的文件中。
HelloWorld.java 001 import java.lang.System; 002 003 public class HelloWorld{ 004 /* 005 * 程序入口 006 */ 007 public static void main(String[]args){ 008 System.out.println("神奇的Java之旅!"); // 在显示器上输出一行文字 009 } 010 }
保存文件时需要注意:
(1)Java源文件的文件名必须和代码中class后的名称严格一致(包括每个字母的大小写,并且中间不能含空格),对于本例,文件名必须是HelloWorld。
(2).java是所有Java源文件的扩展名。
HelloWorld.java虽然只有数行,但却具有一个Java源文件的大部分如下特征。
(1)第1行表示程序引入了JDK类库所提供的一个类,该类名为System,位于java.lang包下(包的概念将在第6章介绍)。
(2)第3行中的class表示定义的是一个类,类是Java程序的基本组成单元。class之后是类的名称,类名后以一对花括号括起来的内容称为类体(第4~9行)。
(3)第3行中的public修饰了类的可见性,表示HelloWorld类是公共的。
(4)第4~6行中的“/*”与“*/”是块注释符号,用于注释连续的多行;第8行中的“//”是单行注释符号,用于注释本行其后的内容。注释是对代码的解释和说明,一般放在要说明的代码上边或右边。注释是给人看的,编译器不会解析它们,因此注释可以是任何内容。为代码加上必要的注释可以增加代码的可理解性。
(5)第7行中的main是方法名称,类似于C中的函数。方法位于类中,其后一对圆括号中的内容是方法的形式参数,圆括号后以一对花括号括起来的内容称为方法体(第8行)。方法体中可以包含语句,每条语句均以分号结尾。
(6)main方法是Java独立应用程序的入口,程序总是从main方法开始执行。一个Java独立应用程序有且仅有一个名为main的方法。
(7)第8行中,System是第1行所引入的类的名字;out是System类中的一个静态字段的名字,其类型是PrintStream(打印流,同样是JDK提供的类);println是PrintStream类所具有的一个方法的名字,其功能是向标准输出流(此处为命令行窗口)打印一些内容并换行,其后一对圆括号中的内容是println方法的实际参数,其指定了要打印的内容(以一对双引号括起来的字符串常量)。
(8)通过点号访问类的字段及方法(第8行),这与访问C语言中结构体的成员类似。
上述大部分特征与C语言是一致的,没有面向对象编程经验的读者可能会对其中部分内容较为陌生,这里只需有一个初步的认识,详细内容将在后续章节分别介绍。
1.5.2 编译源文件
源文件编辑完毕后,就可以对其编译了。打开命令行窗口,执行以下操作。
(1)输入“D:”并回车,工作路径将切换到D盘。
(2)输入“CD MyJavaSource”并回车,工作路径将切换到D盘下的MyJavaSource目录,即Java源文件所在的目录。
(3)输入“javac HelloWorld.java”并回车,注意javac后的文件名要与之前保存的文件名严格一致。若源文件没有错误,则执行完此命令后如图1-11所示。
图1-11 成功编译源文件
打开D盘下的MyJavaSource文件夹,会发现多了一个名为HelloWorld.class的文件,它就是源文件被成功编译的结果—类文件。
1.5.3 运行类文件
有了类文件,接下来就可以运行它了。在命令行窗口中输入“java HelloWorld”(注意不要在HelloWorld后加“.class”),程序将在命令行窗口中打印一行文字,如图1-12所示。
图1-12 成功运行Java类文件
请读者思考两个问题:
(1)Java解释器是如何找到HelloWorld.class这个类文件的?
(2)HelloWorld类用到了JDK类库提供的System类,后者又是如何被找到的?
1.4节中配置的Classpath环境变量指定了两部分内容—“.”和“rt.jar”,前者代表命令行窗口的当前工作路径。由于在运行HelloWorld类之前,已经将工作路径切换到了HelloWorld.class文件所在的路径(即D盘下的MyJavaSource目录),因此Java解释器能在该路径下找到相应的类文件。
如前所述,多个Java类文件可以被压缩为一个扩展名为jar的文件,因此,每个jar文件都相当于一个目录。读者可以用解压缩工具浏览rt.jar的目录结构,如图1-13所示。当把某个jar文件加到Classpath中后,Java运行环境就能根据Classpath环境变量找到该jar文件,从而找到该jar文件中所有的类。HelloWorld类所引入的System类就在rt.jar中(具体是在压缩文件的java目录下的lang目录中),而该jar文件已经被加到了Classpath环境变量中。
图1-13 rt.jar文件
可见,Classpath环境变量的作用是让Java运行环境知道到哪里去找需要的类文件,因此,完全可以将自己编写的类文件所在的路径加到Classpath中。如果程序用到了第三方jar文件中的类,则应该将这些jar文件(包括其所在路径)也加到Classpath环境变量中。