第5章 初始化与清理
1. 垃圾回收机制
a. 引用计数法,每个对象都含有一个引用计数器,当有应用连接到对象时,引用计数+1;当引用离开作用域被置为 null 时,引用计数-1。缺点是,当对象之间存在循环引用时,可能会出现“对象应该被回收,但引用计数不为0”的情况。
b. 标记-清扫法,从堆栈和静态存储区出发,遍历所有的引用并标记,进而找出所有存活的对象。标记完成后,再开始清理过程,将没有标记的对象释放。
2. 类内成员变量编译器会自动赋值,而对于方法的局部变量,编译器并不会自动赋值。
3. 数组初始化
a. int[] a = {1, 2, 3, 4, 5}
b. 动态分配 a1 = new int[5]
另外,若执行 a1=a,是引用拷贝
4. 可变参数列表
1 static void f(int required, String... trailing) { 2 System.out.print("required: " + required + " "); 3 for (String string : trailing) { 4 System.out.print(string + " "); 5 } 6 System.out.println(); 7 }
可以将可变参数看成一个数组。
5. 枚举类型
1 public class SimpleEnumUse { 2 public enum Spiciness { // 枚举类型 3 NOT, MILD, MEDIUM, HOT, FLAMING 4 } 5 6 public static void main(String[] args) { 7 // values 返回常量数组 8 for (Spiciness s : Spiciness.values()) { 9 // 枚举类型重写了toString方法 10 // ordinal方法返回序号 11 System.out.println(s + ", " + s.ordinal()); 12 } 13 } 14 }