1. 程式人生 > 實用技巧 >《C++ Primer》筆記(03)

《C++ Primer》筆記(03)

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 }