使用final的三个场景:data、method、class
一:Final data
永远不变的编译器常量
可以在执行期被初始化,而你却不想再改变它
如果一个数据既是static也是final,那么他会拥有一块无法改变的存储空间。
当final 用于对象引用时,这个引用不能再改变而指向另一个对象,但对象的内容可以被改变。
编译器强迫你一定的对所有finals执行赋值动作,或在其定义之时,或在每个构造函数中赋值。
二:Final methods
使用Final methods的原因有二:第一,锁住这个函数,不允许被其子类重写。第二,执行效率。
如果某个函数是private,它便不涵括与base class的接口中,它只不过是隐藏在class内的某段程序代码,而恰好具有那个名字罢了。
三:Final class
当你将某个class申明为final,等于申明你并不想继承此class,也不允许别人这么做。