作者 | 磊哥

来源 | Java面试真题解析(ID:aimianshi666)

转载请联系授权(微信ID:GG_Stone)

重要说明:本篇为博主《面试题精选-基础篇》系列中的一篇,查看系列面试文章请关注我。Gitee 开源地址:https://gitee.com/mydb/interview

本题目难度:低

常见程度:高

1.final 介绍

final 是 Java 语言中的一个关键字,使用 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 介绍

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

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

finalize 性能问题

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

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

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

总结

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

参考 & 鸣谢

《Java核心技术面试精讲》

关注公众号:Java面试真题解析,查看更多 Java 面试题。

面试官:final、finally、finalize 有什么区别?相关推荐

  1. 面试官:说说 typeof 与 instanceof 区别?

    一.typeof typeof 操作符返回一个字符串,表示未经计算的操作数的类型 使用方法如下: typeof operand typeof(operand) operand表示对象或原始值的表达式, ...

  2. 【运维面试】面试官:reids和memcache的区别?

    前言 redis和memcache的区别在面试中也经常会被提到,今天我们来看看redis与memcache的知识 概念 memcached: 一款开源的,高性能,分布式的内存系统 redis:一个开源 ...

  3. 面试官:谈谈equals() 和 == 的区别

    引言 谈谈equals() 和 == 的区别,这是一个非常经典的问题,不是特别难,面试也时有问道:但是很多小伙伴在面试时脑子却一片空白,痛失offer:所以在这里我详细介绍一下这两者的区别,希望对你能 ...

  4. final, finally, finalize有什么区别?

    1.final Final是最终的意思,标示不能被改变,可以用于成员变量(包括方法参数),方法.类. 修饰变量,变量一旦被初始化便不可改变. 修饰方法,方法不能被覆盖. 修饰类,类不能被继承. 2.f ...

  5. 面试官:Java深拷贝和浅拷贝区别

    文章目录 一.拷贝的引入 (1).引用拷贝 (2).对象拷贝 二.浅拷贝 (1).定义 (2).浅拷贝实例 三.深拷贝 (1).定义 (2).深拷贝实例 一.拷贝的引入 (1).引用拷贝 创建一个指向 ...

  6. 面试官问我 StringBuilder 线程不安全的点在哪儿.....

    点击关注公众号,Java干货及时送达 来源:cnblogs.com/keatsCoder/p/13212289.html 引言 面试官: StringBuilder和StringBuffer的区别在哪 ...

  7. 面试官问:Integer 如何实现节约内存和提升性能的?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:Byte_Liu 来源:https://urlify.cn/ ...

  8. 3 连接sybase_今日头条面试官:给我说说数据库连接池的原理?

    作者:敦格 来源:https://urlify.cn/ABJbum 这次我们采取技术演进的方式来谈谈数据库连接池的技术出现过程及其原理,以及当下最流行的开源数据库连接池jar包. # 早期我们怎么进行 ...

  9. 面试官:元素排序Comparable和Comparator有什么区别?

    作者 | 磊哥 来源 | Java面试真题解析(ID:aimianshi666) 转载请联系授权(微信ID:GG_Stone) 本文已收录<Java常见面试题>系列,Git开源地址:htt ...

  10. 面试官:兄弟,说说 ArrayList 和 LinkedList 有什么区别

    作者 | 沉默王二 来源 | 沉默王二(ID:cmower) ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题.可能大部分小伙伴和我一样,能回答出"Ar ...

最新文章

  1. C指针8:二级指针(意思就是指向指针的指针)
  2. 九款让WordPress成为赚钱利器的广告插件
  3. C 函数 strstr 的高效实现
  4. mysql中文时好时坏_mysql索引的问题,时好时坏
  5. Ubuntu runlevel修改
  6. java mojo是什么_java – 为什么Maven不能找到我的定制Mojo?
  7. 【无标题】java班级管理系统
  8. Photoshop:PS如何实现放大图片不模糊
  9. VTK学习之激光点云动态库封装(排水管道)
  10. 第5章 NameNode和SecondaryNameNode
  11. PHP傻瓜式一键建站系统源码+无需授权
  12. 一个简单的RingBuffer
  13. Entegris EUV 1010光罩盒展现极低的缺陷率,已获ASML认证
  14. linux录制声卡声音_linux下ALSA声卡 录音问题
  15. 菜单栏、工具栏、状态栏——QT
  16. 一代版本一代神,加密行业在新局势下充满机遇也面临挑战
  17. 自动化运维工具——puppet详解(二)
  18. 红队攻击演练过程中必须具备哪些能力
  19. 软件生命周期模型—V模型
  20. 数字经济数据2009-2019年、数字经济发展指标体系和测算2011-2020年、地级市数字经济数据2011-2019年、数字经济发展指数2011-2020年

热门文章

  1. 计算机文化基础重点知识归纳,计算机文化基础_第二章重点知识总结(考试必备!!!)...
  2. viewpage 去掉左右切换效果_ViewPager实现多页面切换以及动画效果
  3. python在浏览器运行一片空白_Webdriver启动Firefox浏览器后,页面显示空白
  4. scala通过JDBC进行数据库操作
  5. Problem A: 删除区间内的元素(线性表)
  6. 数据库的辅助工具:My-SqlViewer
  7. 中国互联网安全大会将召开 网络安全再获关注
  8. Guava翻译系列之EventBus
  9. Android 布局练习
  10. MAVEN 私有仓库库迁移