您現在的位置是:首頁 > 動作武俠首頁動作武俠

太簡單了!這套Java異常處理的總結,80%的人都沒看過

簡介}在定義方法時, 如果方法體中的某條語句有受檢異常需要預處理, 可以捕獲處理, 還可以丟擲處理在方法的定義位置透過throws關鍵字宣告丟擲異常, 在m2()定義時透過throws宣告的異常 就是受檢異常誰呼叫m2()方法

所有異常都必須捕獲嗎

上一篇是分享的是《Java類與類之間的關係、Java內部類》,這篇分享的是《Java異常簡介與Java異常處理》。

太簡單了!這套Java異常處理的總結,80%的人都沒看過

Java異常簡介

1。型別轉換異常:ClassCastException

2。算術異常: ArithmeticException

在java中, 把一些不正常現象進行了抽象, 形成了一些異常型別。

太簡單了!這套Java異常處理的總結,80%的人都沒看過

在Throwable類的getMessage()/printStackTrace()這兩個方法,所有的異常都有。

編譯時異常,也稱受檢異常是指在編譯前必須進行預處理, 並不是說這個異常在編譯階段發生,所有的異常都是在執行階段才可能發生。 就像樓道中必須有滅火器與消防栓, 如果沒有這些裝置, 就沒有安全證, 沒有這個安全證,企業就不能生產。 企業必須有火災的預處理措施, 火災現在並沒有發生。

編譯階段進行語法檢查, Java的語法有很多條, 其中一種語法是: 對於受檢異常必須進行預處理。

