3.1 一个简单的Java程序
让我们再仔细看一看你所拥有的一个最简单的Java程序——一个仅仅在控制台上打印的程序:
public class FirstSample
{
public static void main(String[] args)
{
System.out.println("We will not use 'Hello, World!'");
}
}
值得花费所有的时间来熟悉这个示例的框架;这些片段将在所有应用程序中重复出现。首先,Java是区分大小写的。如果您在大写(如键入Main而不是main)时出错,程序将不会运行。
现在,让我们一行行看源代码。关键字public
叫做访问修饰符;这些修饰符控制控制程序的其它部分对该代码的访问级别。我们将在第五章讲更多关于访问修饰符的东西。关键字class
提醒你,Java中的所有东西都是在类里面。因为我们将花费许多时间在下一章的类上面,现在你可以把class当成程序逻辑的容器,它定义了一个应用程序的行为。正如在第一章提到的,类是构造块,所有的Java应用程序和applet都是在此基础上构建的。Java程序中的所有东西都必须在一个类里面。
class
关键字的后面是类的名字。Java中类的名字规则是十分有限的。名字必须以一个字符开始,并且在后面能够跟上字母和数字。长度也是有限制的。你不能使用一个Java预留单词(例如public或者class)作为类名。(请查看附录来查看预留关键字列表)
标准的命名约定(我们在FirstSample名称中遵循)是类名是以大写字母开头的名词。如果名称由多个单词组成,请在每个单词中使用大写字母。(在单词中间使用大写字母有时称为“camel case”,或自指“CamelCase”)。
你需要使源代码的文件名,和公有类的名字相同,并以.java
作为后缀。因此,你必须保存这个代码在一个叫做FirstSample.java
的文件中。(再一次,大小写是重要的,不要使用firstsample.java)
如果你已经正确命名文件,并且在源代码中没有拼写错误,然后当你编译源代码的时候,你将得到一个包含这个类字节码的文件。Java编译器自动命名字节码文件FirstSample.class
并且把它存储在与源文件相同的目录。最后,运行程序通过使用下面的命令:
java FirstSample
(记住,去掉.class后缀)当程序执行的时候,它简单打印字符串We will not use 'Hello, World!'
在控制台中。
当你使用
java ClassName
来运行已经编译的程序,Java虚拟机总是开始执行你指定的class中main方法中的代码。(Java将函数成为方法)因此,你必须有一个main方法在你类的源文件中,以便你的代码能够执行。你也能够添加你自己的方法到一个类当中,并且通过main方法调用它们。(我们将在下一章节中涉及如何编写你自己的方法。)
注意
根据Java语言规范,main方法必须被声明为public。(Java语言规范是描述Java语言的官方文档。你能够从
http://docs.oracle.com/javase/specs.
查看或者下载它。)但是一些版本的Java启动器会执行那些不为public的main方法。一个程序员编写了一个bug报告。为了查看它,访问
http://bugs.java.com/bugdatabase/index.jsp
并且出入Bug ID 4252539 。在1999,这个bug被标记为“关闭,不会被修复。”一个Sun工程师添加一个解释,Java虚拟机规范(在http://docs.oracle.com/javase/specs/jvms/se8/html)不会授权main为public,并且“修复它会引发潜在的麻烦。”幸运的是,幸运的是,理智终于占了上风。在Java 1.4及以后的运行器,强迫main方法必须是public这个故事有几个有趣的方面。一方面,令人失望的是,质量保证工程师常常工作过度,而不是Java专家,他们对错误报告做出了可疑的决定。另一方面,值得注意的是,在Java是开源之前,Sun让bug报告和他们的解决方案可以供任何人仔细审查。在某一点上,Sun甚至让程序员投票支持他们最鄙视的bug,并使用投票计数来决定在下一个JDK版本中修复哪些bug。
注意源代码中的大括号。在Java中,与C/C++一样,括号描述程序中的部分(通常称为块)。在Java中,任何方法的代码必须由一个开口括号{
开始,并由一个关闭括号}
结束。
括号风格引发了大量无用的争论。我们遵循一种排列匹配大括号的样式。由于空白与Java编译器无关,所以可以使用任何喜欢的支撑样式。当我们讨论各种循环时,我们将有更多关于大括号的使用的内容。
现在,不要担心关键字static void
,只是把它们看作是Java程序编译所需的一部分。到第四章结束时,你将完全理解这一咒语。现在要记住的是,每一个Java应用程序必须有一个主要的方法,用下面的方式声明:
public class ClassName
{
public static void main(String[] args)
{
program statements
}
}
C++笔记
作为C++程序员,你知道一个类是什么。Java类类似于C++类,但也有一些不同之处可能会影响到您。例如,在Java中,所有函数都是某类的方法。(标准术语将它们称为方法,而不是成员函数)。因此,在Java中,必须有main方法的包装类。您还可以熟悉C++中静态成员函数的概念。这些是在不对对象操作的类内定义的成员函数。Java中的main方法始终是静态的。最后,在C/C++中,空格关键字指示此方法不返回值。与C/C++不同,主方法不向操作系统返回“退出代码”。如果主方法正常退出,则Java程序具有退出代码0,表示成功完成。要使用其他退出代码终止程序,请使用System.Exit方法。
下面将你的注意力放到以下片段
{
System.out.println("We will not use 'Hello, World!'");
}
大括号标记方法体的开始和结束。此方法中只有一条语句。正如大多数编程语言一样,你可以把Java语句看作语言的句子。在Java中,每个语句必须以分号结尾。特别是,回车不会标记语句的结尾,因此如果需要,语句可以跨多行。
main方法的主体包含一条语句,该语句向控制台输出一行文本。
这里,我们使用System.out
对象并调用其println
方法。注意用于调用方法的句点。Java使用通用语法
object.method(parameters)
相当于函数调用。
在本例中,我们将调用println方法并将其传递给一个字符串参数。方法在控制台上显示字符串参数。然后,它终止输出行,以便每个对println的调用都将其输出显示在一个新行上。注意,像C/C++一样,Java使用双引号来分隔字符串。(您可以在本章后面找到有关字符串的更多信息。)
Java中的方法与任何编程语言中的函数一样,可以使用零、一个或多个参数(一些程序员称之为参数)。即使方法不接受任何参数,也必须使用空括号。例如,没有参数的println方法的变体只打印一条空行。你可以使用下面语句调用它
System.out.println();
注意
System.out
还有一个不向输出添加换行符的System.out.print("hello")
不带换行符打印hello。下一个输出在字母o之后立即出现。