简述
此文是对 第3讲 | 谈谈final、finally、 finalize有什么不同? 的学习
一些知识点/笔记点:
- final 用来修饰类、方法、变量
- final 修饰的 class 代表不可以继承扩展
- final 的变量是不可以修改的
- final 的方法也是不可以重写的(override)
- finally 用于 try-finally 或者 try-catch-finally
- finalize 是基础类 java.lang.Object 的一个方法,目的是保证对象在被垃圾收集前完成特定资源的回收。JDK 9 已经不用了。
try {
// do something
System.exit(1);
} finally{
System.out.println(“Print from finally”);
}
- 这里的 finally 不会被执行到
- 实现 immutable 类的方法:
将 class 自身声明为 final,这样别人就不能扩展来绕过限制了。
将所有成员变量定义为 private 和 final,并且不要实现 setter 方法。
通常构造对象时,成员变量使用深度拷贝来初始化,而不是直接赋值,这是一种防御措施,因为你无法确定输入对象不被其他人修改。
如果确实需要实现 getter 方法,或者其他可能会返回内部状态的方法,使用 copy-on-write 原则,创建私有的 copy。
关于 setter/getter 方法,很多人喜欢直接用 IDE 一次全部生成,建议最好是你确定有需要时再实现。
联想
- OC 里面关于垃圾回收
- OC 里面关于 immutable
网友评论