『Java 语法基础』final、finalize 和 finally 的不同之处

final

final 是一个修饰符,是 Java 编程语言中的一个关键字,可以用来修饰变量、方法、以及类。使用 final 的效果是不同的,取决于它修饰的对象类型。下面我会分别解释 final 修饰变量、方法和类时的效果。

final 修饰变量

final 修饰一个变量时,这个变量就变成了一个常量,也就是说它的值只能被赋值一次,一旦赋值之后就不能被修改了。如果尝试修改 final 变量的值,编译器会报错。

final int number = 10; // 初始化 final 变量
// number = 15; // 编译错误,不能修改 final 变量的值

final 修饰方法

final 修饰一个类的方法时,这个方法不能被子类覆盖或重写。这意味着子类不能提供一个具有相同名称和参数类型的方法。

class Parent {
    final void show() {
        System.out.println("这是一个 final 方法。");
    }
}

class Child extends Parent {
    // 编译错误,不能覆盖 final 方法
    // void show() {
    //     System.out.println("尝试覆盖 final 方法。");
    // }
}

final 修饰类

final 修饰一个类时,表示这个类不能被继承。换句话说,没有其他类能够继承 final 类。

final class FinalClass {
    // 类的定义
}

// 编译错误,不能继承 final 类
// class SubClass extends FinalClass {
// }

finalize

finalize() 方法在 Java 中是与对象生命周期关联的一个概念。当一个对象不再有任何的引用指向它,也就是说,这个对象不再被程序中的其他部分所需要时,Java 虚拟机(JVM)的垃圾收集器(GC)可能会考虑将其回收以释放内存资源。在垃圾收集器决定回收对象之前,finalize() 方法会被调用,给予了这个对象一个机会来进行清理工作,比如关闭打开的资源等。

然而,finalize() 方法存在几个问题:

  1. 不确定性:finalize() 方法被调用的具体时间是不确定的。垃圾收集器运行的时间取决于多种因素,包括 JVM 的内存使用情况、垃圾收集算法等。这意味着,从对象不再有引用到 finalize() 方法被调用之间的时间可能非常长,甚至可能永远不会被调用。
  2. 性能问题:由于 finalize() 执行不确定,且可能影响垃圾收集的效率,过度依赖 finalize() 方法可能会导致性能问题,例如延迟对象内存的回收,或导致内存泄漏。
  3. 资源释放:如果你在 finalize() 方法中处理类似于文件关闭等操作,可能会导致资源无法及时释放。如果你的应用程序打开了大量文件且依赖于 finalize() 方法来关闭这些文件,可能会导致资源耗尽,因为垃圾收集器没有及时调用 finalize() 方法。

因此,通常的最佳实践是避免使用 finalize() 方法来清理资源。相反,推荐使用 try-with-resources 语句或者显式的清理方法,例如,在你控制资源的代码块中使用 try-catch-finally 来确保资源始终得到适当的释放。

简而言之,finalize() 方法可以看作是在对象生命周期结束前的 “最后通牒”,虽然你可以在这里做一些清理工作,但它的执行是不可预测的,并且可能会给程序带来更多问题,因此不建议依赖它来释放资源或做其他关键操作。

finally

finally 是一个关键字,与 try 和 catch 一起用于异常的处理。finally 块一定会被执行,无论在 try 块中是否有发生异常。

想象一下,你在游乐场玩抛球游戏。try 块就像是你向篮筐投球的尝试,如果球进了篮筐,那就意味着没有发生错误,你的代码运行正常。而如果球没有进篮筐,这就好比发生了异常,这时候 catch 块就会介入,像是游戏工作人员过来告诉你什么出了问题,并给你另一次机会。

现在,打个比方,无论你是否成功将球投入篮筐(即无论 try 块中的代码是否成功运行),你都必须将球还给工作人员,这个动作就像是 finally 块。finally 块确保了无论之前发生了什么,一些必须进行的清理工作(比如归还球)都会被执行。这表示即便在 try 块中代码顺利执行或 catch 块捕获到异常后运行相应的错误处理代码,finally 块中的代码也总是会被执行。这通常是用来释放资源,比如关闭文件流或数据库连接。

简言之,finally 是你整理游戏场地,确保一切都已妥善处理后才离开的保障。它保证了,在你完成游戏之后,不管结果如何,都会有一些后处理工作被执行以维持场地的正常运作。

