李文轩 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
来做资源回收
网友评论