李文轩 2019-03-17
声明:这是本人学习极客时间的Java核心36讲的笔记,有侵权请联系我。
final:
- 修饰 类、方法、变量
-
final修饰的class不可以继承扩展 -
final修饰的 变量不可被改变 -
final修饰的 方法不可被重写(override)
用 final 的好处和目的:
-
将方法或者类申明为
final,明确此处不得修改- 避免 API 使用这更改基础功能
-
将参数或者变量申明为
final,避免意外赋值- 保护只读数据
- 在并发编程中,有利于减少同步开销
-
不需要特别用来提升性能
final 不是 immutable:
-
final只限定引用不再被赋值,但对象行为不会被影响 - 如果要实现 immutable 的类:
- 将
class申明为final - 将变量定义为
final和private,也不要设置setter方法 - 通过深度拷贝来完成初始化(字节数组流,对象流),而不是直接赋值
- 如果实现
getter方法,使用copy-on-write原则,建立私有的copy
- 将
finally :
-
用于保证重点代码一定被执行的机制
-
通常用于异常处理机制中,不管如何,都要执行的代码
-
例外的是,
exit和 线程中断后,finally的代码将不会被执行实践:
-
try-catch-finally try-witch-resource
-
finalize :
- 基础类,
java.lang.Object的一个方法 - 现在已不推荐使用
- 目的为 保证对象在 gc 完成特定的资源回收
- 无法保证什么时候执行,执行是否符合预期
用java.lang.ref.Cleaner来代替finalize
-
Cleaner的实现利用流幻象引用(PhantomReference),即post-mortem清理机制 - 每个
Cleaner的操作都是独立的,有自己的运行线程,避免意外死锁。 - !!!但是不能依赖
Cleaner来做资源回收












网友评论