3.14例外
3.14.1例外是什么
? 例外 : 程式生病了
3.14.2例外的體系結構以及常見的例外
/*
例外體系:
Throwable : Throwable類是Java語言中所有錯誤和例外的超類,
/ \
Error Exception
/ \
RuntimeException CheckedException
/*
Error : 錯誤 ,一般是由虛擬機生成并脫出的,不由程式猿控制
Exception : 例外
RuntimeException運行時例外 : 發生在程式運行期間,一旦遇到下面代碼無法執行,可以通過簡單的增強程式健壯性的代碼處理->(if)
CheckedException檢查時例外|編譯時例外 : 發生在程式編譯期間,如果出現了編譯時例外不處理,程式無法運行
常見的運行時例外:
NullPointerException 空指標例外
ClassCastException 型別轉換例外
NegativeArraySizeException 陣列長度負數例外
ArrayIndexOutOfBoundsException 陣列索引越界
ArithmeticException 數學例外
NumberFormatException 數字格式化例外
如果一旦程式出現例外,無法繼續向下執行|無法執行
運行時例外都會直接或者間接的繼承自RuntimeException
*/
3.14.3例外的測驗
public static void main(String[] args) {
System.out.println("----------------main------------------");
Object obj = null;
if(obj!=null){
System.out.println(obj.toString());
}
//運行時例外
/*String str = "123abv";
System.out.println(Integer.valueOf(str));
System.out.println(5/0);
int[] arr = new int[3];
System.out.println(arr[3]);*/
//編譯時例外
//InputStream is = new FileInputStream("D://xixi.txt");
System.out.println("----------------end------------------");
}
3.14.4自定義例外
1.繼承類
一般會選擇繼承Exception和RuntimeException,如果不要求呼叫者一定要處理拋出的例外,就繼承RuntimeException,
2.自定義例外類構造方法
public static class AgeException extends Exception {
//無參構造器
public AgeException() {
}
public AgeException(int age) {
System.out.println("你的年齡不合法!");
}
}
public void setAge(int age) throws AgeException {
if(age>=60||age<=18){
throw new AgeException(age);
}
this.age = age;
}
誰呼叫誰處理例外
3.14.5例外的處理方案
所有的例外都可以通過例外處理方案處理
1. 編譯時例外只能通過例外處理方案
2. 運行時例外可以通過簡單增強程式健壯性的代碼解決,也可以通過例外處理方案
1.拋出例外
/* 例外的拋出 : throws 拋出到方法上,誰呼叫誰處理 */ public static void test() throws FileNotFoundException { InputStream is = new FileInputStream("D://SpringBootHello.file"); }
2.捕獲例外
/*
例外的捕獲 : 捕獲例外,提供處理例外的代碼
try{
有可能出現例外的代碼;
}catch(例外型別A e){ //NullPointerException e = new NullPointerException();
遇到當前型別的例外執行對應的代碼;
}catch(例外型別B e){
遇到當前型別的例外執行對應的代碼;
}....
catch(Exception e){
如果以上的catch無法捕獲,執行當前{}中的的代碼
}finally{
一定會執行的代碼;
}*/
public static void main(String[] args){
System.out.println("----------------main------------------");
try {
System.out.println("try開始了");
//System.out.println(5/0);
test();
//int[] arr = new int[-5];
System.out.println("try結束了");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (ArithmeticException e){
System.out.println("遇到了數學例外!!!!!");
} catch (Exception e){
e.printStackTrace();
} finally {
System.out.println("最后肯定要執行");
}
System.out.println("----------------end------------------");
}
3.注意事項
/*
注意:
try中的一旦遇到例外,try中的代碼無法繼續執行,直接判斷能夠被哪一個catch捕獲,
從上到下判斷,如果所有的catch都不能捕獲,程式直接結束,這個例外沒有處理
try中如果執行沒有遇到例外,就不會判斷catch的捕獲
一個try后面可以跟1~n個catch
大范圍型別的catch捕獲放在后面,小回傳的放前面
finally中的代碼無論try中是否出現例外都會在最后執行finally中的內容
一般在finally中定義一些資源關閉等代碼
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/388424.html
標籤:其他
上一篇:10月份考研記錄表
