packagecom.hspedu.final_;publicclassFinal01{publicstaticvoidmain(String[] args){E e =newE();//e.TAX_RATE = 0.09;}}//如果我們要求 A 類(lèi)不能被其他類(lèi)繼承//可以使用 final 修飾 A 類(lèi)finalclassA{}//class B extends A {}classC{//如果我們要求 hi 不能被子類(lèi)重寫(xiě)//可以使用 final 修飾 hi 方法publicfinalvoidhi(){}}classDextendsC{// @Override// public void hi() {// System.out.println("重寫(xiě)了 C 類(lèi)的 hi 方法..");// }}//當(dāng)不希望類(lèi)的的某個(gè)屬性的值被修改,可以用 final 修飾classE{publicfinaldoubleTAX_RATE=0.08;//常量}//當(dāng)不希望某個(gè)局部變量被修改, 可以使用 final 修飾classF{publicvoidcry(){//這時(shí), NUM 也稱(chēng)為 局部常量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. 定義時(shí): 如 public final double TAX_RATE=0.08;2. 在構(gòu)造器中3. 在代碼塊中*/publicfinaldoubleTAX_RATE=0.08;//1.定義時(shí)賦值publicfinaldoubleTAX_RATE2;publicfinaldoubleTAX_RATE3;publicAA(){//構(gòu)造器中賦值TAX_RATE2=1.1;}{//在代碼塊賦值TAX_RATE3=8.8;}}classBB{/*如果 final 修飾的屬性是靜態(tài)的, 則初始化的位置只能是1 定義時(shí) 2 在靜態(tài)代碼塊 不能在構(gòu)造器中賦值。*/publicstaticfinaldoubleTAX_RATE=99.9;publicstaticfinaldoubleTAX_RATE2;static{TAX_RATE2=3.3;}}//final 類(lèi)不能繼承, 但是可以實(shí)例化對(duì)象finalclassCC{}//如果類(lèi)不是 final 類(lèi), 但是含有 final 方法, 則該方法雖然不能重寫(xiě), 但是可以被繼承//即, 仍然遵守繼承的機(jī)制.classDD{publicfinalvoidcal(){System.out.println("cal()方法");}}classEEextendsDD{}
packagecom.hspedu.final_;publicclassFinalDetail02{publicstaticvoidmain(String[] args){System.out.println(BBB.num);//包裝類(lèi),String 是 final 類(lèi), 不能被繼承}}//final 和 static 往往搭配使用, 效率更高, 不會(huì)導(dǎo)致類(lèi)加載.底層編譯器做了優(yōu)化處理classBBB{publicfinalstaticint num =10000;static{System.out.println("BBB 靜態(tài)代碼塊被執(zhí)行");}}finalclassAAA{//一般來(lái)說(shuō), 如果一個(gè)類(lèi)已經(jīng)是 final 類(lèi)了, 就沒(méi)有必要再將方法修飾成 final 方法//public final void cry() {}}