final
final是java的修饰符,可以用来修饰方法,类和变量,其中的含义为:
- 方法:表示方法不能被重写
- 类:表示类不能被继承
- 变量:表示变量不能被修改
当final修饰变量时,指的是被修饰的变量的引用不会发生改变,而引用对象里面的元素(若有)操作是完全正常的。
finally
finally是Java保证重点代码一定会被执行的机制。可以用try-finally或者try-catch-finally来关闭连接,释放锁,释放资源。
凡事都没有绝对,在finally里面的代码也是有可能不被执行的,例如:
try {
System.exit(0);
} finally {
System.out.println("finally exec");
}
在JAVA7后,可以更换使用try-with-resources使用
//无需使用finally关闭资源
try (InputStream in = new FileInputStream("A.txt")){
in.read();
} catch (IOException e) {
e.printStackTrace();
}
需要注意的是,并不是所有需要关闭的资源都可以使用try-with-resources来进行关闭。而是需要保证创建的资源实现了java.lang.AutoCloseable接口,否则使用try-with-resources会报错。
finalize
是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为 deprecated(已回收)。
当实现一个非空的finalize的时候,意味着jvm进行垃圾回收前需要对其进行额外处理,可能将导致对象需要经过多个垃圾回收周期才能完成回收,如果堆积对象过多,将会导致oom,因此不推荐使用。
- 参考文档
理解try-with-resources语句及示例 blog.csdn.net/frgod/artic…