• Java中final、finally、finalize的用法与区别


    一、final

    • final是一个修饰符,也是一个关键字
    • final修饰的类型无法被继承,经典的String类型。
    • fina修饰的方法无法被覆盖,但允许重载,类的private方法会被隐式指定为final修饰。
    • final修饰的变量因为不可变,所以被称为常量,存在于方法区常量池,当变量类型为基本数据类型时,变量值初始化后将不能改变,变量类型时引用类型时,变量值由于存储引用地址,所以变量引用将不能变为其他对象,但是对象内部的属性是可以修改的。

    二、finally

    • finally是一个关键词,修饰代码块。
    • finally不能单独使用,通常于try或者try{...} catch配合使用,用于释放执行过程占用的资源。
    • finally修饰的块一定会被执行,当然,如果在程序执行中,JVM异常退出,是不会执行finally块的。执行System.exit(n)也会导致finally{...}不执行。
    • finally修饰的代码块会在方法结束之前执行,如果finally中含有return 语句,那么方法执行将会返回finally中的return结果,而不会执行try{...}或者catch{...}中的结果,所以一般情况不允许在finally出现return语句。代码示例:
      public class FinalDemo {
            public static void main(String[] args) {
                System.out.println(FinalDemo.execute());
            }
    
            public static String execute() {
               try {
                    throw new RuntimeException("ex");
                    //return "try";
               } catch (Exception ex) {
                    return "catch";
               } finally {
                   return "final";
               }
            }
      }

    三、finalize

    • finalize()是Object对象的protected方法,通常子类重写该方法实现资源清理,GC在回收对象前会执行该方法。
    • finalize()存在的问题:
    1. Java语言规范并不能保证finalize()方法能被及时执行,也不能保证一定会被执行。
    2. finalize()方法可能带来性能问题,因为JVM通常在单独的低优先级线程中来执行finalize()。
    3. finalize()方法中,可将待回收的对象赋值给GC root可达的对象引用,从而达到对象再生的目的。
    4. finalize()方法最多被GC执行一次,但是可以通过对象调用。
  • 相关阅读:
    Spring事务管理
    ssh三大框架整合
    SVN服务器安装教程
    springaop配置
    SVN学习笔记
    spring整合jdbc
    ubuntu 虚拟XP chm文件用不了
    Acegi的标签库authzauthorize
    android http 连接通信
    UltraISO(软碟通)制作安装Ubuntu
  • 原文地址:https://www.cnblogs.com/zhexuejun/p/14890499.html
Copyright © 2020-2023  润新知