final, finally, finalize 的区别
生活随笔
收集整理的这篇文章主要介绍了
final, finally, finalize 的区别
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
本文转自
一.总体区别
- final 用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。
- finally 是异常处理语句结构中,表示总是执行的部分。
- finallize
表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。允许回收此前未回收的内存垃圾。所有object都继承了finalize()方法
二.final详解
java中final也用来修饰3类东西:变量,方法和类。- 1.变量
final修饰变量表示该变量是不可变的。例如 final int i =1;在程序中i的值就不允许改变了。比较容易混淆的是final用来修饰引用变量时,表示该引用变量是不可变的即引用变量指向的内存地址是不变的,但是被指的内存地址中的类是可以改变的。例如:
final MyClass myClass = new MyClass();
这样声明myClass后,其所指向的内存地址就固定了,但仍然可以改变myClass所引用对象的成员变量。如果试图重用myClass这个变量,让其引用另一个对象则会出错。
myClass = new MyClass();//error!!! - 2.方法
final修饰方法时表示该方法是不能被子类重写的。 - 3.类
final修饰类时表示该类是不能被继承的,由于java的单继承关系,所以该类是继承关系链中的终端。
关于final的几个注意事项:
- a、final变量必须在声明的时候初始化或是在构造函数中初始化;
- b、接口中声明的所有变量都是final的;
- c、final,finally,finalize的区别。final表示不可变,final表示必须执行的语句,finalize表示垃圾回收时执行的代码。
三.finally 详解
Java异常处理模型与其他语言相比,关键词finally是最出色的新增特性了。finally构件使得该区段中的代码总是得以执行,而无论是否发生异常,特别适用于维护对象的内部状态(用来保证异常发生恢复对象的有效状态,以确保程序能在处理完异常后自动再次投入运行)和清理non-memory资源(垃圾回收机制无法处理的资源,如数据库连接、Socket等等)。 但有一点值得注意,那就是尽量不要从try区段中返回(调用return),因为只要有finally区段存在,它就一定会被执行,那么如果你在finally区段中又调用了一次return语句,则try区段中的返回值将会被遮掩,使得方法调用者得到的是finally区段中的返回值--这常常又与程序编写的初衷相背。
总结
以上是生活随笔为你收集整理的final, finally, finalize 的区别的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 为什么我饿了么产品总监不干,却要从事自由
- 下一篇: 高级产品经理的思维方式