Java語言提供兩種異常處理機(jī)制:捕獲異常和聲明拋棄異常;
濟(jì)寧網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項目制作,到程序開發(fā),運(yùn)營維護(hù)。成都創(chuàng)新互聯(lián)公司自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運(yùn)維經(jīng)驗,來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)公司。
1)捕獲異常:在Java程序運(yùn)行過程中系統(tǒng)得到一個異常對象是,它將會沿著方法的調(diào)用棧逐層回溯,尋找處理這一異常的代碼。找到能夠處理這種類型異常的方法后,運(yùn)行時系統(tǒng)把當(dāng)前異常交給這個方法處理;如果找不到可以捕獲異常的方法,則運(yùn)行時系統(tǒng)將終止,相應(yīng)的Java程序也將退出。捕獲異常是通過try-catch-finally語句實(shí)現(xiàn)的。語法為:
try{
...
}catch(ExceptionName1 e){
...
}catch(ExceptionName2 e){
...
}
...
}finally{
...
}
2)聲明拋棄異常:當(dāng)Java程序運(yùn)行時系統(tǒng)得到一個異常對象時,如果一個方法并不知道如何處理所出現(xiàn)的異常,則可在方法聲明時,聲明拋棄異常。聲明拋棄異常是在一個方法聲明中的throws子句中指明的。如:
public int read() throws IOException{
...
}
其中throws IOException就是聲明拋棄異常,throws后可以跟多個異常類型。
1.try和catch語句
●將要處理的代碼放入try塊中,然后創(chuàng)建相應(yīng)的catch塊的列表。如果生成都異常與catch中提到的相匹配,那么catch條件中的塊語句就被執(zhí)行。try塊后可能有許多catch塊,每個都處理不同的異常。每個catch中的參數(shù)都是Exception的子類。
2.finally語句
●finally語句定義一個總是執(zhí)行的代碼,而不考慮異常是否被捕獲。
3.throw引起一個異常
●調(diào)用申明拋出異常
public class Test{
static void MethodA() throws ArrayIndexOutOfBoundsException{
int a[] = {1, 2, 3};
for (int i = 0; i 4; i++) {
System.out.println(a[i]);
}
}
public static void main(String args[]){
try {
MethodA();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}
}
}
●throw語句強(qiáng)制拋出異常
public class Test{
public static void main(String args[]){
try {
throw new ArrayIndexOutOfBoundsException();
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println(e);
}
}
}
Java通過面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良好的接口。
在Java中,每個異常都是一個對象,它是Throwable類或其子類的實(shí)例。當(dāng)一個方法出現(xiàn)異常后便拋出一個異常對象,該對象中包含有異常信息,調(diào)用這個對象的方法可以捕獲到這個異常并可以對其進(jìn)行處理。
Java的異常處理是通過5個關(guān)鍵詞來實(shí)現(xiàn)的:try、catch、throw、throws和finally。一般情況下是用try來執(zhí)行一段程序,如果系統(tǒng)會拋出(throw)一個異常對象,可以通過它的類型來捕獲(catch)它,或通過總是執(zhí)行代碼塊(finally)來處理;try用來指定一塊預(yù)防所有異常的程序;
catch子句緊跟在try塊后面,用來指定你想要捕獲的異常的類型;
throw語句用來明確地拋出一個異常;
throws用來聲明一個方法可能拋出的各種異常(當(dāng)然聲明異常時允許無病呻吟);
finally為確保一段代碼不管發(fā)生什么異常狀況都要被執(zhí)行。
Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點(diǎn),還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強(qiáng)大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實(shí)現(xiàn)了面向?qū)ο罄碚摚试S程序員以優(yōu)雅的思維方式進(jìn)行復(fù)雜的編程
異常就是可預(yù)測但是又沒辦法消除的一種錯誤。所以程序員為了在程序當(dāng)中不發(fā)生這樣的錯誤會將容易發(fā)生異常的代碼用try
catch進(jìn)行處理,或者通過throws將異常向上拋出,由上一級進(jìn)行接收并處理。
如果發(fā)生異常而不去處理,會導(dǎo)致程序中斷,也就是程序無法繼續(xù)運(yùn)行。
throws是獲取異常,throw是拋出異常,try是將會發(fā)生異常的語句括起來,從而進(jìn)行異常的處理,catch是如果有異常就會執(zhí)行他里面的語句,而finally不論是否有異常都會進(jìn)行執(zhí)行的語句。
throw 僅用于方法定義后面,指示該方法可能會拋出什么異常,使用該方法的方法必須處理該異常,或者再次拋出。
throws 用于當(dāng)程序判斷發(fā)生異常時,用該語句拋出異常,或處理異常時再次拋出異常。
//下面三個關(guān)鍵字就是處理異常
try {
//這里放可能會發(fā)生異常的語句
} catch(Exception e) {
//這里處理異常
} finally {
//這里的語句必然會得到執(zhí)行,不管異常發(fā)省與否,
//用于關(guān)閉數(shù)據(jù)庫,關(guān)閉連接等收尾操作(非必要)
}
java異常的一個簡單例子,比如我有一個除法方法
public int divide(int a, int b) {
return a / b;
}
但是這就有一個問題,當(dāng)b是0時,程序會報錯。
如果引入異常,改成這樣
public int divide(int a, int b) throws Exception {
if (b == 0) {
throw new Exception("b = 0");
}
return a / b;
}
那么調(diào)用端該怎么用呢
public class ExceptionTest {
public static void main(String[] args) {
ExceptionTest et = new ExceptionTest();
try {
System.out.println(et.divide(12, 0));
} catch (Exception e) {
System.out.println("0不能做被除數(shù)");
}
}
public int divide(int a, int b) throws Exception {
if (b == 0) {
throw new Exception("b = 0");
}
return a / b;
}
}
程序可以繼續(xù)執(zhí)行,不會中斷。
1.檢查型異常,這樣的異常繼承于Excetpion,就是在編譯期間需要檢查,如果該異常被throw,那么在該異常所在的method后必須顯示的throws,調(diào)用該method的地方也必須捕獲該異常,否則編譯器會拋出異常.ejb里的RemoteException是一個這樣的異常.來源:考試大
2.運(yùn)行時異常,就是在運(yùn)行期間系統(tǒng)出現(xiàn)的異常,該類異常繼承于RuntimeException,該類異常在編譯時系統(tǒng)不進(jìn)行檢查,如NullPointerExcetpion,NumberFormatException.
3.系統(tǒng)錯誤,一般是JVM出現(xiàn)異常時拋出的異常,如OutofMemoryError,這樣的異常在J2EE開發(fā)中是不用關(guān)心的.考試大論壇
在J2EE開發(fā)中,檢查型異常被濫用以至于過一段時間程序員自己都看不懂拋出這樣的異常,.里面封裝的這些錯誤信息是干什么用的,更可怕的是有好多有用的信息找不到了.比如SQLException和RemoteException這樣的異常我們沒必要再進(jìn)行封裝,這樣的異常只對我們調(diào)試程序有用,而對客戶來說它就是一個”系統(tǒng)錯誤”而已.異常處理有一個簡單的原則,你什么時候需要封裝自己的檢查型異常?就是你很清楚自己拋出這個異常的用途時,比如用戶輸入用戶名和密碼要登錄,但用戶名和密碼不匹配,你就要定義一個檢查型異常,客戶端通過捕獲該異常,然后把相應(yīng)的錯誤信息反饋給客戶.而其它的自己未預(yù)期的錯誤或者異常比如SQLException,只需封裝到EJBException中,ejb container會把它的信息追加到RemoteException里,這樣客戶端捕獲RemoteException后把它寫到系統(tǒng)日志里,就很容易進(jìn)行調(diào)試。
Java 異常的處理
在 Java 應(yīng)用程序中,對異常的處理有兩種方式:處理異常和聲明異常。
處理異常:try、catch 和 finally
若要捕獲異常,則必須在代碼中添加異常處理器塊。這種 Java 結(jié)構(gòu)可能包含 3 個部分,
都有 Java 關(guān)鍵字。下面的例子中使用了 try-catch-finally 代碼結(jié)構(gòu)。
import java.io.*; public class EchoInputTryCatchFinally { public static void main(String args[]){ System.out.println(”Enter text to echo:”); InputStreamReader isr = new InputStreamReader(System.in); BufferedReader inputReader = new BufferedReader(isr); try{ String inputLine = inputReader.readLine(); System.out.println(”Read:” + inputLine); } catch(IOException exc){ System.out.println(”Exception encountered: ” + exc); } finally{ System.out.println(”End. “); } } 其中:
try 塊:將一個或者多個語句放入 try 時,則表示這些語句可能拋出異常。編譯器知道可能要發(fā)生異常,于是用一個特殊結(jié)構(gòu)評估塊內(nèi)所有語句。
catch 塊:當(dāng)問題出現(xiàn)時,一種選擇是定義代碼塊來處理問題,catch 塊的目的便在于此。catch 塊是 try 塊所產(chǎn)生異常的接收者。基本原理是:一旦生成異常,則 try 塊的執(zhí)行中止,JVM 將查找相應(yīng)的 JVM。
finally 塊:還可以定義 finally 塊,無論運(yùn)行 try 塊代碼的結(jié)果如何,該塊里面的代碼一定運(yùn)行。在常見的所有環(huán)境中,finally 塊都將運(yùn)行。無論 try 塊是否運(yùn)行完,無論是否產(chǎn)生異常,也無論是否在 catch 塊中得到處理,finally 塊都將執(zhí)行。
try-catch-finally 規(guī)則:
必須在 try 之后添加 catch 或 finally 塊。try 塊后可同時接 catch 和 finally 塊,但至少有一個塊。
必須遵循塊順序:若代碼同時使用 catch 和 finally 塊,則必須將 catch 塊放在 try 塊之后。
catch 塊與相應(yīng)的異常類的類型相關(guān)。
一個 try 塊可能有多個 catch 塊。若如此,則執(zhí)行第一個匹配塊。
可嵌套 try-catch-finally 結(jié)構(gòu)。
在 try-catch-finally 結(jié)構(gòu)中,可重新拋出異常。
除了下列情況,總將執(zhí)行 finally 做為結(jié)束:JVM 過早終止(調(diào)用 System.exit(int));在 finally 塊中拋出一個未處理的異常;計算機(jī)斷電、失火、或遭遇病毒攻擊。
聲明異常
若要聲明異常,則必須將其添加到方法簽名塊的結(jié)束位置。下面是一個實(shí)例:
public void errorProneMethod(int input) throws java.io.IOException { //Code for the method,including one or more method //calls that may produce an IOException } 這樣,聲明的異常將傳給方法調(diào)用者,而且也通知了編譯器:該方法的任何調(diào)用者必須遵守處理或聲明規(guī)則。聲明異常的規(guī)則如下:
必須聲明方法可拋出的任何可檢測異常(checked exception)。
非檢測性異常(unchecked exception)不是必須的,可聲明,也可不聲明。
調(diào)用方法必須遵循任何可檢測異常的處理和聲明規(guī)則。若覆蓋一個方法,則不能聲明與覆蓋方法不同的異常。聲明的任何異常必須是被覆蓋方法所聲明異常的同類或子類。
當(dāng)前標(biāo)題:JAVA代碼QQ異常處理 java程序異常處理
分享路徑:http://chinadenli.net/article22/hgoejc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、靜態(tài)網(wǎng)站、軟件開發(fā)、面包屑導(dǎo)航、企業(yè)網(wǎng)站制作、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)