《C++ Primer》筆記(03)
阿新 • • 發佈:2020-11-21
1.異常分類
a.執行時異常:程式碼在編輯時不報錯,執行時才報錯
b.檢查異常:程式碼在編輯時報錯
2.處理異常: try catch或者throws
try: 將可能可能發生異常的程式碼用{}包裹起來
catch:捕獲特定型別的異常,捕獲時先寫範圍小的型別,後寫範圍大的型別
如果try中的程式碼確實發生了異常,則程式不再執行try中異常之後的程式碼,而是直接跳到catch中執行
### try catch
自己當前能夠處理
###throws
自己當前方法不能處理上交給上級(方法呼叫處)處理,使用throws
###finally
無論正常還是異常,始終會執行的程式碼
a.即使遇到return,也仍然會執行
b.除非虛擬機器關閉,才不會執行System.exit(1);//關閉虛擬機器jvm
1 package ex; 2 3 public class Demo1 { 4 public static void test01() { 5 Object obj = null; 6 try { 7 obj.equals("");// 可能產生異常的程式碼 8 9 } catch (NullPointerException e) {// 捕獲特定型別的異常 10 System.out.println("發生了空指標異常");11 } finally { 12 System.out.println("無論正常,還是異常,始終都會執行的程式碼。。。"); 13 } 14 15 } 16 17 public static int test02() { 18 try { 19 Object obj = null; 20 // System.exit(1);//關閉jvm 21 obj.equals(""); 22 return 1; 23 } catch(NullPointerException e) { 24 return 0; 25 } finally { 26 System.out.println("照樣執行>>>"); 27 } 28 } 29 30 // 多個catch只執行一個類似if else if 31 public static void test03() { 32 try { 33 // Class.forName("xxx");//程式會載入指定的類 34 Object obj = null; 35 obj.equals("");// 空指標 36 int[] a = new int[3]; 37 a[4] = 4;// 陣列越界異常 38 } catch (ArrayIndexOutOfBoundsException e) { 39 System.out.println("陣列越界異常...."); 40 } catch (NullPointerException e) {// 捕獲空指標 41 System.out.println("發生了空指標異常"); 42 } catch (Exception e) {// 還有一些想不到的異常 43 System.out.println("其他異常>>>>"); 44 System.out.println(e); 45 e.printStackTrace();// 列印異常的堆疊資訊 46 System.out.println("getMessage" + e.getMessage()); 47 } 48 49 } 50 51 public static void test04() throws NullPointerException, ClassNotFoundException {// 丟擲異常給上級 52 Object obj = null; 53 obj.equals("");// 空指標 54 Class.forName("xxx"); 55 56 } 57 58 public static void main(String[] args) throws Exception {// 上級接收到異常後要麼自己trycatch處理要麼繼續往上丟擲 59 // test01(); 60 // test02(); 61 // test03(); 62 test04(); 63 } 64 }
###throw一般和自定義異常一起使用
throw:宣告異常
jdk中自帶了很多型別的異常,但這些內建異常如果還不夠用的話,那就需要自定義異常
編寫自定義異常
類,繼承Exception,呼叫super("異常資訊")
1 package ex; 2 3 public class MyException extends Exception { 4 public MyException(String message) {//異常資訊 5 super(message); 6 } 7 } 8 9 10 11 package ex; 12 13 public class Demo2 { 14 15 public static void main(String[] args) { 16 int age=188; 17 //約定,年齡不能大於120 18 if(age<=0||age>120) { 19 try { 20 //手工宣告一個異常 21 throw new MyException("年齡不能大於120"); 22 }catch(MyException e) { 23 e.printStackTrace(); 24 System.out.println(e.getMessage()); 25 } 26 } 27 } 28 29 }