Let's look more closely at about the simplest Java program you can have—one that simply prints a message to the console window:

让我们更进一步来看一个最简单的向控制台窗口输出信息的Java程序。

 

public class FirstSample
{
      public static void main(String[] args)
      {
            System.out.println("We will not use 'Hello, World!'"); 
      }
}

It is worth spending all the time that you need to become comfortable with the framework of this sample; the pieces will recur in all applications. First and foremost, Java is case sensitive. If you made any mistakes in capitalization (such as typing Main instead of main), the program will not run.

你需要花费来熟悉这个例子的框架,这是值得的,因为这个框架将在所有应用程序中重现。首先,Java是大小写敏感的。如果你在大小写上犯了错误(例如把Main写成main),程序就不会运行。

Now let's look at this source code line by line. The keyword public is called an access modifier; these modifiers control the level of access other parts of a program have to this code. We have more to say about access modifiers in Chapter 5. The keyword class reminds you that everything in a Java program lives inside a class. Although we spend a lot more time on classes in the next chapter, for now think of a class as a container for the program logic that defines the behavior of an application. As mentioned in Chapter 1, classes are the building blocks with which all Java applications and applets are built. Everything in a Java program must be inside a class.

现在让我们一行行地来阅读这段代码。关键字public被称作访问修饰符;这些修饰符控制着这段代码对一个程序其他部分的访问权限。在第五章中我们将对访问修饰符做更多讨论。关键字class说明Java程序中的一切都是存在于类当中。尽管在下一章中我们将花费更多时间来讲述类,但现在我们不妨把类想像成一个承载描述应用行为的程序逻辑的容器。正如在第一章中提到的,类是一切Java应用程序和applet的构建模块。Java程序中的一切必须存在于类中。

Following the keyword class is the name of the class. The rules for class names in Java are quite generous. Names must begin with a letter, and after that, they can have any combination of letters and digits. The length is essentially unlimited. You cannot use a Java reserved word (such as public or class) for a class name. (See Appendix A for a list of reserved words.)

关键字class后面的就是类名。Java当中类的命名规则是相当宽松的。类名必须以字母开始,其后可以是任意字母和数字的组合。类名的长度基本上是无限的。你不可以使用Java保留字来作为类名。(保留字列表请参见附录A)

The standard naming convention (which we follow in the name FirstSample) is that class names are nouns that start with an uppercase letter. If a name consists of multiple words, use an initial uppercase letter in each of the words. (This use of uppercase letters in the middle of a word is sometimes called "camel case" or, self-referentially, "CamelCase.")

标准的命名规则是类名需是以一个大写字母开头的名词(如FirstSample这个名字中遵循的规则)。如果一个类名以多个单词组成,则每个单词使用首字母规则。(这种在一个词中间使用大写字母的用法有时又叫做“camel case”,或者形象的写作“CamelCase”)

