/* final关键字 可以修饰类、属性、方法和局部变量 1.当不希望类被继承时,可以用final修饰 2.当不希望父类的某个方法被子类覆盖(重写)时,可以用final关键字修饰 3.当不希望某类的某个属性值被修改时,可以用final修饰 4.当不希望某个局部变量被修改时,可以用final修饰 细节 1.final修饰的属性又叫常量,一般用XXX_XXX_XX命名 2.final修饰的属性在定义时,必须赋初值,且不能再修改,赋值可以在以下位置 定义时 public final double TAX_RATE = 0.06; 在构造器中 在代码块中 3.如果final修饰的属性是静态的,则初始化的位置只能是 定义时 在静态代码块中 不能在构造器中(类加载静态属性初始化,构造器创建对象才会被调用) 4.final类不能继承,但可以实例化对象 5.如果类不是final类,但含有final方法,该方法虽然不能重写,但仍可以继承 6.如果一个类已经是final类,就没有必要再将方法修饰成final方法 7.final不能修饰构造方法(构造器) 8.final和static往往搭配使用,效率更高,不会导致类加载 class Demo{ public final static int num = 999; } static{ System.out.println("Demo静态代码块被执行"); } //在main方法中,输出Demo.num,类不会被加载,因此静态代码块不执行 9.包装类(Integer,Double,Float,Boolean等都是final类),String也是final类,不能被继承 */ // 练1:编写计算圆形面积,要求为圆周率3.14 public class Final { public static void main(String[] args) { Circle circle = new Circle(5); System.out.println("面积=" + circle.calArea()); } } class Circle{ private double radius; //在定义时赋值 private final double PI; //= 3.14; public Circle(double radius) { this.radius = radius; //在构造器中赋值 //PI = 3.14; } { //在代码块中赋值 PI = 3.14; } public double calArea(){ return PI * radius * radius; } } // 练2:下列代码是否有误 class Test{ public int add(final int x){//正确,形参前用final是允许的 ++x;//错误,不能修改final x的值 return x + 1;//正确 } }