文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java中final,finally,finalize 有什么区别

2024-04-02 19:55

关注

1.final 介绍

finalJava语言中的一个关键字,使用 final修饰的对象不允许修改或替换其原始值或定义。​

final 可以用来修饰:类、方法、变量和参数,其中可以用来修饰“参数”这一项,容易被人遗忘,这是 final 的 4 种用法。​

1.1 final 用法说明

final修饰类时,此类不允许被继承,表示此类设计的很完美,不需要被修改和扩展。

final修饰方法时,此方法不允许任何从此类继承的类来重写此方法,表示此方法提供的功能已经满足当前要求,不需要进行扩展。

final修饰变量时,表示该变量一旦被初始化便不可以被修改。

final修饰参数时,表示此参数在整个方法内不允许被修改。

1.2 final 用法展示

final 修饰类:


final class Animal {

}

final 修饰方法:


public class FinalExample {

    public final void sayHi() {

        System.out.println("Hi~");

    }

}

final 修饰变量:


public class FinalExample {

    private static final String MSG = "hello";

	//......

}

final 修饰参数:


public class FinalExample {

    public void sayHi(final String name) {

        System.out.println("Hi," + name);

    }

}

2.finally 介绍

finally则是 Java中保证重点代码一定要被执行的一种机制。​

我们可以使用 try-finally或者 try-catch-finally来进行类似关闭 JDBC连接、保证释放锁等动作。

2.1 finally 用法展示


try {

    // do something

} finally {

    // 一定会执行的代码

}

2.2 finally 扩展

有时候面试也会问finally是否一定会被执行?这是一个有诱导嫌疑的问题,正常情况下 finally 一定是会执行的,但有一个特殊情况 finally也是不会执行的,

特殊的实现代码和执行结果如下:

3.finalize 介绍

finalizeObject类中的一个基础方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收,但在 JDK 9中已经被标记为弃用的方法(deprecated)。

在实际开发中不推荐使用 finalize方法,它虽然被创造出来,但无法保证 finalize 方法一定会被执行,所以不要依赖它释放任何资源,因为它的执行极不“稳定”。在 JDK 9 中将它废弃,也很好的证明了此观点。​

3.1finalize 性能问题

finalize 除了执行“不稳定”之外,还有一定的性能问题。​

因为 finalize 的执行是和垃圾收集关联在一起的,一旦实现了非空的 finalize 方法,就会导致相应对象回收呈现数量级上的变慢,有人专门做过 benchmark,大概是 40~50 倍的下降。​

因为 finalize 被设计成在对象被垃圾收集前调用,这就意味着实现了finalize方法的对象是个“特殊公民”,JVM 要对它进行额外处理。finalize本质上成为了快速回收的阻碍者,可能导致你的对象经过多个垃圾收集周期才能被回收。

4、总结

finalfinallyfinalize从英文字面角度来看,看似很像,实则 3 者在 Java 中没任何关系。final 是用来修饰类、方法、变量和参数的关键字,被 final 修饰的对象不允许修改或替换其原始值或定义;finallyJava中保证重点代码一定要被执行的一种机制;finalize Object类中的一个基础方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收的,但其执行“不稳定”,且有一定的性能问题,已经在 JDK 9 中被设置为弃用的方法了。

到此这篇关于Javafinal,finally,finalize 有什么区别的文章就介绍到这了,更多相关final,finally,finalize的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