final(终结器)可用来定义方法、属性和类。
一、final定义的类不能够被继承(既不能够有子类)
//错误示例
final class A {} class B extends A{}
二、final定义的方法不允许被子类所覆写
//错误示例 class A { public final void fun(){} } class B extends A { public void fun(){} }
三、final定义的属性不可更改,且必须在声明时赋值
//错误示例 class A { public final int NUMBER = 4; public final void fun(){ NUMBER = 3; } }
常量的标识符默认大写
四、总结
被final 关键字所声明过的引用将不能被再次改变。
对于基本数据类型,该引用为其值,及数据的值不允许改变;
而对于引用数据类型,该引用为其地址,地址不允许改变,但地址所指向的内容却依旧可以改变(如被final定义的对象依旧可以通过setter方法改变对象的属性)。
class A { private int num = 999; public void setNum(int num) { this.num = num; } public int getNum() { return num; } } public class B { final static A EXAMPLE = new A(); public static void main(String[] args) { //修改前 System.out.println(EXAMPLE.getNum()); //修改后 EXAMPLE.setNum(666); System.out.println(EXAMPLE.getNum()); } }
特殊的,String为引用数据类型,但其本身就是不可变的,故用final定以后就和基本数据类型一样了。