fianl,finally,finalize的区别

以下内容主要总结或摘录自《java编程思想》

final,finally,finalize其实是三个完全不同的概念,表格可以很清楚的看出。

final finally finalize
final用来修饰对象、方法或类,表示“不可改变的” finally通常用于异常处理,表示无论异常是否被抛出,finally修饰的代码块总被执行 finalize用于垃圾回收处理
keyword block method

1. final

以下谈论了3种使用final的情况:数据、方法和类。

  • final数据
    许多编程语言都有某种方法,来想编译器告知一块数据是恒定不变的:

    1. 一个永不改变的编译时常量
    2. 一个在运行时被初始化的值,而你不希望它被改变

    一个既是static有时final的域只占据一段不能改变的储存空间。
    当对象引用而不是基本类型应用final时,其含义会有点令人迷惑。一旦引用被初始化指向某一个对象,就无法再把它改为指向拎一个对象,然而,对象其自身却是可以被修改的,java并未提供使任何对象恒定不变的途径(但可以自己编写类以取得使对象恒定不变的效果),这一特性同样适用于数组,它也是对象。

  • final方法
    使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义。过去建议使用final方法的第二个原因是效率,现在已经不需要使用final方法进行优化了。
    final和private关键字
    类中所有的private方法都隐式地指定为是final的。由于无法取用private方法,所以也就无法覆盖它。可以对private方法添加final修饰词,但这并不能给该方法增加任何额外的意义。

  • final
    当将某个类的整体定义为final时(通过将关键字final置于它的定义前),就表示你不打算继承该类,而且也不允许别人这样做。换句话说,你不希望它有子类。
    final类中的任何方法也都隐式指定为final,因为禁止继承,所以也无法覆盖它们。

2. finally

finally的定义非常直接,无论异常是否被抛出,finally子句总能执行。
对于没有垃圾回收和析构函数自动调用机制的语言来说,finally非常重要。它能使程序员保证:无论try块里发生了什么,内存总能得到释放。但java有垃圾回收机制,所以内存释放不再是问题。而且,java也没有析构函数可以调用。那么java什么时候使用finally呢?
当要把除内存之外的资源恢复到它们的初始状态时,就要用到final子句。这种分需要清理的资源包括:已经打开的文件或网络连接,在屏幕上画的图形,甚至可以是外部世界的某个开关。

3. finalize

finalize方法书上写的比较隐晦,主要用于垃圾回收时使用,能得到的结论是,作为小菜鸟尽量不需要使用finalize,研究java垃圾回收机制时再去进行深入理解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,785评论 18 399
  • 1、.java源文件: 一个以”.java“为后缀的源文件:只能有一个与文件名相同的类,可以包含其他类。 2、类方...
    Hughman阅读 1,546评论 1 9
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,145评论 0 62
  • 天下着雨,我提着便当盒冲进雨中,头也不回的出了家门,不想背起那沉甸甸的书包,不想看到那堆积如山的注会资料,我又一次...
    飞翔的饼阅读 305评论 4 2
  • 生活的意义在于奉献,在于对他人产生兴趣和相互合作。只有那些对他人产生兴趣而又决心要对社会有所贡献的人,才能使自己鼓...
    江南礼仪形象阅读 340评论 0 0