final可以用来修饰类、方法、变量,分别有不同的意义。final修饰的class不可以被继承;final修饰的变量不可以修改;final修饰的方法不可以重写。

finally是Java保证重点代码一定要被执行的一种机制。我们可以使用try-finally或者try-catch-finally来进行类似关闭JDBC连接、保证unlock锁等动作。

finalize是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK9开始被标记为deprecated。

注意事项

finally代码不会被执行的特例:

  1. try {
  2. // do something
  3. Sysem.exit(1);
  4. } fnally{
  5. Sysem.out.println(“Print from fnally”);
  6. }

final修饰的List,不会影响其行为:

  1. final Lis<String> srLis = new ArrayLis<>();
  2. srLis.add("Hello");
  3. srLis.add("world");
  4. Lis<String> unmodifableStrLis = List.of("hello", "world");
  5. unmodifableStrLis.add("again");

final只能约束strList这个引用不可以被赋值,但是strList对象行为不被final影响,添加元素的操作是完全正常的。如果我们真的希望对象本身是不可变的,那么需要相应的类支持不可变的行为。在上面的例子中,List.of方法创建的就是不可变List,最后那句add会在运行时抛出异常。

Java平台目前在逐步使用java.lang.ref.Cleaner来替换掉原来的finalize实现。