美文网首页
final,finally,finalize有什么不同?

final,finally,finalize有什么不同?

作者: 善思者_tin | 来源:发表于2020-01-20 16:43 被阅读0次

    一、概述

    final,finally是很常用的关键字,正确合理使用他们对提高程序效率很有帮助,现结合多年工作经验,总计如下。

    二、final关键字概述

    A:为什么会有final

    由于继承中有一个方法重写的现象,而有时候我们不想让子类去重写父类的方法.这对这种情况java就给我们提供了一个关键字: final

    B:final概述

    final关键字是最终的意思,可以修饰类,变量,成员方法。

    C:final修饰特点

    修饰类: 被修饰类不能被继承

    修饰方法: 被修饰的方法不能被重写

    修饰变量: 被修饰的变量不能被重新赋值,因为这个量其实是一个常量

    D:final关键字修饰局部变量 

    基本类型,是值不能被改变

    引用类型,是地址值不能被改变

    三、final,finally,finalize有什么不同?

    final可以修饰类,方法,变量

    final修饰类代表类不可以继承拓展

    final修饰变量表示变量不可以修改

    final修饰方法表示方法不可以被重写

    final 关键字深入理解

    可以将方法或者类声明为 final,这样就可以明确告知别人,这些行为是不许修改的。

    如果你关注过 Java 核心类库的定义或源码, 有没有发现java.lang 包下面的很多类,相当一部分都被声明成为final class?在第三方类库的一些基础类中同样如此,这可以有效避免 API 使用者更改基础功能,某种程度上,这是保证平台安全的必要手段。

    使用 final 修饰参数或者变量,也可以清楚地避免意外赋值导致的编程错误,甚至,有人明确推荐将所有方法参数、本地变量、成员变量声明成 final。

    final 变量产生了某种程度的不可变(immutable)的效果,所以,可以用于保护只读数据,尤其是在并发编程中,因为明确地不能再赋值 final 变量,有利于减少额外的同步开销,也可以省去一些防御性拷贝的必要。

    finalize 是基础类 java.lang.Object的一个方法

    它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9开始被标记为 deprecated。

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

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

    在以下4种特殊情况下,finally块不会被执行:

    1.在finally语句块中发生了异常。

    2.在前面的代码中用了System.exit()退出程序。

    3.程序所在的线程死亡。

    4.关闭CPU。

    四、应用场景总结

    final应用场景:

    常用final结合static修饰不可变的属性

    private final static Loggerlogger = Logger.getLogger(**.class);

    public static final String  TOKEN_KEY ="***";

    finally应用场景:

    finally关闭流操作:

    finally {// 使用finally块来关闭输出流、输入流

      try {

        if (in !=null) {

            in.close();

        }

    }catch (IOException ex) {

        ex.printStackTrace();

    }

    }

    finally {

    lock.unlock();//解锁

    }

    相关文章

      网友评论

          本文标题:final,finally,finalize有什么不同?

          本文链接:https://www.haomeiwen.com/subject/kcwjzctx.html