欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

final, finally, finalize 的区别

发布时间:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的这篇文章主要介绍了 final, finally, finalize 的区别 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

本文转自

一.总体区别

  • final 用于申明属性,方法和类,表示属性不可变,方法不可以被覆盖,类不可以被继承。
  • finally 是异常处理语句结构中,表示总是执行的部分。
  • finallize
    表示是object类一个方法,在垃圾回收机制中执行的时候会被调用被回收对象的方法。允许回收此前未回收的内存垃圾。所有object都继承了finalize()方法

二.final详解

java中final也用来修饰3类东西:变量,方法和类。
  • 1.变量
    final修饰变量表示该变量是不可变的。例如 final int i =1;在程序中i的值就不允许改变了。比较容易混淆的是final用来修饰引用变量时,表示该引用变量是不可变的即引用变量指向的内存地址是不变的,但是被指的内存地址中的类是可以改变的。例如:
    final MyClass myClass = new MyClass();
    这样声明myClass后,其所指向的内存地址就固定了,但仍然可以改变myClass所引用对象的成员变量。如果试图重用myClass这个变量,让其引用另一个对象则会出错。
    myClass = new MyClass();//error!!!
  • 2.方法
    final修饰方法时表示该方法是不能被子类重写的。
  • 3.类
    final修饰类时表示该类是不能被继承的,由于java的单继承关系,所以该类是继承关系链中的终端。

关于final的几个注意事项:

  • a、final变量必须在声明的时候初始化或是在构造函数中初始化;
  • b、接口中声明的所有变量都是final的;
  • c、final,finally,finalize的区别。final表示不可变,final表示必须执行的语句,finalize表示垃圾回收时执行的代码。

三.finally 详解

Java异常处理模型与其他语言相比,关键词finally是最出色的新增特性了。finally构件使得该区段中的代码总是得以执行,而无论是否发生异常,特别适用于维护对象的内部状态(用来保证异常发生恢复对象的有效状态,以确保程序能在处理完异常后自动再次投入运行)和清理non-memory资源(垃圾回收机制无法处理的资源,如数据库连接、Socket等等)。 但有一点值得注意,那就是尽量不要从try区段中返回(调用return),因为只要有finally区段存在,它就一定会被执行,那么如果你在finally区段中又调用了一次return语句,则try区段中的返回值将会被遮掩,使得方法调用者得到的是finally区段中的返回值--这常常又与程序编写的初衷相背。

总结

以上是生活随笔为你收集整理的final, finally, finalize 的区别的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。