final关键字可以修饰类,修饰属性以及方法
修饰类:表示该类不能被继承
修饰方法:修饰的方法不能被重写,即使该方法所在的类被继承,也只能使用父类的方法,不能再在子类中重新写被final修饰的方法
修饰属性:修饰后的属性是常量,创建时需要对其赋值,赋值后值不能改变
final一般在修饰属性时有两种方式
如下:
final int count = 10;//第一种
final int num;//第二种
public Test(int num){
this.num = num;
}
第一种方式是在初始化时就将值赋值给变量
第二种方式则可以在创建对象时给变量进行初始化
一般第一种方式在创建对象时其值不能进行改变,所以导致在堆内存当中每一次创建的不同对象的值都是相同的,为了减少对内存的使用,通常在第一种修饰方式前加static,变为static final直接在类加载时加载变量从而使变量只有一份存储在栈内存当中,减少堆内存的占用。
第二种方式由于在声明变量时没有为变量赋值,所以必须采用构造方法在创建对象时为其初始化一个值,否则就会报错,所以第二种方法相当于还有一次给final修饰的属性进行赋值的机会。