packagecom.hspedu.final_;publicclassFinal01{publicstaticvoidmain(String[] args){E e =newE();//e.TAX_RATE = 0.09;}}//如果我们要求 A 类不能被其他类继承//可以使用 final 修饰 A 类finalclassA{}//class B extends A {}classC{//如果我们要求 hi 不能被子类重写//可以使用 final 修饰 hi 方法publicfinalvoidhi(){}}classDextendsC{// @Override// public void hi() {// System.out.println("重写了 C 类的 hi 方法..");// }}//当不希望类的的某个属性的值被修改,可以用 final 修饰classE{publicfinaldoubleTAX_RATE=0.08;//常量}//当不希望某个局部变量被修改, 可以使用 final 修饰classF{publicvoidcry(){//这时, NUM 也称为 局部常量finaldoubleNUM=0.01;//NUM = 0.9;System.out.println("NUM="+NUM);}}
packagecom.hspedu.final_;publicclassFinalDetail01{publicstaticvoidmain(String[] args){CC cc =newCC();newEE().cal();}}classAA{/*1. 定义时: 如 public final double TAX_RATE=0.08;2. 在构造器中3. 在代码块中*/publicfinaldoubleTAX_RATE=0.08;//1.定义时赋值publicfinaldoubleTAX_RATE2;publicfinaldoubleTAX_RATE3;publicAA(){//构造器中赋值TAX_RATE2=1.1;}{//在代码块赋值TAX_RATE3=8.8;}}classBB{/*如果 final 修饰的属性是静态的, 则初始化的位置只能是1 定义时 2 在静态代码块 不能在构造器中赋值。*/publicstaticfinaldoubleTAX_RATE=99.9;publicstaticfinaldoubleTAX_RATE2;static{TAX_RATE2=3.3;}}//final 类不能继承, 但是可以实例化对象finalclassCC{}//如果类不是 final 类, 但是含有 final 方法, 则该方法虽然不能重写, 但是可以被继承//即, 仍然遵守继承的机制.classDD{publicfinalvoidcal(){System.out.println("cal()方法");}}classEEextendsDD{}
packagecom.hspedu.final_;publicclassFinalDetail02{publicstaticvoidmain(String[] args){System.out.println(BBB.num);//包装类,String 是 final 类, 不能被继承}}//final 和 static 往往搭配使用, 效率更高, 不会导致类加载.底层编译器做了优化处理classBBB{publicfinalstaticint num =10000;static{System.out.println("BBB 静态代码块被执行");}}finalclassAAA{//一般来说, 如果一个类已经是 final 类了, 就没有必要再将方法修饰成 final 方法//public final void cry() {}}