java===Exception異常處理

來源:互聯網
上載者:User

標籤:類方法   import   如何   格式   length   auto   運行時異常   main   練習   

package cn.china;/** * 異常:在運行時期發生的不正常情況。 * 問題很多,意味著描述的類也很多, * 將其共性進行向上抽取,形成異常體系。 * 最終問題就分成兩大類: * throwable:無論是Error,還是異常,都是問題,就應該可以拋出,讓調用者知道並處理。 * 該體系的特點就在於throwable及其所有子類都具有可拋性。 * 如何體現可拋性? * 其實是通過兩個關鍵字體現的,throws,throw;凡是可以被這兩個關鍵字操作的類和對象都具有可拋性。 *    1、一般不可處理的,Error *    特點:是由JVM拋出的嚴重性問題,已經影響到我們程式的執行;這種問題發生一般不針對性處理,直接修改程式 *    2、可以處理的,Exception *     特點:子類的尾碼名都是用其父類名作為尾碼,閱讀性很強。 *      *     異常分類: *     1、編譯時間被檢測異常:只要是Exception和其子類都是,除了RunTimeException和其子類 *     這種問題一旦出現,希望在編譯時間就進行檢測,讓這種問題有對應的處理方式。 *     這樣的問題都可以針對性的處理 *     2、編譯時間不檢測異常(運行時異常):RunTimeException和其子類。 *     這樣的問題的發生,無法讓功能繼續,運算無法進行,更多是因為調用的原因導致的或者引發了內部狀態的改變導致的。 *     這種問題一般不處理,直接編譯通過,在運行時,讓調用者調用時的程式強制停止,讓調用者對代碼進行調整。 *      *     throw 和 throws區別? *     throws 使用在函數上  拋出的是異常類,可以拋出多個可以用逗號隔開 *     throw 使用在函數內   拋出的是異常對象*/class FuShuIndexException extends Exception//所以這裡可以繼承RunTimeException,就不需要聲明或者捕捉異常,編譯不會失敗{    public FuShuIndexException(String meg) {        super(meg);        // TODO Auto-generated constructor stub    }}class D{    public int method(int arr[],int index)throws FuShuIndexException    {        if(arr==null)            throw new NullPointerException("數組的引用不可為空!");        if(index>=arr.length)            throw new ArrayIndexOutOfBoundsException("數組越界了!"+index);        if(index<0)//準備用負數角標異常來表示,但是這種異常在java中並沒有定義過。按照java異常的建立思想,將負數角標進行自訂描述,並封裝成對象            throw new FuShuIndexException("數組的角標不能為負數"+index);        return arr[index];    }}public class Demo {    public static void main(String[] args) throws FuShuIndexException    {        int[]arr=new int[3];        D d=new D();        int num= d.method(arr, -30);           }    }
package cn.china;/**異常處理的捕捉形式 * 具體格式: * try * {需要被檢測異常的代碼} * catch(異常類  變數)  //該變數用於接收發生異常的對象 * {處理異常的代碼} * finally * {一定會被執行的代碼} *  *  * 異常處理原則: * 1、函數內部如果拋出需要檢測的異常,那麼函數上必須要聲明,否則必須在函數內必須要用trycatch捕捉,否則編譯失敗。 * 2、如果調用到了聲明異常的函數,要麼trycatch要麼throws,否則編譯失敗。 * 3、什麼時候catch,什麼時候throws呢? * 功能內部可以解決,用catch; * 解決不了用throws,告訴調用者,調用者解決; * 4、一個功能如果拋出多個異常,那麼調用時必須由對應多個catch進行針對性處理。 * 內部有幾個要檢測的異常,就拋幾個異常,拋出幾個,就catch幾個;*/class FuShuIndexException extends Exception//所以這裡可以繼承RunTimeException,就不需要聲明或者捕捉異常,編譯不會失敗{    public FuShuIndexException(String meg) {        super(meg);    }}class C{    public int method(int arr[],int index)throws FuShuIndexException    {        if(arr==null)            throw new NullPointerException("數組的引用不可為空!");        if(index>=arr.length)            throw new ArrayIndexOutOfBoundsException("數組越界了!"+index);        if(index<0)//準備用負數角標異常來表示,但是這種異常在java中並沒有定義過。按照java異常的建立思想,將負數角標進行自訂描述,並封裝成對象            throw new FuShuIndexException("數組的角標不能為負數"+index);        return arr[index];    }}public class Demo1 {    public static void main(String[] args) {        int[]arr=new int[3];        C c=new C();        try        {        int num= c.method(arr, -30);        System.out.println("num"+num);//num是局部變數 所以這兩句話要放在同一個代碼塊        }        catch(NullPointerException e){//多catch格式            e.printStackTrace();        }        catch(ArrayIndexOutOfBoundsException e){            e.printStackTrace();        }        catch(FuShuIndexException e)        {            e.printStackTrace();//JVM預設的異常處理機制就是調用異常對象的這個方法。            System.out.println("Message"+e.getMessage());            System.out.println("String"+e.toString());            System.out.println("負數角標異常!");        }        catch(Exception e){//父類需要放在最下面,不然編譯失敗,因為Exception跟所有異常都匹配,            e.printStackTrace();        }        System.out.println("over!");    }}
package cn.china;/**try  catch  finally 組合特點 * 1、 try  catch  finally * 2、try  catch(多個當沒有必要資源需要釋放時,可以不用定義finally) * 3、 try  finally * 例:void show()throws Exception //因為沒有catch所以必須聲明異常 * { *  try{ *  //開啟資源 *  throw new Exception *  } *  finally{ *  //關閉資源 *  } * }*/class E{    public int method(int  index)    {        int[]arr=new int[3];        if(index>=arr.length)            throw new ArrayIndexOutOfBoundsException();        return arr[index];    }}public class Demo2 {    public static void main(String[] args) {        E e=new E();        try{int num=e.method(3);        System.out.println(num);        }catch(ArrayIndexOutOfBoundsException c)        {            System.out.println(c.toString());            return;            //System.exit(0); 退出JVM只有這種情況不會執行finally語句;        }        finally {//一定會被執行的語句,主要用於關閉或者釋放資源            System.out.println("finally");        }        System.out.println("over!");    }}
package cn.china;import java.time.format.TextStyle;/** * 畢老師用電腦上課, * 分析其中問題: * 電腦藍屏,冒煙*/class LanPingException extends Exception{    LanPingException(String msg){        super(msg);    }}class MaoYanException extends Exception{    MaoYanException(String msg){        super(msg);    }}class NoPlanException extends Exception{    NoPlanException(String msg){        super(msg);    }}class Computer{    private int state=0;    public void run()throws LanPingException,MaoYanException    {        if(state==1)          throw new LanPingException("藍屏啦");        if(state==2)            throw new MaoYanException("電腦冒煙了");        System.out.println("電腦運行");    }    public void reset(){        state=0;        System.out.println("電腦重啟了");    }}class Teacher{    private String  name;    private Computer comp;    Teacher(String name){        this.name=name;        comp=new Computer();    }    public void prelect()throws NoPlanException    {        try        {            comp.run();            System.out.println("講課");        }catch(LanPingException e){            System.out.println(e.toString());            comp.reset();            prelect();        }catch(MaoYanException e){            System.out.println(e.toString());            test();            throw new NoPlanException("課時無法進行"+e.getMessage());            //可以對電腦進行維修            //throw e;        }    }    public void test(){        System.out.println("大家練習");    }}public class Demo3 {    public static void main(String[] args) {        Teacher teacher=new Teacher("畢老師");        try        {            teacher.prelect();        }        catch(NoPlanException e)        {            System.out.println(e.toString()+"......");            System.out.println("換人");        }    }}/** * class NoAddException extends Exception{} * void addData(Data d)throws NoAddException * { *    連結資料庫 *    try{ *    添加資料庫,出現異常 SQLException(); *    }catch(SQLException e) *    { *        //處理代碼 *        throw new NoAddException(); *    }finally *    { *          *    關閉資料庫 *    } * }*/ 
package cn.china;/**異常的注意事項 * 1、子類在覆蓋父類方法時如果父類的方法拋出異常,那麼子類的方法只能破案出父類的異常,或者該異常的子類 * 2、如果父類拋出多個異常,那麼子類子還能拋出父類異常的子集 *  * 簡單說:子類覆蓋父類,只能拋出父類的異常,或者子集;如果父類沒有拋出異常,那麼子類覆蓋時絕對不能拋出異常,但是可以用try;*/class A extends Exception {}class B extends A{}class C extends Exception{}class Fu{    void show()throws A{}}class Zi extends Fu{    void show()throws B{}//只能拋出A或者B }class Test{    void method(Fu f){        try{            f.show();        }catch(A a){}    }}public class Demo4 {    public static void main(String[] args) {        Test t=new Test();        t.method(new Zi());    }}

 

java===Exception異常處理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.