第七条:避免使用终结方法

1,  终结方法(finalizer)会让程序不稳定,性能降低,出现可移植性的问题。

2,  Finalizer在c++中师析构器(destructors)的一部分,用作回收资源。在java中垃圾回收机制可以帮助完成。也可以通过try-finally在手动执行类似工作。

3,  在JVM中终结方法是被延迟执行的,也就是说,线程优先级低于其他类型的线程,不是第一时间你关闭的操作就被执行。所以切记不得用以在要求时间性上很严格的操作中。

4,  System.gc和System.runFinalization这两个方法也不能保证终结方法一定执行。

5,  提供一个显示的终止方法,并要求每个类的客户端在确保每个实例不在有用的时候调用这个方法,并且实例必须记录自己是否已经被终结。如果方法终结后还有对象试图去访问,则必须检测这个域并抛出IllegalStateException异常。

6,  显示终止方法的典型例子是:InputStream,OutputStream,java.sql.Connection.Java.awt中的Graphics.dispose,Window.dispose,Image.flush.

7,  终结方法的好处:a,充当安全网。B,终止非关键的本地资源

8,  如果使用了终结方法,记得调用super.finalize。如果用终结方法做安全网,那么请记住终结方法的非法用法,如果终结方法于非final类关联起来了,请使用终结方法守卫者(finalizer guardian)确保子类调用了super.finalize

9,

转载于:https://www.cnblogs.com/jisheng/archive/2012/03/04/2379281.html

Effective Java第七条:避免使用终结方法相关推荐

  1. Android 编码规范:(七)避免使用终结方法

    任何事情都存在其一定的双面性或者多面性,对于C++的开发者,内存资源是需要手工分配和释放的,而对于Java和C#这种资源托管的开发语言,更多的工作可以交给虚拟机的垃圾回收器来完成,由此C++程序得到了 ...

  2. Effective.Java第23-33条(泛型相关)

    23.  类结构层次优于标签类 有时你会碰到一个类,它的实例有一个或多个风格,并且包含一个tag属性表示实例的风格.例如,如下面的类表示一个圆或者矩形: public class Figure {/* ...

  3. effective java 第2条:遇到多个构造器参数时要考虑用构造器

    如果构建一个对象需要很多参数时,那么有三种方式可以实现. 第一种就是多重构造器 public class Person {private final int id; //requiredprivate ...

  4. effective java第45条:将局部变量的作用域最小化

    我以前写for循环的例子: public class Client {public static void main(String[] args) {Client client = new Clien ...

  5. Effective Java 对于所用对象都通用的方法 8.覆盖equals时请遵守通用约定.txt

    对于eclipse覆盖equals方法就是Alt+Shift+S,而AS就是Alt+Insert.覆盖很简单,可是却容易导致错误,而且后果很严重.最容易避免的方法就是不覆盖,这样类就只与他自身相等. ...

  6. 小鸡爪读Effective Java记录1:用静态工厂方法代替构造器

    //小鸡爪 == 菜鸡 遇到多个构造器参数时要考虑使用构建器 Preface 静态工厂和构造器有个共同的局限性:它们都不能很好地扩展到大量的可选参数.比如用一个类表示包装食品外面显示的营养成分标签.这 ...

  7. 《Effective Java》阅读笔记7 避免使用终结方法

    1.序 本条的意思是,让你尽量不要在你的类中覆盖finalize方法,然后在在里面写一些释放你的类中资源的语句. 1.1为什么要避免覆盖并使用finalize方法? (1)finalize方法不能保证 ...

  8. Effective java 总结1 - 创建和销毁对象

    Effective java 总结 - 创建和销毁对象 第1条 用静态工厂方法代替构造器 优势 静态工厂方法有名称 不必每次调用的时候创建一个新的对象 可以返回原返回类型的任何子类型对象 返回对象的类 ...

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

    第一章      前言 略... 第二章      创建和销毁对象 1.            考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Bool ...

最新文章

  1. java用关键字 指明继承关系_【填空题】java中用关键字 指明继承关系、用关键字 指明接口实现。...
  2. mac玩rust用什么画质_玩七日杀Steam游戏用什么加速器?电狐加速器
  3. leetcode算法题--最大加号标志★
  4. POJ2044 深搜+剪枝(云彩下雨)
  5. uvalive 4795 Paperweight
  6. 约瑟夫问题的学习(基于循环链表)以及基于循环数组
  7. php广告任务网源码_THINKPHP仿我爱广告任务网|任务网站源码下载基于PHP+MYSQL的在线广告打码任务网站源码...
  8. C++工作笔记-根据父类指针获取子类类型(或不同的对象)
  9. UTF-8与GB2312之间的互换
  10. James McCrae
  11. Java语言中:switch语句经典习题
  12. Codeforces 1062E 题解
  13. 饮冰三年-人工智能-Python-27 Django Form组件
  14. 韩顺平 零基础30天学会Java 学习笔记
  15. Enviropro EP100D-08测定仪
  16. FFPlay命令入门教程
  17. 【Scratch-声音模块】音量控制
  18. pure-ftpd服务器搭建
  19. JS——数组中去除空空字符串
  20. 最常用的5个网页自动化点击工具

热门文章

  1. ibm服务器芯片架构,IBM x366 服务器技术详解
  2. GCC-__attribute__()(一)属性机制
  3. win7系统如何访问xp系统的服务器,WIN7系统怎么让XP系统访问呢
  4. pannel添加的子窗体很大_超简单的地瓜粉焖子做法全解,零失败
  5. hadoop源码分析_Spark2.x精通:Job触发流程源码深度剖析(一)
  6. 外星人跑深度学习_上海港汇外星人店,51M2020开光追和DLSS2.0畅玩《赛博朋克2077》...
  7. seata xid是什么_阿里开源的分布式事务框架 Seata
  8. 自学python条件_自学Python2.8-条件(if、if...else)
  9. 0x80070003系统找不到指定路径_Win7系统中gpedit.msc找不到应该如何解决?
  10. 多层陶瓷电容器用处_【科普贴】多层陶瓷电容器的制造工序,你知道吗?