Java程序设计:原理与范例
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.5 第一个Java程序

安装并配置完JDK之后,便可以开始编写Java程序了。本节的目的并不在于讲解Java语言的语法细节,而是期望通过一个简单的程序让读者对Java程序的编写步骤有一个粗略的认识,同时阐述1.4节中配置的Classpath环境变量的作用。

编程之前,先请读者思考一个问题—用什么样的工具来编写源文件?在学习C语言时一般采用Turbo C或Visual Studio等IDE。然而,IDE的使用并非必需,任何编程语言的源文件都是纯文本格式的,因此,从理论上来说,仅仅采用简单的纯文本编辑工具(如Editplus、UltraEdit、Windows自带的记事本等)就能编写任何语言的源文件了。

初学者需要掌握Java编程的一些基本原理和细节,而这些往往只有通过命令行的方式才能有较为深刻的理解,另一方面,很多IDE在某些操作和配置上也与这些原理和细节有着一定的联系。因此,建议读者在初学阶段使用纯文本编辑器来编写Java程序,在理解了必要的原理和细节后再使用IDE,以提高开发效率推荐初学者使用Editplus,其免费并且支持行号显示和语法高亮。IDE则推荐Eclipse,具体见附录A。

接下来,我们开始编写本书的第一个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源文件的扩展名新建或重命名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源文件所在的目录CD(Change Directory,改变目录)是命令行的内部命令,用于改变命令行的工作路径。

(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中例如,可以将“D:\ MyJavaSource”加到Classpath中,这样就可以在任何工作路径下直接输入“java HelloWorld”运行HelloWorld类了。一般很少这样做,是因为class文件所在的路径往往不固定。既然配置了“.”,故只要先将工作路径切换到class文件所在路径,便能找到该路径下的class文件。。如果程序用到了第三方jar文件中的类,则应该将这些jar文件(包括其所在路径)也加到Classpath环境变量中。