java编程思想-第五章-初始化与清理

第五章-初始化与清理

5.5java的垃圾回收工作

1)停止-复制:先找到“活”的对象,从堆栈和静态存储区开会i,遍历所有的引用,发现被引用的对象后在堆中标记。之后暂停程序的运行,将所有被标记的堆中对象复制到另一个堆中,当对象被复制到新堆时,他们是一个接一个的,所以新堆紧凑排列,然后就继续分配新的空间了。
2)标记-清扫:从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象,并将其标记。只有当全部标记工作完成时,清理动作才会开始。此过程只将没有标记的对象释放并不进行其他操作,若要重新整理空间,还是需要进行停止-复制。

5.6成员初始化

1)对于方法的局部变量,如果没有初始化就直接使用,会报错。
2)对于类中的数据成员,如果没有初始化,会提供一个初值。

5.6.1指定初始化

1)可以直接赋值。
2)可以通过调用某个方法来提供初值。
3)用来提供初值的方法可以有参数,但参数必须已被初始化。

5.7初始化顺序

1)若调用类的静态函数:
① 静态成员变量与静态代码块初始化(静态成员变量与静态代码块初始化按出现的先后顺序)。
② 调用静态函数。

2)若使用NEW分配堆空间:
① 静态成员变量与静态代码块初始化。
② 非静态成员变量与非静态代码块初始化。
③ 构造器调用(构造器也为一种静态方法)。

注意:static不能用于局部变量。

5.8数组初始化

两种方式:
1)int[] a = {1,2,3,4,5};
2)int[] a = new int[n];

5.8.1可变参数列表

static void method(Oject… args) {
for(Object obj : args) {

}
}

需要注意的是当重载方法中出现可变参数列表后会出现一些问题。

5.9枚举类型

public enum ENUM {
A,
B,
C,
D
}
枚举类型为一种特殊的类,进行了一定的封装。也拥有自己的方法,比如:
静态方法.values()返回一个包含所有的常量值的集合。
ordinal()用来表示谋个常量值在集合中的生命顺序。

你可能感兴趣的:(Java)