ubuntu 升級GCC(原始碼)
阿新 • • 發佈:2021-07-28
異常
什麼是異常
指程式執行中出現的不期而至的各種狀況,如:檔案找不到、網路連線失敗、非法引數等
分類
-
檢查型異常
-
執行時異常
由程式邏輯錯誤引起,應從邏輯角度儘可能避免這類異常發生
- 陣列下標越界異常
- 空指標異常
- 算術異常
- ....
-
錯誤ERROR
Error類物件由java虛擬機器生成並丟擲
ERROR通常是致命的錯誤,是程式無法控制和處理的,發生時JVM會終止執行緒,而Exception通常是可以被程式處理的,並在程式中應儘可能去處理這些異常
處理
-
常用關鍵字:try 、catch、finally、throw、throws
-
異常物件的兩個方法
Exception e=new Exception(); String msg=e.gewMessage(); //獲取異常簡單描述資訊,呼叫異常物件的toString方法? e.printStackTrace(); //列印追蹤堆疊的資訊
1.丟擲
在方法宣告位置上使用throws關鍵字,拋給上一級(誰呼叫拋給誰)
但是隻能丟擲相應的異常或其父類異常(拋的異常可以更大不能更小)
2.捕捉
一般main方法採用捕捉,否則異常會拋給JVM,JVM會終止程式
public static void main(String[] args) { int a=10,b=0; int c; try {//try監控區域,嘗試一些可能有異常的程式 c = a/b; }catch (ArithmeticException e){//捕獲異常 System.out.println("發生異常,被除數不能為0"); } finally{//善後工作 System.out.println("結束"); } }
-
try不能單獨使用
-
catch後面是想要捕獲的異常型別
-
建議在catch的程式碼塊裡列印異常追蹤的堆疊資訊(此資訊由上往下看,忽略Sun的程式碼)
-
可以捕獲多個異常,使用多個catch
注意catch的異常上面的必須小於下面的異常範圍,從小到大捕獲
-
finally最後一定會執行
無論是否出現異常,finally中的程式碼一定會執行,除非在try中執行System.exit(0);程式,通常在其中完成資源的釋放、關閉
public static int m(){ int i=100; try{ return i; }finally{ i++; } }
finally中的i++;一定執行,且由於return;後方法結束,所以會在return之前執行,但是這裡返回值是100,不是101!!因為要遵循java語法規則,由上至下執行,return在i=100;後面,所以返回100!!
這裡反編譯後發現實際執行:
int i=100; int j=i; i++; return j;//100!!!!
-
快捷鍵:Ctrl + Alt + T
自定義異常
- 建立異常類之後,之後繼承Exception類
- 提供兩個構造方法,一個無參,一個帶有String引數
public class MyException extends Exception{
private String detail;
public MyException(){}
public MyException(String s){
super(s);
}
}
-
配合throw(沒有s!!!!)使用
throw new MyException("這裡發生了***異常"); //丟擲後其方法體自動結束