final finally finalize的区别

Posted Alance

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了final finally finalize的区别相关的知识,希望对你有一定的参考价值。

1.final

final修饰符 所标记的成分具有终态的特征,表示最终的意思。

final修饰类,类不能被继承。该类将不具有子类。

final修饰方法,方法不能被重写,在某些特殊情况下jvm会将该类方法直接内联以便于减少函数调用开销。

final修饰变量,变量的引用指向不可更改。大约等同于变量不可被更改。(如果引用的是集合,只能保证集合引用指向不被更改、内容无法保证)

2. finally

finally 是指用于try{}中必须被执行的部分。

  1. 常规用法

    try{
      xxx
    }catch(Exception e){
      xxx
    }finally{
      xxx
    }
  2. finally和方法的return

如果return在try块中,无论何时都会执行finally中的代码。

如果return 在finally中则finally中的代码优先于try块中执行

finalize

finalize 是一个Object对象的方法,当一个对象被回收时会调用该方法。

常规用法

public class Test {
    @Override
    protected void finalize() throws Throwable {
        System.out.println("我被回收了");
        super.finalize();
    }
}

public class Demo {
    public static void main(String[] args) {
        Test test = new Test();
        test = null;
    //这里的gc调用不是每次都会成功。
        System.gc();
    //简易的增加一个延迟
    try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

结果

我被回收了

以上是关于final finally finalize的区别的主要内容,如果未能解决你的问题,请参考以下文章

final, finally, finalize的区别描述

Final,finally,finalize区别

简述final和finally的用法和区别

final .....finally ...... 和Finalize ......区别

final, finally, finalize 的区别

Final,Finally,Finalize三个字段的区别