
3.10 总结
本章讲述的知识点足以让你理解如何编写一个简单的Java程序。此外,本章还介绍了Java语言的概况,以及一些语言基础。然而到目前为止,你所接触的代码示例都是“这么做,再这么做,然后再那么做”。在接下来的两章里,我们会介绍Java编程的基础运算符,并展示如何控制程序流程。
[1]这种说法可能会引起争议。有些人会说,“再清楚不过了,这根本就是一个指针啊”,然而这种说法只是想当然地认为Java也有对应的底层实现。此外,Java中引用的语法更接近于C++的引用(而非指针)。在ThinkinginJava中,我发明了一个新词:“句柄”(handle),这是因为C++引用和Java引用之间存在一些重要的不同之处。作为一个从C++切换到Java的过来人,我认为C++程序员可能是Java语言的最大受众,因此我并不想给他们带来任何困扰。此后,在ThinkinginJava,2ndEdition中,我决定使用更为常用的词语“引用”。那些从C++切换到Java的程序员需要处理很多比“引用”这个术语更重要的事情,因此他们倒不如全面拥抱这个变化。不幸的是,仍然有一些人反对使用“引用”这个词。我曾经读过一本书,里面清清楚楚地写着“Java支持引用传递这个说法是完完全全的错误”,因为Java对象的标识符(根据该作者的说法)实际上是“对象引用”。他甚至还提到,其实一切都是通过值来传递的。因此,你并不是通过引用传递,而是“通过值来传递对象引用”。当然你也可以争辩说这种费解的定义其实并不精准,只不过我认为自己的主张降低了大家理解这些概念的门槛,同时也没有造成什么损害(好吧,有些高级软件工程师也许会宣称我在撒谎,但我的回答是,我只是提供了一种恰当的抽象方式而已)。
[2]大多数微处理器芯片有额外的缓存内存,只不过缓存内存使用的是传统的内存管理方式,而非寄存器。
[3]一个例子是字符串资源池。所有的字符串和字符串常量都会被自动放置到这个特殊的存储空间中。
[4]你马上就会学习static方法,这是一种通过类直接调用的方法,所以不需要对象。
[5]前面提及的几个“特殊”数据类型是例外,包括boolean、char、byte、short、int、long、float,以及double。一般情况下,传递对象实际上就是传递对象的引用。
[6]调用static方法并不依赖于是否提前创建对象。正因为如此,我们也不能在没有具体对象的情况下,使用static方法直接调用非static成员或方法(因为非static成员和方法必须基于特定的对象才能运行)。
[7]有些情况下,这也有利于编译器进行代码优化。
[8]地址是https://github.com/BruceEckel/OnJava8-Examples。
[9]需要注意的是,JDK默认没有包含文档,所以你需要单独下载它。
[10]你可能需要设置CLASSPATH参数,以便能够通过命令行编译和运行本书的所有程序。
[11](你可以通过互联网查找,此外还可以搜索关键字“Google Java Style”。)为了让本书的代码呈现更紧凑一些,我并没有严格遵守所有的规范,不过正如你所见,我使用的编程风格总是会尽量符合Java的标准规范。