You need to make the file name for the source code the same as the name of the public class, with the extension .java appended. Thus, you must store this code in a file called FirstSample.java. (Again, case is important—don't use firstsample.java.)

你需要使文件名和public类的名字相同,后面加上.java扩展名。因此,你需要将以上代码存储到一个文件名为FirstSample.java的文件中。(再次说明,大小写很重要,不要写成firstsimple.java)

If you have named the file correctly and not made any typos in the source code, then when you compile this source code, you end up with a file containing the bytecodes for this class. The Java compiler automatically names the bytecode file FirstSample.class and stores it in the same directory as the source file. Finally, launch the program by issuing the command:

如果你正确给文件命名并且没有在源代码中写入任何打字稿,那么当你编译这个源文件时,你将得到一个属于这个类的包含字节码的文件。Java编译器会自动把字节码文件命名为FirstSimple.class并将其存储在Java源文件的同一目录下。最后用如下命令来启动程序:

java FirstSample

(Remember to leave off the .class extension.) When the program executes, it simply displays the string We will not use 'Hello, World'! on the console.

(切记去掉.class扩展名)程序执行时,将在控制台简单输出一个字符串:We will not use ‘Hello,World’!

When you use

当你用

java ClassName

to run a compiled program, the Java virtual machine always starts execution with the code in the main method in the class you indicate. Thus, you must have a main method in the source file for your class for your code to execute. You can, of course, add your own methods to a class and call them from the main method. (We cover writing your own methods in the next chapter.)

来运行一个已经编译的程序时,Java虚拟机总是从你指定的类当中的main方法开始执行。当然你也可以在一个类中添加你自己的方法,并将之成为是main方法。(我们将在下一章中讨论编写自定义方法。)

NOTE

注意

 

According to the Java Language Specification, the main method must be declared public. (The Java Language Specification is the official document that describes the Java language. You can view or download it from http://java.sun.com/docs/books/jls.) However, several versions of the Java launcher were willing to execute Java programs even when the main method was not public. A programmer filed a bug report. To see it, visit the site http://bugs.sun.com/bugdatabase/index.jsp and enter the bug identification number 4252539. However, that bug was marked as "closed, will not be fixed." A Sun engineer added an explanation that the Java Virtual Machine Specification (at http://java.sun.com/docs/books/vmspec) does not mandate that main is public and that "fixing it will cause potential troubles." Fortunately, sanity finally prevailed. The Java launcher in JDK 1.4 and beyond enforces that the main method is public.

根据Java语言规范,main方法必须被声明为public。(Java语言规范是描述Java语言的官方文档。你可以从http://java.sun.com/docs/books/jls下载并查看)然而,有些版本的Java启动器在main方法不是public的时候也会执行Java程序。一个程序员提交了一个bug报告。请访问站点http://bugs.sun.com/bugdatabase/index.jsp 并输入bug标识号4252539来查看这个报告。然而这个bug被标记为“关闭,将不予修正”。一个Sun的工程师添加了一条解释,即Java虚拟机规范(http://java.sun.com/docs/books/vmspec)不要求main方法为public,并且“修正这个问题将导致潜在的麻烦.”幸运的是,心智健全最终获胜。JDK1.4及以上版本的Java启动器强制main方法为public。

There are a couple of interesting aspects about this story. On the one hand, it is frustrating to have quality assurance engineers, who are often overworked and not always experts in the fine points of Java, make questionable decisions about bug reports. On the other hand, it is remarkable that Sun puts the bug reports and their resolutions onto the Web, for anyone to scrutinize. The "bug parade" is a very useful resource for programmers. You can even "vote" for your favorite bug. Bugs with lots of votes have a high chance of being fixed in the next JDK release.

关于这个故事有两个有趣的方面。一方面,让那些经常过劳工作的且不专于Java的细琢的质量保证工程师对bug报告做出充满问题的决议是一件让人沮丧的事情。另一方面,值得注意的是Sun公司将bug报告和他们的决议放在网上,供大家细察。Bug检阅对程序员来说是一个很有用处的资源。你甚至可以为你最青睐的bug投票。那些票数最高的bug将会有很大的几率在下一版的JDK中被修复。

Notice the braces { } in the source code. In Java, as in C/C++, braces delineate the parts (usually called blocks) in your program. In Java, the code for any method must be started by an opening brace { and ended by a closing brace }.

注意程序中的括号{ }。和在C++中一样,在Java中,括号划分出程序中的各个部分(通常叫做程序块或代码块)。在Java中,任何方法的代码都必须以开括号{开始,以闭括号}结束。

Brace styles have inspired an inordinate amount of useless controversy. We use a style that lines up matching braces. Because whitespace is irrelevant to the Java compiler, you can use whatever brace style you like. We will have more to say about the use of braces when we talk about the various kinds of loops.

括号的使用风格引发了大量混乱的无用争论。我们使用一种风格将匹配括号排队。因为空格对Java编译器而言无关,你可以使用任何你喜欢的括号风格。我们将会在讲述各种循环的时候对括号的使用做更多的讨论。

For now, don't worry about the keywords static void—just think of them as part of what you need to get a Java program to compile. By the end of Chapter 4, you will understand this incantation completely. The point to remember for now is that every Java application must have a main method that is declared in the following way:

现在,暂时不关注关键字static void,就把他们看作是你要编译一个Java程序所必须的。在第四章最后,你将完全理解这个咒语。现在要记住的是每个Java应用程序必须有一个像下面这样定义的main方法:

public class ClassName
{
     public static void main(String[] args)
     {
           program statements
     }
}

C++ NOTE C++注释

 

As a C++ programmer, you know what a class is. Java classes are similar to C++ classes, but there are a few differences that can trap you. For example, in Java all functions are methods of some class. (The standard terminology refers to them as methods, not member functions.) Thus, in Java you must have a shell class for the main method. You may also be familiar with the idea of static member functions in C++. These are member functions defined inside a class that do not operate on objects. The main method in Java is always static. Finally, as in C/C++, the void keyword indicates that this method does not return a value. Unlike C/C++, the main method does not return an "exit code" to the operating system. If the main method exits normally, the Java program has the exit code 0, indicating successful completion. To terminate the program with a different exit code, use the System.exit method.

作为C++程序员,你知道类是什么。Java类和C++中的类相似。但是也有一些不同会使你陷入其中。例如,在Java中,所有的函数都是某个类的方法。(他们的标准术语叫做方法,而非成员函数。)因此,在Java中,你必须给main方法一个外壳类。你或许对C++中的静态成员函数也很熟悉。这是一些定义在类中但不对对象进行操作的成员函数。Java中的main方法总是静态的。最后,和在C++中一样,void关键字说明该方法不返回值。与C/C++不同的是,在C/C++中,main方法不会向操作系统返回一个“退出码”。而在Java中,如果main方法正常退出,Java程序将返回一个退出码0,以表示成功完成。要以不同的退出码终止程序,请使用System.exit()方法。

Next, turn your attention to this fragment.

下面,请注意以下这个片段:

{

     System.out.println("We will not use 'Hello, World!'");

}

Braces mark the beginning and end of the body of the method. This method has only one statement in it. As with most programming languages, you can think of Java statements as being the sentences of the language. In Java, every statement must end with a semicolon. In particular, carriage returns do not mark the end of a statement, so statements can span multiple lines if need be.

括号将方法体的开始和结束标记出来。方法中只有一个句子。和大多数编程语言一样,你可以认为Java语句就是一个语言的句子。在Java中,每个句子必须以分号结束。特别要指出的是,回车并不表示语句的结束,所以在需要的情况下语句可以跨越多行。

The body of the main method contains a statement that outputs a single line of text to the console.

main方法的方法体包含一条向控制台输出单行文本的语句。

Here, we are using the System.out object and calling its println method. Notice the periods used to invoke a method. Java uses the general syntax

这里,我们使用了System.out对象和它的println方法。注意用于调用方法的句点。Java使用一般语法:

object.method(parameters)

for its equivalent of function calls.

来进行函数调用。

In this case, we are calling the println method and passing it a string parameter. The method displays the string parameter on the console. It then terminates the output line so that each call to println displays its output on a new line. Notice that Java, like C/C++, uses double quotes to delimit strings. (You can find more information about strings later in this chapter.)

此时,我们调用println方法并传一个字符串参数给它。这个方法将该字符串参数显示在控制台中。之后就结束该输出行,因此,每个println调用都可以将其输出写入一个新行。注意到Java和C++一样,也使用双引号来划分字符串。(本章稍后将详细讨论字符串)

Methods in Java, like functions in any programming language, can use zero, one, or more parameters (some programmers call them arguments). Even if a method takes no parameters, you must still use empty parentheses. For example, a variant of the println method with no parameters just prints a blank line. You invoke it with the call

Java中的方法,像任何编程语言中的一样,可以使用零个一个或者更多参数(一些程序员习惯称之为变量)。即使有些方法没有参数,你也必须使用空圆括号。例如,不同的无参println方法只输出一个空行。你可以通过以下方法调用它:

System.out.println();

NOTE 注释

 

System.out also has a print method that doesn't add a new line character to the output. For example, System.out.print("Hello") prints "Hello" without a new line. The next output appears immediately after the "o".

System.out 也有一个不换行的print方法,例如System.out.print(“Hello”)就可以输出”Hello”而不换行。下个输出将紧跟在“o”的后面。


文章来源:http://x-spirit.spaces.live.com/Blog/cns!CC0B04AE126337C0!286.entry