2.1 用引用操作对象
1. C/C++用指针操作对象;
2. Java把一切都视为对象;
3. 引用不是对象。
2.2 必须由你创建所有对象
1. new关键字的意思是“给我一个对象”;
String s = new String("hello")。
2.2.1 存储到什么地方
1. 寄存器:Java寄存器不能直接控制;
2. 堆栈;
3. 堆:new一个对象,该对象自动在堆里面进行存储分配;
4. 常量存储:只读,如ROM;
5. 非RAM存储。
2.2.2 特例:基本类型
1. 微小变量直接存储“值”,并置于堆栈中;
2. 微小变量不使用new, 因为new创建一个对象——特别是小的,简单的变量,往往不是很高效;
3. Java基本类型:
boolean
char
byte
short
int
long
float
double
void
2.2.3 Java的数组
1. C/C++数组越界,造成不可预料后果(深有体会);
2. Java目标是安全性;
3. Java确保数组会被初始化,而且不能在它的范围之外被访问;
4. 创建一个数组对象时,实际上就是创建一个引用数组;
5. 每个引用都会自动被初始化为一个特定值,该值拥有自己的关键字null;
6. 一旦Java看到null,就知道这个这个引用还没有指向某个对象;
7. 在使用任何引用前,必须为其指定一个对象;
8. 如果试图使用一个还是null的引用,在运行时将会报错,因此,常犯的数组错误在Java中就可以避免。
2.3 永远不要销毁对象
2.3.1 作用域
1. 作用域由花括号的位置决定。
2.3.2 对象的作用域
1. Java对象不具备和基本类型一样的生命周期;
2. 当用new创建一个Java对象时,它可以存活于作用域之外:
{
String s = new String("a string");
} //end of scope
a. 引用s在作用域终点就丢失;
b. 然而s指向的String对象仍然占据内存空间;
3. Java有垃圾回收器,用来监视new创建的所有对象,并辨别那些不会再被使用的对象。随后,释放这些对象的内存空间,以便供其他新的对象使用。