参考:
https://www.javanav.com/interview/a44c6002839f496d9e8e2f44ac40f08a.html
https://www.cnblogs.com/fudashi/p/6498205.html
- final 表示最终的、不可改变的。用于修饰类、方法和变量。final 变量必须在声明时给定初值,只能读取,不可修改。final 方法也同样只能使用,不能重写,但能够重载。final 修饰的对象,对象的引用地址不能变,但对象的属性值可以改变
- finally 异常处理的一部分,它只能用在 try/catch 语句中,表示希望 finally 语句块中的代码最后一定被执行(存在一些情况导致 finally 语句块不会被执行,如 jvm 结束)
存在不被执行的情况:
(1)中止当前虚拟机。System.exit()
(2)守护(daemon)线程被中止时
当所有的非守护线程中止时,虚拟机会kill掉守护线程从而中止程序。 虚拟机中,执行main方法的线程就是一个非守护线程,垃圾回收则是另一个守护线程,main执行完,程序就中止了,而不管垃圾回收线程是否中止。 所以,如果守护线程中存在finally代码块,那么当所有的非守护线程中止时,守护线程被kill掉,其finally代码块是不会执行的。
- finalize() 是在 java.lang.Object 里定义的,对象被回收时 finalize() 方法会被调用。Java允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要清理工作,在垃圾收集器删除对象之前被调用。一般情况下,此方法由JVM调用。特殊情况下,可重写 finalize() 方法,当对象被回收的时候释放一些资源,须调用 super.finalize() 。