[java基础问题] final、finally、 finalize

  1. final、finally、 finalize

    1. final 用来修饰class,variable, function的关键字。修饰class时,代表类不可被继承;修饰variable时,代表标量不可修改(引用所指向的内存地址不可修改); 修饰function时,该方法不可重写(override);
    2. finally java中使用在try-finally 或者 try-catch-finally中,用来确保finally块内的代码一定会被执行,常用来关闭资源等;
    3. finalize 基础类 java.lang.Object 的一个方法,设计目的是保证对象在被垃圾收集前完成特定资源的回收。jdk9中被标记为deprecated(已丢弃)
  2. 知识扩展

    1. 使用final生命的变量只是当前引用地址不可变,如申明的是基本数据类型,则值不变。申明的是非基本数据类型时,对象的引用不可变,成员变量,等信息可以改变;
    2. finally确保总是执行,但是在异常退出时会不执行,例如:
    try {
        // do something
        System.exit(1);
    } finally {
        System.out.println("This is finally");
    }
    
    1. try-catch-finally中使用return的情况:
      1. 在执行第一个return之前没有抛出异常(包括在catch中存在return),则在执行return的前先执行finally后再执行return,此时在finally中无法改变return返回的值(引用的内存地址不可变);
      2. 如果在finally中使用return,会强制执行finally的return,在执行return之前catch的异常信息将会丢失,并且无法对异常进行处理try-catch中的return值会丢失;
    2. 建议使用try-with-resources机制来进行资源回收;
    3. finalize (已丢弃),原因是不发保证执行顺序与时间,并且实现了finallize的对象会被垃圾回收机制特殊处理,影响垃圾回收机制效率,甚至堆积一定程度后出现OOM;
posted @ 2019-05-29 16:26  熊熊熊摸了一下你的头  阅读(101)  评论(0编辑  收藏  举报