一.final关键字概述
1. 为何会有finaljava
因为继承中有一个方法重写的现象,而有时候咱们不想让子类去重写父类的方法.这对这种状况java就给咱们提供了一个关键字: final编程
2. final概述安全
final关键字是最终的意思,能够修饰类,变量,成员方法。并发
3. final修饰特色ide
- 修饰类: 被修饰类不能被继承
- 修饰方法: 被修饰的方法不能被重写
- 修饰变量: 被修饰的变量不能被从新赋值,由于这个量实际上是一个常量
4. final关键字修饰局部变量 线程
- 基本类型,是值不能被改变
- 引用类型,是地址值不能被改变
二. final,finally,finalize有什么不一样?
1. final能够修饰类,方法,变量设计
- final修饰类表明类不能够继承拓展
- final修饰变量表示变量不能够修改
- final修饰方法表示方法不能够被重写
2. finally则是Java保证重点代码必定要被执行的一种机制对象
可使用 try-finally 或者 try-catch-finally 来进行相似关闭 JDBC链接、保证 unlock 锁等动做。继承
3. finalize 是基础类 java.lang.Object的一个方法资源
它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制如今已经不推荐使用,而且在 JDK 9开始被标记为 deprecated。
4. final 关键字深刻理解
- 能够将方法或者类声明为 final,这样就能够明确告知别人,这些行为是不准修改的。
- 若是你关注过 Java 核心类库的定义或源码, 有没有发现java.lang 包下面的不少类,至关一部分都被声明成为final class?在第三方类库的一些基础类中一样如此,这能够有效避免 API 使用者更改基础功能,某种程度上,这是保证平台安全的必要手段。
- 使用 final 修饰参数或者变量,也能够清楚地避免意外赋值致使的编程错误,甚至,有人明确推荐将全部方法参数、本地变量、成员变量声明成 final。
- final 变量产生了某种程度的不可变(immutable)的效果,因此,能够用于保护只读数据,尤为是在并发编程中,由于明确地不能再赋值 final 变量,有利于减小额外的同步开销,也能够省去一些防护性拷贝的必要。
5. 在如下4种特殊状况下,finally块不会被执行:
- 在finally语句块中发生了异常。
- 在前面的代码中用了System.exit()退出程序。
- 程序所在的线程死亡。
- 关闭CPU。