2.1 用引用操纵对象

“如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。”

尽管Java是基于C的,但是相比之下,Java是一种“ 纯粹 ”的面向对象程序设计语言。C和Java都是混合/杂合型语言。但是,Java的设计者认为这种杂合性并不像在C中那么重要。杂合型语言允许多种编程风格;C之所以成为一种杂合型语言主要是因为它支持与C语言的向后兼容。因为C是C的一个超集,所以势必包括C语言不具备的特性,这些特性使C某些方面显得过于复杂。Java语言假设我们只进行面向对象的程序设计。也就是说,在开始用Java进行设计之前,必须将思想转换到面向对象的世界中来。这个入门基本功,可以使你具备使用这样一种编程语言编程的能力,这种语言学些起来更简单,也比许多其他OOP语言更易用。在本章,我们将看到Java程序的基本组成部分,并体会到在Java中(几乎)一切都是对象。

每种编程语言都有自己的操纵内存中元素的方式。有时候,程序员必须注意将要处理的数据是什么类型。你是直接操纵元素,还是用某种基于特殊语法的间接表示(例如C和C++里的指针)来操纵对象

所有这一切在Java里都得到了简化。一切都被视为对象,因此可采用单一固定的语法。尽管一切都看作对象,但操纵的标识符实际上是对象的一个“ 引用 ”(reference)。可以将这一情形想想成为遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器,就能保持与电视机的连接。当有人想改变频道或者减少音量时,实际操控的是遥控器(引用),再由遥控器来调控电视机(对象)。如果想在房间里面四处走走,同时仍能调控电视机,那么只需要携带遥控器(引用)而不是电视机(对象)。

此外,即使没有电视机,遥控器亦可独立存在。也就是说,你拥有一个引用,并不一定需要有一个对象与它关联。因此,如果想操纵一个词或句子,则可以创建一个String引用:

String s;

但这里所创建的只是引用,并不是对象。 如果此时想s发送一个消息,就会返回一个运行时错误。这是因为此时s实际上没有与任何事物相关联(即,没有电视机)。因此,一种安全的做法是:创建一个引用的同时便进行初始化。

String s = "asdf";

但这里用到了Java语言的一个特性:字符串可以用带引号的文本初始化。通常,必须对对象采用一种更通用的初始化方法。