package com。wkcto。chapter02。demo01;/** * 執行時異常都是RuntimeException類的子類 * 不需要進行預處理, * 透過規範的程式碼進行規避 * */public class Test01 { public static void main(String[] args) { int x = 10; int y = 2;// divide(x, y); //10/2=5// divide(10, 0); //這一行產生了異常,導致了程式中斷, 程式不再繼續向下執行 divide22(x, y); divide22(10, 0); System。out。println(“main。。。。end。。。”); } //定義方法,計算兩個整數的商, 沒有判斷除數為0的情況 public static void divide( int num1, int num2) { int result = num1/num2; System。out。println( num1 + “/” + num2 + “=” + result); } //定義方法,計算兩個整數的商, 透過判斷除數為0避免出現算術異常 public static void divide22( int num1, int num2) { if ( num2 == 0 ) { System。out。println(“除數不能為0”); return ; //結束方法的執行 } int result = num1/num2; System。out。println( num1 + “/” + num2 + “=” + result); }}

package com。wkcto。chapter02。demo01;import java。io。FileInputStream;import java。io。FileNotFoundException;/** * 演示編譯時異常 * 受檢異常, 受控異常 * */public class Test02 { public static void main(String[] args) { //讀取d:/abc。txt檔案中的內容, 使用了FileInputStream類 FileInputStream fis = new FileInputStream(“d:/abc。txt”); //SUN在定義FileInputStream構造方法時, 透過 throws關鍵字聲明瞭FileNotFoundException異常, //這個異常就是受檢異常, 即在定義方法時, 透過throws宣告的異常 //受檢異常在編譯前必須進行預處理, 否則編譯語法報錯 }}

太簡單了!這套Java異常處理的總結,80%的人都沒看過

Java異常處理

● throws丟擲處理

try…catch捕獲處理

語法:

try{

對可能產生異常的程式碼進行檢視

try程式碼塊中的某條語句一旦產生了異常,程式就立即跳轉到catch子句執行, try程式碼塊後面的程式碼不再執行

try程式碼塊中, 可能會有多條語句有受檢異常需要預處理, 可以透過多個catch子句分別捕獲

}catch( 異常型別1 e1){

捕獲異常型別1的異常, 捕獲了異常,在開發階段, 一般的預處理方式就是把異常列印到螢幕上, 程式設計師可以根據異常資訊進行程式除錯

e1。printStackTrace(); //每個異常都有這個方法

}catch( 異常型別2 e2){

如果catch子句捕獲的異常有繼承關係, 如果想單獨對異常進行預處理, 應該先捕獲子異常, 再捕獲父異常, 或者直接捕獲一個父異常

}finally{

finally子句不管是否有異常產生,總是會執行

經常在finally子句中釋放系統資源

}

package com。wkcto。chapter02。demo01;import java。io。FileInputStream;import java。io。FileNotFoundException;import java。io。IOException;/** * 演示異常的捕獲處理 * 如果沒有捕獲異常, 系統會中斷, 對產生 的異常進行捕獲處理後, 程式不會中斷 ,會繼續向下執行 * 異常處理的作用: * 提高程式的健壯性, 魯棒性(Robust) * * */public class Test03 { public static void main(String[] args) { try{ FileInputStream fis = new FileInputStream(“d:/abc。txt”); //構造方法有受檢異常FileNotFoundException需要預處理 System。out。println(“在當前程式與指定的檔案之間建立了流通道, ”); fis。read(); //read()方法有受檢異常IOException需要預處理 System。out。println(“從檔案中讀取了一個位元組”); fis。close(); //close()方法有受檢異常IOException需要預處理 System。out。println(“檔案讀取完後,需要關閉流通道”); }catch (FileNotFoundException e) { // 捕獲檔案未找到異常 e。printStackTrace(); //開發時,一般把異常列印到螢幕上 //捕獲了產生的異常, 程式沒有中斷, 還繼續向下執行 }catch (IOException e) { // 捕獲IOException異常 // FileNotFoundException 繼承了 IOException, 如果需要單獨處理, 應該先捕獲子異常 ,再捕獲父異常 // 或者, 不需要單獨處理時, 直接捕獲父異常即可 } System。out。println(“main。。。end。。。。”); }}

finally子句總是會執行

package com。wkcto。chapter02。demo01;import java。io。FileInputStream;import java。io。FileNotFoundException;import java。io。IOException;/** * finally子句 * 不管是否產生異常, finally子句總是會執行, 經常用來釋放系統資源 * */public class Test04 { public static void main(String[] args) { FileInputStream fis = null; try{ //try程式碼塊,對可能產生異常的程式碼進行檢視 fis = new FileInputStream(“d:/abc。txt”); //構造方法有受檢異常FileNotFoundException需要預處理 System。out。println(“在當前程式與指定的檔案之間建立了流通道, ”); fis。read(); //read()方法有受檢異常IOException需要預處理 System。out。println(“從檔案中讀取了一個位元組”); // 透過catch子句捕獲產生的異常 }catch (FileNotFoundException e) { // 捕獲檔案未找到異常 e。printStackTrace(); //開發時,一般把異常列印到螢幕上 //捕獲了產生的異常, 程式沒有中斷, 還繼續向下執行 }catch (IOException e) { // 捕獲IOException異常 // FileNotFoundException 繼承了 IOException, 如果需要單獨處理, 應該先捕獲子異常 ,再捕獲父異常 // 或者, 不需要單獨處理時, 直接捕獲父異常即可 }finally { System。out。println(“finally子句,不管是否產生異常,總是會執行, 經常在finally子句中釋放系統資源”); //可以在finally子句中關閉流通道 if ( fis != null ) { try { fis。close(); //close()方法有受檢異常IOException需要預處理 } catch (IOException e) { e。printStackTrace(); } System。out。println(“檔案讀取完後,需要關閉流通道”); } } System。out。println(“main。。。end。。。。”); }}

package com。wkcto。chapter02。demo01;/** * finally總是會執行 * 1)try/catch/finally子句都不能單獨使用, 可以try。。catch。。, 也可以try。。。finally, 也可以try。。。catch。。finally * 2)final/finalize/finally的區別 * */public class Test05 { public static void main(String[] args) { int num = mm(10); System。out。println( num ); //10 } public static int mm( int xx ) { //xx = 10 try { return xx; } finally { xx++; } /* * 程式執行到return xx;語句時, 並沒有立即執行return語句, 而是把xx變數的值儲存起來 * 然後執行finally子句, xx的值加1變為了 11 * 最後再執行return語句, 返回的不是xx變數現在的值, 而儲存的值10給返回了 */ }}

throws丟擲處理

package com。wkcto。chapter02。demo01;import java。io。FileInputStream;import java。io。FileNotFoundException;/** * throws丟擲處理 * */public class Test06 { //在定義main()方法時,可以丟擲異常, main的異常丟擲給JVM //JVM預設的處理方式: 中斷程式, 列印異常資訊// public static void main(String[] args) throws FileNotFoundException { public static void main(String[] args) { System。out。println(“main方法中呼叫m1()方法”); try { m1(); //丟擲m1()丟擲的異常, 這個異常不會繼續上拋了, 程式也不會中斷,繼續向下執行 } catch (FileNotFoundException e) { e。printStackTrace(); } System。out。println(“main方法結束。。。。”); } //如果m1()方法 在定義時透過throws聲明瞭一個異常, 就是受檢異常, 在呼叫m1()方法時也需要對該異常進行預處理 //誰呼叫m1()方法, 誰負責處理該異常 private static void m1() throws FileNotFoundException { System。out。println(“m1方法開始執行, 呼叫了m2()方法 ”); m2(); //在呼叫m2()方法, 需要對m2()的受檢異常進行預處理 System。out。println(“m1方法結束 ……”); } //在定義方法時, 如果方法體中的某條語句有受檢異常需要預處理, 可以捕獲處理, 還可以丟擲處理 //在方法的定義位置透過throws關鍵字宣告丟擲異常, 在m2()定義時透過throws宣告的異常 就是受檢異常 //誰呼叫m2()方法, 誰負責處理該異常 private static void m2() throws FileNotFoundException { System。out。println(“m2方法呼叫 FileInputStream類的構造方法”); FileInputStream fis = new FileInputStream(“d:/abc。txt”); //構造方法有受檢異常需要預處理 System。out。println(“m2。結束”); }}

異常處理可以進行捕獲,也可以丟擲, 如何選擇?

● 在定義方法時, 如果方法體中某條語句有受檢異常需要預處理, 可以選擇捕獲處理,也可以選擇丟擲處理。

● 在呼叫方法時, 如果被呼叫的方法有受檢異常需要預處理, 一般情況下是進行捕獲處理。

● 定義方法時,丟擲的異常,是丟擲給呼叫者, 透過丟擲異常,提醒方法的呼叫者,可能有異常發生, 呼叫者需要對這個異常進行預處理

● 在定義方法時, 如果方法體中透過throw語句丟擲了一個異常物件, 所在的方法應該透過throws宣告該異常

上面就是《Java異常簡介與Java異常處理》的分享,接下來為大家梳理《Java方法覆蓋中的異常處理、Java異常在開發中的應用與Java陣列的定義》。

也歡迎大家交流探討,該文章若有不正確的地方,希望大家多多包涵。

你們的支援就是我最大的動力,如果對大家有幫忙給個贊哦~~~

Top