基本介绍
注意事项
final修饰不同东西
属性:相当于常量,需要赋初值(构造器(除static)、代码块、定义时)。
构造器不可以是静态的,因为构造器中隐含了super和this。
类:不可继承。
方法:不可重写,但可继承。因为不可以重写的特质不可以修饰构造方法。
final和static搭配效率高是因为:不会导致类加载。
但是不是说,final修饰后相当于常量,赋初值后不可修改吗?
有关一点思考:
public class FinalExercise01 {
public static void main(String[] args) {
Circle circle = new Circle(2.4);
double ans = circle.calculateS();
System.out.println(ans);
Circle circle1 = new Circle();
circle1.radius = 2.4;
ans = circle1.calculateS();
System.out.println(ans);
}
}
class Circle{
public double radius;
private final double PI ;
public Circle(){
PI = 2;
}
public Circle(double radius) {
this.radius = radius;
PI = 3.14;
}
public double calculateS(){
return PI * radius * radius;
}
public void print(){
System.out.println(PI);
}
}
如上代码最终可以得出,虽然final修饰的属性是常量,但由于没有static修饰时,不同对象都有一个final值,所以此时PI的值不唯一。
但若加上static修饰,赋初值只可在静态中赋值,此时PI全类仅有唯一实例。