final,finally,finalize的区别
final用于声明类,方法,属性。
声明类,类不能被继承;
声明方法,方法不可重载;
声明属性(变量),属性不可变。
对于基本数据类型,很好理解,对于引用数据类型,引用变量指向的是实际的对象,但其存储的是所指向的对象的地址,因此,其值不能修改,并不意味只其所指向的对象不能修改。
finally是异常处理语句结构的一部分,表示总是执行,常用于执行清除操作。
如果有异常抛出,那么相应的catch子语句就会执行,然后控制会进入finally块(如果有的话)。
finalize是方法名。java允许使用finalize()方法在垃圾收集器将对象从内存中清除出去之前做必要的工作,finalize()方法是在Object类中定义的,因此所有的类都继承了它。
finalize()在什么时候被调用?有三种情况
1.所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候.
2.程序退出时为每个对象调用一次finalize方法。
3.显式的调用finalize方法
除此以外,正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因
有时当撤消一个对象时,需要完成一些操作。例如,如果一个对象正在处理的是非Java 资源,如文件句柄或window 字符字体,这时你要确认在一个对象被撤消以前要保证这些资源被释放。为处理这样的状况,Java 提供了被称为收尾(finalization )的机制。使用该机制你可以定义一些特殊的操作,这些操作在一个对象将要被垃圾回收程序释放时执行。