源码
package com.Final;
public class Final02 {
public static void main(String[] args) {
CC cc = new CC();
EE ee = new EE();
ee.cal();
}
}
class AA{
/*
1. 定义时 如public final double TAX_RATE = 0.08;
2. 在构造器中
3. 在代码块中
*/
public final double TAX_RATE = 0.08;//1. 定义时赋值
public final double TAX_RATE2;
public final double TAX_RATE3;
public AA() {//2. 在构造器中赋值 TAX_RATE2 = 1.1; } {//3. 在代码块中赋值 TAX_RATE3 = 8.8; }
}
class BB{
/*
如果final修饰的属性是静态的 则初始化的位置只能是
1. 定义时 2. 在静态代码块中 不能在构造器中赋值
*/
public static final double TAX_RATE = 99.9;
public static final double TAX_RATE2;
static { TAX_RATE2 = 3.3; }
}
//final类不能继承 但是可以实例化对象
final class CC{}
//如果类不是final类 但是含有final方法 则该方法虽然不嫩重写 但是可以被继承
//即 仍然遵守继承的机制
class DD{
public final void cal(){
System.out.println(“cal()方法”);
}
}
class EE extends DD{}
源码
package com.Final;
public class FinalDetail {
public static void main(String[] args) {
System.out.println(BBB.num);
}
}
final class AAA{
//一般来说 如果一个类已经是final类了 据没有必要再将方法修饰成final方法了
//public final void cry(){}
}
//final 和 static往往搭配使用 效率更高 不会导致类加载 底层编译器做了优化处理
class BBB{
public final static int num = 10000;//final 和 static 位置可以调换
static {
System.out.println(“BBB 静态代码块被执行”);
}
}