最近打算跳槽,读了一下极客时间的java核心技术36讲,感觉还不错,就此做个笔记(感兴趣的也可以点击购买链接http://stuq.com/a/100nJ,非广告推广)。本文所有内容,摘自https://time.geekbang.org/column/article/6906笔记,侵删
简要介绍
final:可以修饰类,方法,变量。修饰的类不能继承,方法不能重写,变量不能更改
finally:保证重点代码一定执行,经常用于try-catch语句,最后关闭连接等操作
finalize:保证对象被回收之前完成特定资源的回收,在java9中已经废弃掉了,因为无法保证它的执行时间,利用try-catch-finally是比较好的回收资源处理机制,如果还需要其他的,可以考虑使用cleaner
final
final修饰的对象不是Immutable(不可变对象),举个例子:
final List<String> list = new ArrayList();
list.add("aa");
list.add("bb");
List<String> immutableList = List.of("aa");
immutableList.add("bb")
final修饰的list只是引用,不被赋值。不会影响到对象的行为,而下面的immutableList,后面添加的"bb"不回被加入到集合当中。要想真正实现对象不可变要注意一下几点:
1.类要用final修饰
2.成员变量定义为private和final,而且不要实现setter方法
3.如果在构造函数中成员变量,要进行深度拷贝
finalize
finalize的执行适合垃圾收集关联在一起的,一旦实现了非空的finalize方法,就会导致相应对象回收程指数级变慢
finally
列几个 fianlly 不会被执行的情况:
try-cach 异常退出。
try{
system.exit(1)
}finally{
print(abc)
}无限循环
try{
while(ture){
print(abc)
}
}finally{
print(abc)
}线程被杀死
当执行 try,finally 的线程被杀死时。finally 也无法执行。
总结
1,不要在 finally 中使用 return 语句。
2,finally 总是执行,除非程序或者线程被中断。