1、final关键字可应用于类、方法或变量。一般来说,final关键字的使用限制了进一步的扩展或修改。
2、final类不能被继承。
3、final方法不可以在子类中被重写。
注意:
由于private和static方法不能在子类中被重写,因此他们总是隐式地为final。
将方法变为final有三大好处
1.可以显式地防止子类中的方法被重写
2.final方法会告诉编译器对于final方法的调用不需要动态绑定,这会让代码变得略微高效一些。静态绑定总是比动态绑定高效,因为在动态绑定中,运行时需要解析方法调用
3.能够带来更好的效率。将方法标记为final可以让编译器将所有对final的方法的调用转变为内联调用。
4、final变量
使用final关键字声明的变量被认为是常量。任何在程序中试图改变常量值的操作,都会导致编译时错误;
final变量不需要在声明时初始化,程序也可以在声明后的其他地方初始化final变量。不过,这样的初始化必须只执行一次。声明时未初始化的final变量叫做空缺final变量。
注意:final变量为final关键字的使用提供了更多的灵活性
警告: 空缺final变量必须在构造函数中进行初始化,因为空缺final变量只在对象生命周期中调用一次。如果final变量在构造函数中初始化,那么必须在所有的重载构造函数中初始化。
5、final类变量
形如final 类名 变量名=new 类名() ;
如 final Point POINT=new Point(0,0); //参数为坐标值x,y
final类变量一旦被初始化,就不能被把其他对象赋值给该类对象,final对象总是指向初始化时固定的对象,但是可以修改其属性值。
如 POINT=new Point(1,2);//非法
PONIT.setX(1);
POINT.setY(1); //合法,前提是x,y不是常量(不是final变量)