Java基础笔记-异常
Java中的異常機制:
Throwable類是 Java 語言中所有錯誤或異常的超類。主要包括兩個子類: Error和Exception.
一般中要處理的異常是Exception.
Java中最常見的處理方式是try catch finally.格式為:
try
{
需要被檢測的異常.
}
catch(異常類 變量)
{
處理異常的代碼()處理方式
}
finally
{
一定會被執行的代碼語句
}
一個簡單的異常處理代碼及有關函數的應用:
1 /* 2 異常:Exception. 3 處理異常的方式: 4 try 5 { 6 需要被檢測的代碼. 7 } 8 catch(異常類 變量) 9 { 10 處理異常的代碼,處理方式. 11 12 } 13 finally 14 { 15 一定會被執行的語句. 16 } 17 */ 18 class ExceptionDemo 19 { 20 public static void main(String args []) 21 { 22 Demo d = new Demo(); 23 //int a = d.div(4,1); 24 try 25 { 26 int a = d.div(4,0); 27 System.out.println("a = "+a); 28 } 29 catch(Exception e) //Exception類型的引用對象 Exception e = new ArithmeticException(); 30 { 31 System.out.println("除以零了."); 32 System.out.println(e.getMessage()); //打印出異常信息. /by zero 33 System.out.println(e.toString()); // 異常名稱 異常信息 34 35 e.printStackTrace(); //JVM默認的就是調用printStackTrace方法獲取異常處理,并打印出在堆棧中的跟蹤信息. 36 37 } 38 finally 39 { 40 System.out.println("It's over."); 41 } 42 } 43 } 44 45 class Demo 46 { 47 int div(int a,int b)throws Exception //throws Exception 聲明了該方法可能會出現問題. 48 { 49 return a/b; 50 } }用try catch finally也處理捕捉多個異常,在聲明異常時,應該聲明更具體的異常.
當出現了多個catch時,聲明了多個異常時,父類異常塊應該放在代碼的最下面,如果放在最上面會導致子類異常永遠無法執行到.
異常的聲明:用關鍵字 throws.在java中可以用throws和throws來拋出異常.
throw和throws的區別在于:
throws:使用在函數上(所謂函數上就是在函數名的小括號與大括號之間),后面跟異常類,可以有多個異常類,用","(逗號)隔開即可.
throw:使用在函數內(在大括號之內),后面跟的是異常對象,格式例如: throw new 異常類名();
在實際應用中,可以自定義異常,自定義異常需要繼承一個異常類,可以是Error類,Exception類,或者它們的根類:Throwable類.
格式:(例如聲明一個自定義的Exception異常類)
class? 自定義異常類名(一般寫成xxxException) extends Exception
{
xxxException(String message)
{
super(message);
}
}
上面的自定義異常類,因為java已經在父類中已經把異常類的信息都完成了,子類異常類在構造時,
將異常的信息傳遞給父類,通過super語句,就可以直接調用getMessage()獲取異常信息.(有關父類的方法可以查閱Java API)
自定義異常類只能手動拋出,是無法自動拋出的.
相關的例子代碼:
1 class ExceptionDemo2 2 { 3 public static void main(String args []) 4 { 5 Demo d = new Demo(); 6 try 7 { 8 int a = d.div(4,-9); 9 System.out.println("a = "+a); 10 } 11 catch(FuShuException e) 12 { 13 System.out.println(e.toString()); 14 //System.out.println("出現了負數."); 15 System.out.println("錯誤的負數是:"+e.getValue()); 16 } 17 System.out.println("It's over."); 18 19 } 20 } 21 22 class FuShuException extends Exception 23 { 24 private int value; 25 /* 26 private String msg; 27 FuShuException(String msg) 28 { 29 this.msg = msg; 30 } 31 public String getMessage() 32 { 33 return msg; 34 } 35 */ 36 FuShuException(String msg,int value) 37 { 38 super(msg); 39 this.value = value; 40 } 41 42 public int getValue() 43 { 44 return value; 45 } 46 } 47 48 class Demo 49 { 50 int div(int a,int b)throws FuShuException //throws 使用在函數上. 51 { 52 if(b<0) 53 throw new FuShuException("出現了除數是負數的情況",b); //throw 使用在函數內. 54 return a/b; 55 } }?
Java中有一種特別的異常類:RuntimeException
1.該異常如果在函數內拋出了,在函數上不聲明,編譯也是可以通過的,(其他Exception等類是在函數內拋出了必須在函數上聲明的)
2.如果在函數上聲明了該類異常,調用者可以不進行處理.
因此使用自定義異常的時候,如果該異常的發生,無法繼續進行運算,那么就可以讓該自定義異常繼承RuntimeException.
?
最后是一個異常的相關練習代碼:
1 class BlueScreen extends Exception 2 { 3 BlueScreen(String message) 4 { 5 super(message); 6 } 7 } 8 class Smoke extends Exception 9 { 10 Smoke(String message) 11 { 12 super(message); 13 } 14 } 15 16 class NoPlanException extends Exception 17 { 18 NoPlanException(String message) 19 { 20 super(message); 21 } 22 } 23 24 class Computer 25 { 26 private int state = 3; 27 28 public void run()throws BlueScreen,Smoke 29 { 30 if(state==2) 31 throw new BlueScreen("電腦藍屏了"); 32 if(state==3) 33 throw new Smoke("電腦冒煙了"); 34 System.out.println("電腦運行"); 35 } 36 public void reset() 37 { 38 state = 1; 39 System.out.println("電腦重啟"); 40 } 41 } 42 43 class Teacher 44 { 45 private String name; 46 private Computer comp; 47 Teacher(String name) 48 { 49 this.name = name; 50 comp = new Computer(); 51 } 52 public void prelect()throws NoPlanException 53 { 54 try 55 { 56 comp.run(); 57 } 58 catch(BlueScreen e) 59 { 60 test(); 61 comp.reset(); 62 } 63 catch(Smoke e) 64 { 65 throw new NoPlanException("課時無法繼續."+e.getMessage()); 66 } 67 System.out.println("老師講課"); 68 } 69 public void test() 70 { 71 System.out.println("練習"); 72 } 73 } 74 75 76 class ExceptionTest 77 { 78 public static void main(String args[]) 79 { 80 Teacher t = new Teacher("張老師"); 81 try 82 { 83 t.prelect(); 84 } 85 catch(NoPlanException e) 86 { 87 System.out.println(e.toString()); 88 System.out.println("換老師或者電腦,不行就放假."); 89 } 90 } 91 }?
轉載于:https://www.cnblogs.com/jerryho/p/4518456.html
總結
以上是生活随笔為你收集整理的Java基础笔记-异常的全部內容,希望文章能夠幫你解決所遇到的問題。