活力 JAVA 旅行二

来源:互联网 发布:罗马历史知乎 编辑:程序博客网 时间:2024/04/29 15:01

数据存储:
class field 变量 不进行初始化也得到一个默认的值.
非class field 变量将不会有这个保障.

JAVA数据存储
(1) 寄存器(registers)。这是最快的存储区域,因为它位于和其他所有保存方式不同的位置:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。你非但不能直接控制寄存器,甚至连它存在的证据也找不到.
(2) 栈(stack)。位于“常规内存区(general random-access memory area)“里,处理器可以通过stack pointer堆它进行直接访问.stack pointer向下移动就创建了新的存储空间,向上以为着释放内存空间.这是仅次于寄存器最快,最有效率的分配内存的方法.由于JAVA编译器必须生成能控制栈指针上移或下移的代码,所以程序编译的时候,那些被存储在栈中的数据的大小和生命周期必须是已知的.这使得程序的灵活性受到了限制,所以尽管JAVA把某些数据如对象的reference存放在栈里,但对象本身并没有放在栈里,而是放在heap里.
(3) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(4) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。
(5) 常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
(6) 非RAM存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复成普通的、基于RAM的对象。


static关键词:

声明数据或者方法是STATIC的时候就是说没有被连到类的任何一个实例之上,因此即便你从没创建过那个类的对象,你也可以调用其STATIC方法或者访问其STATIC数据.它有一段保存这些数据的内存.不能在static方法里调用非static方法.不通过对象直接调用static方法才是static方法的本意.类的static方法只能访问其他static 方法和static数据成员.static数据只初始化一次。