Java编程思想第二章
用引用操作对象
一般的
这是我刚学Java时最搞不清的,什么是引用?什么是对象?书中用遥控器和电视机来举例子,原文如下:
尽管将一切都看作对象,但操纵的标识符实际上是对象的一个“引用(reference)”。可以将这一情形想象成用遥控器(引用)来操纵电视机(对象)。只要握住这个遥控器,就能保持与电视机的连接。当有人想改变频道或减小音量时,实际操控的是遥控器(引用),再由遥控器来调控电视机(对象)。如果想在房间里四处走走,同时能遥控电视机,那么只需携带遥控器(引用)而不是电视机(对象)。
遥控器可以随便拿,但想要操纵电视机,便需要让遥控器和电视机连在一块,也就是要new一个电视机(对象),让其和遥控器(引用)绑在一起。如果创建的引用没有给其new对象,便无法对这个引用发送消息。所以最安全的做法是创建引用的同时对其进行初始化。
特例:
基本类型
对于基本类型我们并不会用new来创建其对象,其实此时我们创建的是一个并非是引用的“自动变量”。
基本类型具有的包装器类,使得可以在堆中创建一个非基本对象,用来表示对应的基本类型。例如:
char c='x';
Character ch=new Character(c);
注意:Java中两个用于高精度计算的类BigInteger和BigDecimal,他们大体上属于“包装器类”范畴,但二者都没有对应的基本类型。
static关键字
通常来说,当创建类时,就是在描述那个类的对象的外观与行为。除非用new来创建那个类的对象,否则,实际上并未获得任何对象。执行new来创建对象时,数据空间才被分配,其方法才供外界调用。
但是,当声明一个事物是static时,就意味着这个域或方法不会与包含它的那个类的任何对象实例关联在一起。所以,即使从未创建某个类的任何对象,也可以调用其static方法或访问其static域。而非static域域和方法则必须知道它们一起运作的特定对象。
作用于字段:static int i=66;
作用于方法:
class MyClass{
static void test(){
...
}
}
当static作用于某个字段时:一个static字段对每个类来说都只有一份存储空间,而非static字段则是每个对象有一个存储空间。
当static作用于某个方法:static方法的一个重要用法就是在不创建任何对象的前提下就可以调用它。所以,这一点定义对main()方法很重要,因为main()方法是应用的入口,在没有任何对象的情况下就得到了执行。