final
final修饰类变量:
必须在静态初始化块或者声明该类变量时指定初始值,并且且必须在这两个方式中选一个。
final修饰实例变量:
必须在非静态初始化块或者声明该实例变量时指定初始值,并且且必须在这两个方式中选一个。
final修饰局部变量:
系统不会对局部变量进行初始化,局部变量必须显式初始化,所以final修饰局部变量时,既可以指定初始值,也可以不指定。不指定则可以在后面代码中对其赋值,只能一次,不能重复。
final修饰基本类型变量:
不能对基本类型变量重新赋值,不可变。
final修饰引用类型变量:
保证了引用类型变量保存的地址不变,即一直引用同一个对象,但这个对象可以改变。
final修饰变量成为宏变量:
声明变量时指定初始值为直接量,被赋值的表达式只是基本的算术运算或者字符串连接运算,没有访问普通变量,则直接当成宏变量,即变量不存在,直接使用赋值的内容。
final修饰方法:
final修饰的方法不可被重写。Object类里的getClass()方法就用了final修饰。
final修饰类:
final修饰的类不可以有子类。java.lang.Math就是final类。
总结:
final的变量的值不能被改变。(包括形参)
final的方法不能被重写。
final的类不能被继承。