目录:

effective java —— 终结方法守卫者

effective java 第2章:创建和销毁对象。第7条 : 避免使用终结方法。最后的“终结方法守卫者 (finalizer guardian)”的例子,以加深理解。

 /**
* chapter 2——终结守卫者
* @ClassName: Parent
* TODO
* @author xingle
* @date 2015-3-11 下午3:49:47
*/
public class Parent { public static void main(String[] args){
doSth();
System.gc();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
} /**
* TODO
* @author xingle
* @data 2015-3-11 下午3:51:02
*/
private static void doSth() {
Child c = new Child();
System.out.println(c);
} private final Object guardian = new Object(){ @Override
protected void finalize(){
System.out.println("执行父类中匿名内部类--终结方法守卫者,重写的finalize()");
// 在这里调用Parent重写的finalize即可在清理子类时调用父类自己的清理方法
parentlFinalize();
}
}; /**
* TODO
* @author xingle
* @data 2015-3-11 下午3:55:10
*/
protected void parentlFinalize() {
System.out.println("执行父类自身的终结方法");
}
} class Child extends Parent { @Override
protected void finalize() {
System.out.println("执行子类finalize方法,注意,这里子类并没有调用super.finalize()");
// 由于子类(忘记或者其他原因)没有调用super.finalize()
// 使用终结方法守卫者可以保证子类执行finalize()时(没有调用super.finalize()),父类的清理方法仍旧调用
}
}

执行结果:

effective java —— 终结方法守卫者的更多相关文章

  1. Java终结方法的使用(终结守卫者)

    终结方法finalize()通常是不可预测的,也是很危险的,一般情况下是不必要的. Java语言规范并不保证finalize()会被及时执行,即不确定终结方法执行时间,只规定在对象被垃圾回收之前执行 ...

  2. Java 终结方法 避免使用终结方法

    在Java中,当一个对象变得不可到达时,垃圾回收器会回收与该对象相关联的存储空间.用try-finally块来回收其他的非内存资源. 终结方法的缺点在于不能保证会被及时地执行.从一个对象变得不可到达开 ...

  3. Effective java -- 6 方法

    第三十八条:检查参数的有效性 第三十九条:必要时进行保护性拷贝 public class Period { private final Date start; private final Date e ...

  4. Effective Java 学习笔记之第七条——避免使用终结(finalizer)方法

    避免使用终结方法(finalizer) 终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的. 不要把finalizer当成C++中析构函数的对应物.java中,当对象不 ...

  5. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  6. 《Effective Java》读书笔记(一)之创建和销毁对象

    最近在研读<Effective Java>一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记. 郑重声明: 由于是<Effective Java>一书的 ...

  7. Effective Java 读书笔记之一 创建和销毁对象

    一.考虑用静态工厂方法代替构造器 这里的静态工厂方法是指类中使用public static 修饰的方法,和设计模式的工厂方法模式没有任何关系.相对于使用共有的构造器来创建对象,静态工厂方法有几大优势: ...

  8. [Effective Java]第二章 创建和销毁对象

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. 《Effective Java》读书笔记

    一.引言 1.几条基本规则:(清晰性和简洁性最为重要) 模块的用户永远也不应该被模块的行为所迷惑(那样就不清晰了),模块要尽可能小,但又不能太小 代码应该被重用,而不是被拷贝 模块之间的依赖性应该尽可 ...

随机推荐

  1. Selenium-xpath详解

    1.XPATH是什么 XPATH是一门在XML文档中查找信息的语言,XPATH可用来在XML文档中对元素和属性进行遍历,主流的浏览器都支持XPATH,因为HTML页面在DOM中表示为XHTML文档.X ...

  2. 剑指offer——树的子结构 (JAVA代码)

    版权声明:本文为博主原创文章,未经博主允许不得转载. 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构). 解题思路: 首先看牛客网给出的测试用例: ...

  3. Codeforces 747C:Servers(模拟)

    http://codeforces.com/problemset/problem/747/C 题意:有n台机器,q个操作.每次操作从ti时间开始,需要ki台机器,花费di的时间.每次选择机器从小到大开 ...

  4. Linux tcpdump命令详解

    tcpdump官网:http://www.tcpdump.org/ 转载于:http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.ht ...

  5. CSS3自定义滚动条样式 -webkit-scrollbar

    今天写项目碰上需要改滚动条效果,我的第一反应是,需要用js写滚动条,顿时头大,上网搜了一下,原来css3就可以修改滚动条样式了,非常好啊,下面分享原文地址:http://www.xuanfengge. ...

  6. 使用cocoaPods和遇到的问题以及解决办法

    上一篇说到cocoaPods的安装,本篇就来说说cocoaPods的使用和遇到一些问题的解决办法( ⊙ o ⊙ ) 一.cocoaPods的创建使用 1.cd进入所在的项目目录 2.创建Podfile ...

  7. 关于mysql 查询内容不区分大小问题

    问题描述: select * from users where user_name ='user_01' 跟 select * from users where user_name ='uSer_01 ...

  8. Flags-Ural1225简单递推

    Time limit: 1.0 second Memory limit: 64 MB On the Day of the Flag of Russia a shop-owner decided to ...

  9. linux内存占用查看命令

    ps -e -o 'pid,comm,args,pcpu,rsz,vsz,stime,user,uid' | grep tomcat | sort -nrk5 其中rsz为实际内存,上例实现按内存排序 ...

  10. 第二,C语言示例

    #include<stdio.h> int main (void)                 /*WTF*/ { int num; num=1; printf(" I am ...