final
final修饰变量:对于final修饰的变量来说,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的,也就是说在对其初始化之后便不能再让其指向另一个对象。
注意:
对于普通实例变量,Java程序可以对它执行默认的初始化,也就是将实例变量的值指定为默认的初始值0或null,但对于final修饰的实例变量,则必须由程序员显示的赋予初始值。
public static final int a;//这里会报错,未给a赋初始值;
final修饰方法:final来修饰方法,那么表示该方法不能被重写,如果在父类中使用final 来修饰方法,那么该方法就被定义为private,即不可重写,即方法被私有化了。
注意:
用final修饰的方法不能被重写,但可以有多个重载。
//对于重写class father{public final void speek() {System.out.println("Father say");}}class son extends father{@Overridepublic void speek() {//speek会编译报错System.out.println("sun say");}}//对于重载class father{public final void speek() {System.out.println("Father say");}static void speek(int a) {System.out.println(a);}public static void main(String[] args) {father.speek(1);}}//编译正确:输出1
3.final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类
总结:
final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。