thinking in java
操纵对象,操纵的标识符实际是指向一个对象的“句柄”
(Handle): 想象成用遥控板(句柄)操纵电视机(对象)
安全的做法是:创建一个句柄时,记住无论如何都进行初始化:String s = "asdf";
寄存器:最快的保存区域(处理器内部),数量十分有限,由编译器分配,我们对此没有直接的控制权
对象句柄保存在堆栈里,堆中保存了Java 对象(灵活,代价:在堆里分配存储空间时会花掉更长的时间!)
静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在 RAM(random access memory)里)。程序运行期间,静
态存储的数据将随时等候调用。可用static 关键字指出一个对象的特定元素是静态的。但 Java 对象本身永
远都不会置入静态存储空间。
常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数
需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
RAM(random access memory)即随机存储内存(运行内存,决定可以同时运行多少应用程序),这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。
ROM(Read-Only Memory)即只读内存(存放视频、音乐、软件等文件),是一种只能读出事先所存数据的固态半导体存储器。
对象的创建过程。请考虑一个名为 Dog的类:
(1) 类型为 Dog的一个对象首次创建时,或者Dog 类的static方法/static 字段首次访问时,Java 解释器
必须找到Dog.class(在事先设好的类路径里搜索)。
(2) 找到Dog.class 后(它会创建一个 Class对象,这将在后面学到),它的所有 static初始化模块都会运
行。因此,static初始化仅发生一次——在 Class 对象首次载入的时候。
(3) 创建一个new Dog()时,Dog 对象的构建进程首先会在内存堆(Heap)里为一个 Dog对象分配足够多的存
储空间。
(4) 这种存储空间会清为零,将Dog中的所有基本类型设为它们的默认值(零用于数字,以及 boolean和
char 的等价设定)。
(5) 进行字段定义时发生的所有初始化都会执行。
(6) 执行构建器。正如第6 章将要讲到的那样,这实际可能要求进行相当多的操作,特别是在涉及继承的时
候。
int[] a1 = { 1, 2, 3, 4, 5 };
for(int i = 0; i < a2.length; i++)
a1[i]++;//值加1
-----------------------------------------------------------------------------