避免使用终结方法 1.使用终结方法会导致行为不稳定,性能降低,以及可移植性的问题.(终结线程的优先级过低) 终结方法不能保证被及时的执行(从一个对象变得不可到达开始,到中介方法被执行,所花费的时间是任意长的) 2.怎么不编写终结方法:提供一个显式的终止方法,并要求该类的客户端在每个实例不再有用的时候调用这个方法(该实例必须记录下自己是否已经被终止) 终止方法与try - finally一起使用 在finally子句中可以保证即使在使用对象的时候有异常抛出,该终止方法也会被执行 终止方法:File…
目录: 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…
终结方法finalize()通常是不可预测的,也是很危险的,一般情况下是不必要的. Java语言规范并不保证finalize()会被及时执行,即不确定终结方法执行时间,只规定在对象被垃圾回收之前执行 不应该依赖终结方法来改变重要的持久状态 终结方法会造成严重的性能损耗 正确使用终结方法 防止用户使用了创建了对象后,并未使对象提供的显式终止方法(如果有).终结方法可以充当安全网. 本地对等体(是一个本地对象,普通对象通过本地方法委托给一个本地对象.)不是一个普通对象,垃圾回收器不会回收它.一般情况…
在Java中,当一个对象变得不可到达时,垃圾回收器会回收与该对象相关联的存储空间.用try-finally块来回收其他的非内存资源. 终结方法的缺点在于不能保证会被及时地执行.从一个对象变得不可到达开始,到它的终结方法被执行,所花费的这段时间是任意长的.这意味着注重时间的任务不应该由终结方法来完成.例如,用终结方法来关闭已经打开的文件是错误的,因为打开文件的描述符是一种很有限的资源.由于JVM会延迟执行终结方法,所以大量的文件会保留在打开状态,当一个程序再不能打开文件的时候,它可能会运行失败.…
我们的程序中经常会用到线程来执行某些异步操作,而有些时候我们的线程执行的函数是这个样子的: void ThreadBody() { while( true ) { std::cout << "Processing..." << std::endl; Sleep(1000); } } 那么,从理论上讲,这个线程将永远的执行下去,直到这个线程所属的进程运行完毕为止.注意,即使这个线程函数是某个类的成员函数,即使我们创建的,与该线程绑定的boost::thread对象…
使用静态方法的优点: 1.它们是有名字的,生成的客户端代码更易阅读. 如:返回素数的静态方法 BigInteger.probablePrime 2.与构造方法不同,它们不需要每次调用时都创建一个对象. 3.与构造方法不同,它们可以返回类型的任何子类型的对象. 4.返回对象的类可以根据输入参数的不同而不同. 如:枚举类 EnumSet,当枚举类型小于等于64个时,返回RegularEnumSet实例,是一个long类型:当枚举数大于64个时,返回JumboEnumSet实例,是一个long类型的数…
避免使用终结方法(finalizer) 终结方法(finalizer)通常是不可预测的,也是很危险的,一般情况下是不必要的. 不要把finalizer当成C++中析构函数的对应物.java中,当对象不可达时(即没有引用指向这个对象时),会由垃圾回收器来回收与该对象相关联的内存资源:而其他的内存资源,则一般由try-finally代码块来完成类似的工作. 一.finalizer的缺点: 1. 终结方法的缺点在于不能保证会被及时地执行. 及时执行finalizer方法是JVM垃圾回收方法的一个主要功…
==知识梳理== ==重难点梳理== ==今日目标== 1.能够了解什么是可变参数 2.能够了解如何去创建不可变集合 3.能够掌握Stream流的使用 ==知识点== 1.可变参数 2.Stream流 ==超详细讲义== 1.可变参数 1.1可变参数[了解] (共4点) 1.什么是可变参数(个数) 可变参数就是参数个数不确定,个数范围[0-N] 2.如何使用可变参数 1.可变参数定义的可格式 修饰符 返回值类型 方法名(数据类型... 变量名) { } 2.可变参数的基本使用 package c…
考虑用静态构造方法代替构造器的好处: 1.静态构造方法有名字     BigInteger.probablePrime(int, int, Random)比 new BigInteger(int, int, Random)更加清楚,从名字知道返回可能是素数.     如果没有名字,将来给别人调用时,对方往往不知道该用哪个. 2.可以不必在每次调用时重新创建一个新对象     其实就是享元模式和单例模式 3.可以返回原类型的任何子类型对象.     这样可以使API变得更加简洁     这里可以引…
以前写过了3个博文,都是关于汉字转拼音的,后来发现都不是很“完美”的解决方案,第一个和第二个利用的unicode编码的范围进行确定汉字的拼音,但是难免有遗漏,这个在后面的实践中发现的,后来第三个方法是穷举了汉字来获得汉字的拼音,虽然已维护好修改,但是我对于它里面包含的微型字库产生了疑虑,是否将所有汉字包含了,有没有遗漏,并且还不支持繁体字,这些特点注定它也将成为过去,但是它带给我的启发是巨大的,于是就有了这个终结篇. 这个终结方法本质就是穷举所有汉字进行处理的. 字库来源:http://xh.5…