1.引入:之所以要使用这项技术是因为一个非final的公有类覆盖了来自Object的finalize()方法,此类被继承时在子类中如果同样的重写了finalize()方法时需要使用如下模式调用父类被覆盖的finalize()方法。
protected void finalize() throws Throwable {
try{
//do something for finalize
}finally{
super.finalize();
}
}
如果子类中忘记调用,则父类中资源将不能得到释放。(父类)要防范这种错误需要采用终结函数守卫者对象对其资源进行释放。
2.使用
为每一个将被终结的对象(非final公有类中有符合使用原本需继承Object中finalize()方法来释放资源的)创建一个附加的对象。不是把终结函数放在要求终结处理的类中,而是把终结函数放在一个匿名的内部类中,该匿名内部类唯一的用途是终结其外围实例。该匿名类的单个实例被称为终结函数守卫者,外围类的每一个实例都会创建这样的一个守卫者对象。外围实例在它的私有域中保存着一个对其守卫者的唯一引用,所以,终结函数守卫者与外围实例可以同时启动终结过程。当守卫者被终结的时候,它执行外围实例所期望的终结行为,就好像它的终结函数是外围对象上的一个方法一样。
public class Super {
private final Object finalizeGuardian = new Object(){
protected void finalize() throws Throwable {
//do something for finalize Super object
}
};
注意:公有类Super没有终结函数,所以其子类的终结函数是否调用super.finalize()并不重要,对于每一个带有终结函数的非final公有类,都应该考虑使用这项技术来取缔终结函数。
注意:以上技术的使用是在可以使用finalize()来作为终结方法来使用的唯一两种情况下采用的替代技术,即:
1)作为完全网。(提供了释放资源的显示释放方法,但是防止忘记调用)
2)为了终止非关键的本地资源。(普通对象的本地对等体并不拥有关键资源的前提下)
分享到:
相关推荐
p2p 终结者 p2p 终结者p2p 终结者 p2p 终结者 p2p 终结者 p2p 终结者p2p 终结者 p2p 终结者 p2p 终结者p2p 终结者 p2p 终结者 p2p 终结者 p2p 终结者p2p 终结者p2p 终结者 p2p 终结者p2p 终结者 p2p 终结者 p2p 终结...
网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者网吧终结者
P2P终结者 4.04P2P终结者 4.04P2P终结者 4.04P2P终结者 4.04P2P终结者 4.04P2P终结者 4.04
易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游还原终结者易游...
灰色按钮终结者 灰色按钮终结者 灰色按钮终结者 灰色按钮终结者 灰色按钮终结者 灰色按钮终结者 灰色按钮终结者
p2p终结者p2p终结者 p2p终结者 p2p终结者 p2p终结者 p2p终结者 p2p终结者 p2p终结者 p2p终结者
驱动防火墙终结者 驱动驱动防火墙终结者 防火墙终结者 驱动防火墙终结者 驱动防火墙终结者
p2p终结者p2p终结者p2p终结者p2p终结者p2p终结者
图标终结者
终结者木马专杀工具 终结者木马专杀工具 终结者木马专杀工具终结者木马专杀工具终结者木马专杀工具 终结者木马专杀工具
p2pover 终结者p2pover 终结者p2pover 终结者
P2P终结者+反P2P终结者 网络管理的好工具
反p2p终结者 反p2p终结者破解版,实用!!!!!!!!
终结者CMCC扫号器
p2p终结者
p2p终结者p2p终结者p2p终结者p2p终结者
p2p终结者p2p终结者p2p终结者p2p终结者
P2P终结者目前可以控制绝大部分流行的P2P软件下载,而且P2P终结者开发人员将持续跟踪最新的P2P下载技术的发展,在发现会对网络正常应用造成较大影响的网络下载技术时,会及时进行软件升级更新。 P2P终结者具有以下...
终结者远程控制
搜狗浏览器广告终结者插件,搜狗官方网站已经不能下载,双击打开点搜狗浏览器打开即可