zoukankan      html  css  js  c++  java
  • (十一)、final,finally,finalize的区别

    首先,这三者一点关系都没有。

    final

    对于我们来说final是很基础的关键字。final可以用来修饰类、方法、变量。

    1.final修饰的class,代表不可继承扩展。

    2.final修饰的方法是不可以重写的。

    3.final修饰的变量是不可以修改的。

      这里所谓的不可修改对于基本类型来说,的确是不可以修改。而对于引用类型来说,只能说不能重新赋值,也就是不能改编引用地址。但是作为引用类型,它内部所包含的内容如果不是final则可以随意修改。

    4.final声明的变量需要显示的给它赋初始值。如何赋值?直接赋值或在构造函数里赋值,对于编译的.class文件是等价的。

    final int num;
    final int num2 = 666;
    public Test(){
        num = 666;
    }

    finally

    finally 则是Java保证重点代码一定要被执行的一种机制。最常用的地方:通过try-catch-finally来进行类似资源释放、保证解锁等动作。

    finally在try,catch中可以有,可以没有。如果trycatch中有finally则必须执行finally快中的操作。一般情况下,用于关闭文件的读写操作,或者是关闭数据库的连接等等。

    try{
        ...
    }catch(){
        ...
    }finally{
        ...
    }

    这里提一点,try-finally也是可以的。不过这里个人不建议省略掉catch。

    什么情况下finally不执行?当然是程序停止啊。

    try{
        System.exit();
    }finally{
        System.out.println("程序都死了,finally当然不执行了。")
    }

    finalize

    finalize这个是方法名。在java中,允许使用finalize()方法在垃圾收集器将对象从内存中清理出去之前做必要的清理工作。

    说实话,我们日常开发中finalize用的并不多,而且也不被推荐使用。甚至在Java9中,明确将Object.finalize()标记为deprecated!

    关于finalize说白了,它设计之初的作用就是:在CG要回收某个对象时,让这个对象有底气的大喊一声:“报告,我还能再抢救一下!”。但是也正是因为如此,JVM要对它进行额外处理。finalize也就成为了CG回收的阻碍者,也就会导致这个对象经过多个垃圾收集周期才能被回收。

    参考文章:https://baijiahao.baidu.com/s?id=1611915475314303885&wfr=spider&for=pc 

    很想高飞,但我不能;不想天空,剩我一人。
  • 相关阅读:
    PTA(Basic Level)1038.统计同成绩学生
    PTA(Basic Level)1026.程序运行时间
    PTA(Basic Level)1031.查验身份证
    PTA(Basic Level)1061.判断题
    Windows 常用命令
    Windows安装启动MySQL
    classpath路径配置
    IDEA远程调试
    Java Effective 读书笔记
    Try Catch Finally总结
  • 原文地址:https://www.cnblogs.com/lixiansheng/p/11299774.html
Copyright © 2011-2022 走看看