1. 程式人生 > 其它 >ubuntu 升級GCC(原始碼)

ubuntu 升級GCC(原始碼)

異常

什麼是異常

指程式執行中出現的不期而至的各種狀況,如:檔案找不到、網路連線失敗、非法引數等

分類

  • 檢查型異常

  • 執行時異常

    由程式邏輯錯誤引起,應從邏輯角度儘可能避免這類異常發生

    • 陣列下標越界異常
    • 空指標異常
    • 算術異常
    • ....
  • 錯誤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("這裡發生了***異常");
    //丟擲後其方法體自動結束