● final:用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,被其修飾的類不可繼承。
● finally:異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。
● finalize:Object 類的一個(gè)方法,所以Java對(duì)象都有這個(gè)方法,當(dāng)某Java對(duì)象沒(méi)有更多的引用指向的時(shí)候,會(huì)被垃圾回收器回收,該對(duì)象被回收之前,由垃圾回收器來(lái)負(fù)責(zé)調(diào)用此方法,通常在該方法中進(jìn)行回收前的準(zhǔn)備工作。該方法更像是一個(gè)對(duì)象生命周期的臨終方法,當(dāng)該方法被系統(tǒng)調(diào)用則代表該對(duì)象即將“死亡”,但是需要注意的是,我們主動(dòng)行為上去調(diào)用該方法并不會(huì)導(dǎo)致該對(duì)象“死亡”,這是一個(gè)被動(dòng)的方法(其實(shí)就是回調(diào)方法),不需要我們調(diào)用。
按照異常需要處理的時(shí)機(jī)分為編譯時(shí)異常(也叫受控異常)也叫 CheckedException 和運(yùn)行時(shí)異常(也叫非受控異常)也叫 UnCheckedException。Java認(rèn)為Checked異常都是可以被處理的異常,所以Java程序必須顯式處理Checked異常。如果程序沒(méi)有處理Checked 異常,該程序在編譯時(shí)就會(huì)發(fā)生錯(cuò)誤無(wú)法編譯。這體現(xiàn)了Java 的設(shè)計(jì)哲學(xué):沒(méi)有完善錯(cuò)誤處理的代碼根本沒(méi)有機(jī)會(huì)被執(zhí)行。對(duì)Checked異常處理方法有兩種:
● 第一種:當(dāng)前方法知道如何處理該異常,則用try...catch塊來(lái)處理該異常。
● 第二種:當(dāng)前方法不知道如何處理,則在定義該方法時(shí)聲明拋出該異常。
運(yùn)行時(shí)異常只有當(dāng)代碼在運(yùn)行時(shí)才發(fā)行的異常,編譯的時(shí)候不需要try…catch。Runtime如除數(shù)是0和數(shù)組下標(biāo)越界等,其產(chǎn)生頻繁,處理麻煩,若顯示申明或者捕獲將會(huì)對(duì)程序的可讀性和運(yùn)行效率影響很大。所以由系統(tǒng)自動(dòng)檢測(cè)并將它們交給缺省的異常處理程序。當(dāng)然如果你有處理要求也可以顯示捕獲它們。
Error類和Exception類的父類都是Throwable類,他們的區(qū)別如下:
● Error類一般是指與虛擬機(jī)相關(guān)的問(wèn)題,如系統(tǒng)崩潰,虛擬機(jī)錯(cuò)誤,內(nèi)存空間不足,方法調(diào)用棧溢出等。對(duì)于這類錯(cuò)誤的導(dǎo)致的應(yīng)用程序中斷,僅靠程序本身無(wú)法恢復(fù)和預(yù)防,遇到這樣的錯(cuò)誤,建議讓程序終止。
● Exception類表示程序可以處理的異常,可以捕獲且可能恢復(fù)。遇到這類異常,應(yīng)該盡可能處理異常,使程序恢復(fù)運(yùn)行,而不應(yīng)該隨意終止異常。
●Exception類又分為未檢查異常(UnCheckedException)和受檢查的異常(CheckedException)。運(yùn)行時(shí)異常ArithmeticException,IllegalArgumentException編譯能通過(guò),但是一運(yùn)行就終止了,程序不會(huì)處理運(yùn)行時(shí)異常,出現(xiàn)這類異常,程序會(huì)終止。而受檢查的異常,要么用 try…catch 捕獲,要么用throws字句聲明拋出,交給它的父類處理,否則編譯不會(huì)通過(guò)。
1. public int getNum() {
2. try {
3. int a = 1 / 0;
4. return 1;
5. } catch (Exception e) {
6. return 2;
7. } finally {
8. return 3;
9. }
10.}
代碼走到第3行的時(shí)候遇到了一個(gè)MathException,這時(shí)第4行的代碼就不會(huì)執(zhí)行了,代碼直接跳轉(zhuǎn)到catch語(yǔ)句中,走到第 6 行的時(shí)候,異常機(jī)制有一個(gè)原則:如果在catch中遇到了return或者異常等能使該函數(shù)終止的話那么有finally就必須先執(zhí)行完finally代碼塊里面的代碼然后再返回值。因此代碼又跳到第8行,可惜第8行是一個(gè)return語(yǔ)句,那么這個(gè)時(shí)候方法就結(jié)束了,因此第6行的返回結(jié)果就無(wú)法被真正返回。如果finally僅僅是處理了一個(gè)釋放資源的操作,那么該道題最終返回的結(jié)果就是2。因此上面返回值是3。
Java對(duì)異常進(jìn)行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為 java.lang.Throwable,Throwable下面又派生了兩個(gè)子類:Error和Exception。
Error表示應(yīng)用程序本身無(wú)法克服和恢復(fù)的一種嚴(yán)重問(wèn)題。
Exception表示程序還能夠克服和恢復(fù)的問(wèn)題,其中又分為系統(tǒng)異常和普通異常。
系統(tǒng)異常是軟件本身缺陷所導(dǎo)致的問(wèn)題,也就是軟件開(kāi)發(fā)人員考慮不周所導(dǎo)致的問(wèn)題,軟件使用者無(wú)法克服和恢復(fù)這種問(wèn)題,但在這種問(wèn)題下還可以讓軟件系統(tǒng)繼續(xù)運(yùn)行或者讓軟件死掉,例如,數(shù)組下標(biāo)越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉(zhuǎn)換異常(ClassCastException)。
普通異常是運(yùn)行環(huán)境的變化或異常所導(dǎo)致的問(wèn)題,是用戶能夠克服的問(wèn)題,例如,網(wǎng)絡(luò)斷線,硬盤(pán)空間不夠,發(fā)生這樣的異常后,程序不應(yīng)該死掉。
Java為系統(tǒng)異常和普通異常提供了不同的解決方案,編譯器強(qiáng)制普通異常必須try..catch處理或用throws聲明繼續(xù)拋給上層調(diào)用方法處理,所以普通異常也稱為checked異常,而系統(tǒng)異常可以處理也可以不處理,所以編譯器不強(qiáng)制用try..catch處理或用throws聲明,所以系統(tǒng)異常也稱為unchecked異常。
● java.lang.NullPointerException 空指針異常;出現(xiàn)原因:調(diào)用了未經(jīng)初始化的對(duì)象或者是不存在的對(duì)象。
● java.lang.ClassNotFoundException 指定的類找不到;出現(xiàn)原因:類的名稱和路徑加載錯(cuò)誤;通常都是程序試圖通過(guò)字符串來(lái)加載某個(gè)類時(shí)可能引發(fā)異常。
● java.lang.NumberFormatException 字符串轉(zhuǎn)換為數(shù)字異常;出現(xiàn)原因:字符型數(shù)據(jù)中包含非數(shù)字型字符。
● java.lang.IndexOutOfBoundsException 數(shù)組角標(biāo)越界異常,常見(jiàn)于操作數(shù)組對(duì)象時(shí)發(fā)生。
● java.lang.IllegalArgumentException 方法傳遞參數(shù)錯(cuò)誤。
● java.lang.ClassCastException 數(shù)據(jù)類型轉(zhuǎn)換異常。
● java.lang.NoClassDefFoundException 未找到類定義錯(cuò)誤。
● SQLException SQL 異常,常見(jiàn)于操作數(shù)據(jù)庫(kù)時(shí)的 SQL 語(yǔ)句錯(cuò)誤。
● java.lang.InstantiationException 實(shí)例化異常。
● java.lang.NoSuchMethodException 方法不存在異常。
● throw:
throw 語(yǔ)句用在方法體內(nèi),表示拋出異常,由方法體內(nèi)的語(yǔ)句處理。
throw是具體向外拋出異常的動(dòng)作,所以它拋出的是一個(gè)異常實(shí)例,執(zhí)行throw一定是拋出了某種異常。
● throws:
throws語(yǔ)句是用在方法聲明后面,表示如果拋出異常,由該方法的調(diào)用者來(lái)進(jìn)行異常的處理。
throws主要是聲明這個(gè)方法會(huì)拋出某種類型的異常,讓它的使用者要知道需要捕獲的異常的類型。
● throws表示出現(xiàn)異常的一種可能性,并不一定會(huì)發(fā)生這種異常。