目录:
effective java 第2章:创建和销毁对象。第7条 : 避免使用终结方法。最后的“终结方法守卫者 (finalizer guardian)”的例子,以加深理解。
1 /** 2 * chapter 2——终结守卫者 3 * @ClassName: Parent 4 * TODO 5 * @author xingle 6 * @date 2015-3-11 下午3:49:47 7 */ 8 public class Parent { 9 10 public static void main(String[] args){ 11 doSth(); 12 System.gc(); 13 try { 14 Thread.sleep(2000); 15 } catch (InterruptedException e) { 16 e.printStackTrace(); 17 } 18 } 19 20 /** 21 * TODO 22 * @author xingle 23 * @data 2015-3-11 下午3:51:02 24 */ 25 private static void doSth() { 26 Child c = new Child(); 27 System.out.println(c); 28 } 29 30 private final Object guardian = new Object(){ 31 32 @Override 33 protected void finalize(){ 34 System.out.println("执行父类中匿名内部类--终结方法守卫者,重写的finalize()"); 35 // 在这里调用Parent重写的finalize即可在清理子类时调用父类自己的清理方法 36 parentlFinalize(); 37 } 38 }; 39 40 /** 41 * TODO 42 * @author xingle 43 * @data 2015-3-11 下午3:55:10 44 */ 45 protected void parentlFinalize() { 46 System.out.println("执行父类自身的终结方法"); 47 } 48 } 49 50 class Child extends Parent { 51 52 @Override 53 protected void finalize() { 54 System.out.println("执行子类finalize方法,注意,这里子类并没有调用super.finalize()"); 55 // 由于子类(忘记或者其他原因)没有调用super.finalize() 56 // 使用终结方法守卫者可以保证子类执行finalize()时(没有调用super.finalize()),父类的清理方法仍旧调用 57 } 58 }
执行结果:
时间: 2024-09-28 07:42:35