一、final
简单来说:
- final修饰类,说明这个类不能被继承,是以个顶级类;
- final修饰变量,说明这个变量是常量;
- final修饰方法,表示这个方法不能被继承。
1、final修饰变量/方法参数
修饰基本类型,赋予它的值是不可变的,即是常量;修饰的是一个对象,这个对象的引用是不可变的,但是对象本身还是可以变的。
直观的来说,一个变量或方法参数被final修饰,就表示它只能被赋值一次,但是JAVA虚拟机为变量设定的默认值不记作一次赋值。
* 修饰变量必须得初始化,初始化的方式有:
- 在定义的时候初始化;
- 在初始化块中初始化;
- 在类的构造器中初始化;
- 静态变量也可以在静态初始化块中初始化。
2、final修饰方法
final修饰的方法可以被继承但不可以被重写。
特殊说明的是,具有private访问权限的方法也可以增加final修饰,但是由于子类无法继承private方法,因此也无法重写它。编译器在处理private方法时,是按照final方法来对待的,这样可以提高该方法被调用时的效率。不过子类仍然可以定义同父类中的private方法具有同样结构的方法,但是这并不会产生重写的效果,而且它们之间也不存在必然联系。
3、final修饰类
final修饰的类是不可以被继承的。
由于final类不允许被继承,编译器在处理时把它的所有方法都当作final的,因此final类比普通类拥有更高的效率。
二、finally
finally只能跟在try/catch语句中,try子句中执行需要运行的内容,catch子句用于捕获异常,finally子句表示不管是否发生异常,都会执行。当try/catch中有return、break、continue,编译器会先执行finally语句块,再执行return,break,continue。
三、finalize()
finalize()是Object类中的方法,Java技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象进行调用。finalize()方法是在垃圾收集器删除对象之前对这个对象调用的子类覆盖 finalize() 方法以整理系统资源或者执行其他清理操作。
[注]调用它的作用只是建议GC启动,清理无用的对象释放内存空间,但是GC的启动并不是一定的,这由JVM来决定。