Java编程思想(二)一切都是对象

2.1用句柄操纵对象

尽管一切都看作是对象,但是操纵的标识符实际上是指向一个对象的“句柄”(handdle);

拥有一个句柄并不表示必须有一个对象同他连接;

String  s;   这里创建的只是句柄,并不是对象。若此时向s发送一则消息,就会获得一个错误。

由于s并未与任何东西相连接。   

因此创建一个句柄时,无论如何都进行初始化。

2.2所有对象都必须创建

创建句柄时,我们希望它同一个新的对象进行连接。使用new关键字达到这个目的。

2.2.1保存到什么地方

(1)寄存器。最快的保存区域,因为它位于处理器内部,因为数量有限,必须有编译器分配,因此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹

(2)堆栈。在RAM(随机访问存储器)中,可以通过它的堆栈指针获得处理的直接支持。堆栈指针下移则创建新的内容,若上移则释放哪些内存。对象句柄一般方法堆栈里,但是Java对象并不会放在其中

(3)堆。RAM 堆最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长时间,因此,用堆保存数据有很大的灵活性。

(4)静态存储。RAM   程序运行时,静态存储的数据将随时等候调用。可以static关键字指出一个对象的特定元素是静态的。但Java本身永远不会置入静态存储空间

(5)常数存储。ROM

(6)非RAM,若数据完全独立与一个程序之外,则程序不运行是仍可以村子啊,并在程序 的控制范围之外。  两个例子:流式对象和固定对象。

流式对象:对象会变成字节流,通常发给另一台机器,而对于固定对象,对象保存在磁盘中。

2.3.1

C能将一个变量隐藏在一个更大的作用域力。但是这种做法在Java里是不允许的

2.3.2对象的作用域

Java对象和主类型的存在时间不一样。用new关键字创建一个Java对象时,它会超出作用域的范围之外。所以假若使用下面这段代码

{

String  s=new String (“a    string”);

}//作用域的终点

句柄s会在作用域的终点处消失,然而s指向string对象依然占据着内存空间,所有引入垃圾收集器。

2.4新建数据类型:类

2.4.1字段和方法

一个类包括:数据成员(字段)和成员函数(方法)。

其中数据成员是一种对象(通过它的句柄与其通信),可以为任何类型。

即主类型(并不是句柄)之一,如果是指向对象的一个句柄,则必须初始化那个句柄,用一个名为构建器的特殊函数将其与一个实际对象链接起来(new);

若是一种主类型,则可以在类定义位置直接初始化

学会引用对象成员:对象句柄.成员

一个对象可能包含了另一个对象,而另一个对象里则包含了我们想要修改的数据。此时只需要爆出“连接句点”即可:myplane.leftTank.capacity=100;

1.主成员的默认值

Boolean false      char  ‘\u000’(null)

对于类中的成员函数中的变量 如果没有赋初值,那么Java会提示错误

猜你喜欢

转载自www.cnblogs.com/Damocless/p/11818213.html