Java基础——Java对象杂谈

来源:互联网 发布:galgame破解软件 编辑:程序博客网 时间:2024/06/05 19:39

每种编程语言都有自己的的数据处理方式。在Java里任何东西都可以看作对象,尽管一切都是对象,但是我们真正操纵的是一个对象的Handle,可以叫做一个“引用”,或者引用C++里面的“指针”的叫法,因为他们确实有相似的地方。想要理解对象和对象的引用并不难,这里引用《Thking in Java》里面的一个例子:像遥控器(引用)操纵电视机(对象),只要握住这个遥控器,就相当于掌握了与电视机连接的通道,当你需要“换频道”或者“调音量”(调用对象的方法),我们实际操纵的是遥控器,再由遥控器(引用)将命令传递给电视机(对象),如果想在房间里四处走动,并保持对电视机的控制,那么手上只需拿着遥控器,而不是电视机。此外,即使没有电视机,遥控器也可以独立存在,这时表示,这个引用并没有与对象建立任何连接(这个时候往往是不安全的)。

既然对象和对象的引用的存储也是有区别的,有六个地方都可以保存数据:

1:寄存器。这是最快的保存区域,但是寄存器在处理器内部的数量是十分有限的,我们对这一区域是没有直接的控制权的。

2:栈。驻留于常规 RAM (随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。

3:堆。一种常规用途的内存池(也在 RAM 区域),其中保存了Java 对象。和堆栈不同,“内存堆”或“堆”(Heap )最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new 命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间! 

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

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

6:非RAM 存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复 
成普通的、基于RAM 的对象。


但是,也有特殊的情况,在Java中,基本数据类型,并不是用new关键字来创建对象的。因为用new关键字创建的对象存储在堆中,但是基本数据类型在程序设计中我们要经常使用到他们,为了提高效率,所以Java中创建他们时采用了与C/C++一样的处理方式,不用new关键字创建,而是创建一个并非对象引用的自动变量。这个变量容纳了具体的值,并置于栈中,能够更高效的存取。

Java 决定了每种主要类型的大小。就象在大多数语言里那样,这些大小并不随着机器结构的变化而变化。这种大小的不可更改正是 Java 程序具有很强移植能力的原因之一。 

主类型        大小封装类型 char2字节Characterboolean1位Booleanbyte1字节Byteshort2字节Shortint4字节Integerlong8字节Longfloat4字节Floatdouble8字节DoubleVoid
Void

原创粉丝点击