关于finally和finalize的使用
来源:互联网 发布:mac drarmw 编辑:程序博客网 时间:2024/04/29 11:27
一、finally的使用
finally关键字是对 Java 异常处理模型的最佳补充。finally 结构使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。这里举个例子说明不使用finally时如何释放非内存资源
import java.net.*; import java.io.*; class WithoutFinally { public void foo() throws IOException { //在任一个空闲的端口上创建一个套接字 ServerSocket ss = new ServerSocket(0); try { Socket socket = ss.accept(); //此处的其他代码... } catch (IOException e) //1 { ss.close(); throw e; } //此处操作即处理非内存资源方法ss.close(); //2 } }在//2的位置调用了close方法来关闭套接字以避免资源漏洞,但是如果try块中出现异常的话,//2处永远不会调用。因此需要在//1处插入一个catch来捕获异常,当try块出现异常时依然能对close进行调用。但这样的写法麻烦又容易出错,现在用finally来重写以上代码:
import java.net.*; import java.io.*;class WithFinally { public void foo2() throws IOException { //在任一个空闲的端口上创建一个套接字 ServerSocket ss = new ServerSocket(0); try { Socket socket = ss.accept(); //此处的其他代码... } finally { ss.close(); } } }直接在try块后用finally块,无论try块是否发生异常,都会调用close方法,这样可以确保套接字被关闭以避免资源泄露。另外,finally块存在的话它总会被执行。如果要让它不执行,则可以在内部加一条System.exit(0)语句,或者在try执行期间断电,只是没有这个必要罢了~
二、finalize的使用
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
finalize的工作原理应该是这样的:一旦垃圾收集器准备好释放对象占用的存储空间,它首先调用finalize(),而且只有在下一次垃圾收集过程中,才会真正回收对象的内存.所以如果使用finalize(),就可以在垃圾收集期间进行一些重要的清除或清扫工作。
finalize()方法的通用格式如下:
protected void finalize( ){// finalization code here}关键字protected是防止在该类之外定义的代码访问finalize()标识符。
java的finalize方法相当于C/C++的撤销函数(destructor),java不提供这类撤销函数,但finalize方法和其功能接近。它最主要的用途是回收特殊渠道申请的内存。Java程序有垃圾回收器,所以一般情况下内存问题不用程序员操心。但有一种JNI(Java Native Interface)调用non-Java程序(C或C++),finalize()的工作就是回收这部分的内存。
0 0
- 关于finally和finalize的使用
- final,finally和finalize的使用
- java关于final,finally和finalize的一些理解
- 关于final、finally、finalize的区别
- 个人理解的关于final、finally、finalize
- final 和finally和finalize的区别
- final finally finalize的使用区别
- final、finally和finalize的区别[转载]
- final、finally和finalize的区别
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别
- final、finally和finalize的区别
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别
- final、finally和finalize的区别是什么?
- final、finally和finalize的区别是什么?
- MySQL安装图解
- Maven实战---两个war包的调用
- databinding异常Error:(250, 72) 错误: 找不到符号 符号: 方法 getResources() 位置: 类型为String的变量 type
- Flying 模仿Spy++的一个工具
- 一个http请求的响应报文即response,头部即header,可以任意增加属性吗,即自定义header?
- 关于finally和finalize的使用
- 合并两个文件中的列
- 最详细的 Android Toolbar 开发实践总结
- 0316
- CSS clear both清除浮动
- 【iOS开发】使用Xcode8 添加Launch Image(启动图片)
- Spring总结_04_容器和bean
- centos 安装ffmpeg
- SQL Server-字字珠玑,一纸详文,完全理解SERIALIZABLE最高隔离级别(基础系列收尾篇)