posted @   BNTang  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
  1. 1 总会有人离开 王巨星
  2. 2 月亮 孟凡明
  3. 3 迟里乌布
  4. 4 我只能离开 颜人中
  5. 5 达尔文 蔡健雅
  6. 6 夜色滚烫 叶明净
  7. 7 你的星环 路飞文
  8. 8 不再说话 三块木头
  9. 9 黄昏 粥粥和小伙/粥粥
  10. 10 爱不单行 刘大拿
  11. 11 心动贩卖机 PIggy
  12. 12 别来无恙 苏星婕
  13. 13 我们的歌 刘大拿
  14. 14 一直很安静 王贰浪
  15. 15 去有风的地方 清音
  16. 16 雪 Distance Capper/罗言
  17. 17 坏女孩 徐良/小凌
  18. 18 乐园 沧桑Cang333/虎皮蛋/曲甲
  19. 19 Ayo(Explicit) Chris Brown/Tyga
  20. 20 我的美丽feat.海洋Bo 海洋Bo/高睿
  21. 21 世事可爱 粥粥和小伙/粥粥
  22. 22 我记得 赵雷
  23. 23 我想牵着你的手 许嵩
  24. 24 人们都不懂 刘诺然
  25. 25 寻一个你(电视剧《苍兰诀》温情主题曲) TTTTTeehom
  26. 26 子莫格尼 杉和
  27. 27 Cat Cafe Shoffy
  28. 28 风停了雨停了我们还拥抱着 Superluckyqi
  29. 29 寂寞沙洲冷 于潼
  30. 30 三国恋 王巨星
  31. 31 达尔文 林俊杰
  32. 32 有些 颜人中
  33. 33 小模样 张小只ya
  34. 34 是否 程响
  35. 35 楼顶上的小斑鸠 队长
  36. 36 笑场 薛之谦
  37. 37 还是分开 张叶蕾
  38. 38 修炼爱情 林俊杰
  39. 39 二零三 毛不易
  40. 40 雅俗共赏 许嵩
  41. 41 Serendipity 古瑞斯Graps/Zakiya晴子
  42. 42 就让这大雨全都落下·2023 刘大拿
  43. 43 老男孩 筷子兄弟
  44. 44 有何不可 许嵩
  45. 45 缓缓 杜宣达
  46. 46 好久不见 陈奕迅
  47. 47 爱的魔法(Cover 金莎) 封茗囧菌
  48. 48 在你的身边 盛哲
  49. 49 带我去找夜生活 告五人
  50. 50 假面舞会 很美味
  51. 51 STAY The Kid LAROI/Justin Bieber
  52. 52 我好想睡觉的 无敌西红柿
  53. 53 日不落(温柔版)
  54. 54 恋爱画板 锦零
  55. 55 7710 好乐无荒/尹露浠
  56. 56 给你呀(又名:for ya) 蒋小呢
  57. 57 Love Story Taylor Swift
  58. 58 Plain Jane(Remix 13z) 鱼幼微
  59. 59 晚风 7opy/BT07
  60. 60 拜托 孙晨
  61. 61 乌梅子酱 李荣浩
  62. 62 南半球与北海道 范倪Liu
  63. 63 星河万里 Rom邢锐
我记得 - 赵雷
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 赵雷

作曲 : 赵雷

编曲 : 赵雷

制作人 : 赵雷

我带着比身体重的行李 游入尼罗河底 经过几道闪电 看到一堆光圈 不确定是不是这里

我看到几个人站在一起 他们拿着剪刀摘走我的行李 擦拭我的脑袋 没有机会返回去

直到我听见一个声音 我确定是你

可你怎记得我

我带来了另界的消息 可我怎么告知你

注定失忆着相遇

我记得这里是片树林 后面有个山坡 山坡上的枣树每当秋天到来 我们把枣装满口袋

我记得除了朋友我还 做过你的叔父 你总喜欢跟在我的屁股后面 只是为了那几个铜钱

我记得我们曾是恋人 后来战争爆发 你上战场后就再也没有回来 直到收不到你的信

我们总这样重复分离 却要重新开始 相互送别对方 说着来世再见 再次失忆着相聚

呜 呜 呜 呜…

快来抱抱 快来抱抱我

呜 呜 呜 呜…

快来抱抱 快来抱抱我

在路上我遇到了一位故去多年的人 她是如此年轻 扎着过肩马尾 露出和你一样的笑

她和我讲了很多关于你成长的故事 在星空另一端 思念从未停止 如同墓碑上的名字

不要哭我最亲爱的人 我最好的玩伴 时空是个圆圈 直行或是转弯 我们最终都会相见

在城池的某个拐角处 在夕阳西下时 在万家灯火的某一扇窗纱里 人们失忆着相聚

呜 快来抱抱 快来抱抱我

呜 快来抱抱 快来抱抱我 我终于找到你

呜 快来抱抱 快来抱抱我 我终于找到你

编曲:赵雷

电吉他:刘磊、谢星

贝斯:Damien Banzigou

鼓:Chris Trzcinski

钢琴:姜伯虎

打击乐:刘恒、Chris Trzcinski

Organ:赵雷

口琴:赵雷

和声:朱莉、旭东

录音师:张俊

混音师:时俊峰

录音室:摩登天空、55TEC

录音助理:陈彬彬、朱莉

母带工程室:Sterling Sound

母带工程师:Randy Merrill

封面设计:韩东、小强、阿穆隆

点击右上角即可分享
微信分享提示