首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

final finalize 跟 finally的区别

2012-08-28 
finalfinalize 和 finally的区别这是一个在java初级面试中被频频问到的一个问题。为什么把这三个放在一起问

final finalize 和 finally的区别
这是一个在java初级面试中被频频问到的一个问题。为什么把这三个放在一起问,我想无非就是拼写有点点的相似,考察一下你对java基础知识的了解。

首先我们来说说final。final是java的关键字,可以用来修饰成员变量,成员方法和类。
1. final 变量
final修饰的变量在定义的时候必须进行赋值 (也可以定义时不赋值,然后在每个构造方法中为其进行初始化)。如果final修饰的变量是基本数据类型,则有可能作为编译时常量进行处理。如果final 修饰的是一个引用,这个引用不能再引用另外的对象,但是对象里面的内容是可以改变的。final 也可以用于参数列表中的参数。

2.finalize()

finalize()是Object类的一个方法,在所有的类中都可以重写这个方法。finalize()方法的作用我们可以参考下面的API文档得知
protected ?void finalize()
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
在GC确定某个对象不再有引用指向它时,会调用该对象的finalize(),但此时不一定会立即回收此对象所占用的内存。那么这个方法有什么用途呢?其实它可以用来回收某些特殊的内存,比如你在java中调用了C/C++的本地化方法开辟类一块内存,那么java的垃圾回收是不会对这块内存进行回收的,这个时候你就可以在finalize()调用相应的本地化方法进行清理工作,以免造成内存泄漏。

3.finally
无论try语句块中的异常时候抛出,都会执行finally语句块。Finally可以做一些除垃圾回收(内存)以外其他资源的回收工作,比如关闭打开的文件等等。另外记住finally总会在return之前执行就ok了。


热点排行