On Java:中文版·基础卷
上QQ阅读APP看书,第一时间看更新

3.8 你的第一个Java程序

现在,你终于迎来了编写第一个完整程序的时刻。该程序运行时将显示一个字符串,以及一个通过Java标准库的Date类所生成的日期。

在本书的代码示例中,第一行代码都具有特别的作用:显示文件夹路径(比如本章的文件夹名为objects)以及文件名的一行注释。我使用自动化工具来提取和测试本书中符合上述条件的代码。此外,通过第一行代码注释,你也可以很方便地在库里[8]找到对应的源代码。

在每一个程序文件的起始处,你都必须使用import语句将所有额外的类导入到文件中。这里说“额外”是因为,所有Java文件都会自动导入一个特定的库,即java.lang。你可以打开浏览器在Oracle网站上查看这个库的文档,如果你还没有下载JDK文档,现在就可以去Oracle公司的Java网站下载[9],或者通过互联网搜索和查看。然后,如果你查看包的列表,会看到各种类的库。比如,你可以选择java.lang,你会看到一个呈现了该库所有类的列表。由于所有的Java代码文件都默认导入了java.lang,所以列表中的类我们都可以直接调用。另外,由于java.lang并不包含Date类,这就意味着你必须从其他库将其导入后才能使用。如果你不知道一个特定的类属于哪个库,或者说你想查看所有的类,可以点击Java文档页面的“Tree”按钮,页面会显示Java中所有的类供你查询。然后,你就可以通过浏览器的查找功能来找到Date类。比如,你会在页面列表中找到java.util.Date,这意味着Date类包含在util库中。因此,你必须在Java文件中添加一行代码import java.util.*,然后才可以使用Date类。

如果你在文档页面选择了java.lang然后查看其中的System类,会发现System类拥有几个字段。如果你选择了其中一个字段out,会发现这是一个static PrintStream对象。正因为它是static字段,所以你无须借助new关键字。也就是说,out对象会一直存在,你直接使用就行了。out对象的用途取决于它的类型,即PrintStream。此外,你会发现文档描述中的PrintStream是一个超链接,可以点击该超链接来查看PrintStream都提供了哪些方法为我们所用。其中包含的方法数量还不少,我们会在后续章节中陆续提及。现在需要的是println()方法,其作用是“在控制台打印我发送给你的内容,然后另起一行”。因此,如果你需要在控制台显示一段信息,可以在Java程序中编写如下代码:

需要注意的是,文件中必须存在一个与该文件同名的类(如果你没有这么做,则编译器会报错)。此外,如果你需要创建一个能够独立运行的程序,那么与文件同名的类中还必须包含一个程序启动的入口方法。这个特殊的方法叫作main(),具有以下的格式和返回值:

public关键字代表这个方法可以被外部程序所调用(相关详细内容会在第7章中进行介绍)。main()的参数是一个String对象的数组,虽然目前我们并不会使用args参数,但Java编译器会强制你传递该参数,因为它用于获取控制台的输入。

下面的代码将打印当前的日期:

在这段代码中,我们创建了一个作为参数的Date对象,并将它的值传递给println()方法。而当这一段语句执行完毕时,Date对象就没用了,因此垃圾收集器可以随时清理它,而我们则无须关心这种清理工作。

当你查看JDK文档时,会发现System类包含了许多实用的方法(Java的重要资产之一就是内容极为丰富的标准库),比如:

main()方法的第一行用于展示运行此程序的操作系统的所有属性,即操作系统的环境信息,并通过list()方法将结果传递给参数System.out。你会在本书的后续内容中看到,你还可以将结果发送至任何地方,比如发送至一个文件。同时你也可以获取一个特定的属性,比如这里获取的是user.name以及java.library.path。

代码结尾处的/*输出:标签用于展示此文件的实际输出结果。本书的大多数示例会采用这种注释格式来展示其输出内容,这样也便于你查看代码的输出是否正确。此外,当编译器检查和执行代码之后,该标签还支持自动将输出内容同步至本书的代码示例。