Think in Java读书笔记--一切都是对象

用句柄操纵对象

在Java里,任何东西都被看成了对象,但是用户实际操作的是指向对象的句柄。创建一个句柄时,无论如何都要初始化,否则在使用的时候会出现错误。

Java数据保存的地方

(1)寄存器:寄存器是最快的保存区域,因为它位于处理器的内部。但是寄存器的数量有限,故它只能由编译器根据需要进行分配,用户是无法直接跟寄存器打交道的。

(2)堆栈:驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针向下移动,会创建新的内存;若向上移动,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。Java对象的句柄一般保存在堆栈里,但是Java对象一般不保存在里面。

(3)堆:一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆(Heap)”的好处是编译器并不需要知道从堆里分配多少存储空间,也不必要知道数据要在堆中存在多长的时间。因此,用堆保存数据具有很大的灵活性。但是,它的缺点主要是在堆中分配存储空间耗费的时间更长。

(4)静态存储:这里的“静态”(static)指的是位于固定的位置(虽然也在RAM里),程序运行过程中,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远不会置于静态存储空间。

(5)常数存储:常数值通常直接置于程序代码的内部,这样做是安全的,因为它们永远不会改变。有的常数需要严格保护,因而可以置于只读存储器(ROM)中。

(6)非RAM存储:当数据置于程序之外时,可以考虑将数据直接存储在磁盘中。

Java中的主类型

主类型其实是一些普通数据类型,在编程的过程中经常会用到。它们不直接用new关键字来创建,与C和C++一样,Java也是给它们创建了一个非句柄的“自动”对象,这个变量容纳了具体的值,并放在堆栈里,能够更高效地存取。

clip_image001

高精度数字:Java1.1增加了两个类用于进行高精度计算,这两个类是BigInteger和BigDecimal。尽管它们大致可以划分为“封装器”类型,但是却没有对应的主类型。这两个类都有自己特殊的方法来对应我们针对主类型的操作,但是必须用方法调用,而不是直接使用运算符。

类成员

如果某个主类型属于一个类成员,那么即使不明确进行初始化,也可以保证它们获得一个默认值。这里需要注意的是,只有类成员会被初始化为默认值,其它的局部变量并不会被初始化为默认值。如:

int x;

会使x得到一些随机值(同C和C++),不会自动初始化为零。

static关键字

Static关键字一般用在两种情形:(1)只想用一个存储区域来保存一个特定的数据,不管要创建多少个对象甚至不创建对象;(2)需要一个特殊的方法,但是这个方法不跟类的任何成员相关联,也就是说,即使没有创建对象,也需要一个能调用的方法。static关键字定义的是类方法或者类成员。调用类方法或类成员有两种方式:一种是通过对象调用,另一种是通过类名调用。

posted @ 2012-06-26 14:49  Core Hua  阅读(206)  评论(0)    收藏  举报