黑馬程式員—java基礎——————異常體系

來源:互聯網
上載者:User

異常:就是程式在運行時出現不正常情況。

    分類:Error;Exception   

    異常的處理:常見的操作e.getmessage()、e.toString()、e.printStackTrace()

      java 提供了特有的語句進行處理:

         try {  

            需要被檢測的代碼;

           } catch(異常類 變數) {

              處理異常的代碼;(處理方式) //這邊要是有retur語句後面將不被執行

          } finally {  

            一定會執行的語句; 當執行到System.exit(0);fianlly不會執行。

          }

    異常的申明:

      明異常時,建議聲明更為具體的異常。這樣處理的可以更具體。

      對方聲明幾個異常,就對應有幾個catch塊。不要定義多餘的catch塊。 這裡需要注意的是如果其中一個異常申明的是父類的異常(Exception e)異常,呢麼它一定要放在最後面,否則的話定義的其他異常將不能被運行。

    自訂異常:

      異常的好處:將問題進行了封裝;     將正常流程代碼和問題處理代碼相分離,方便與閱讀。

class FuShuException extends Exception //getMessage(); {                            這就是自訂了一個異常。

     //private int value;

     //FuShuException()  {  

     //  super();  

    //}

     FuShuException(String msg,int value)  

    {                                             這邊是在定義異常資訊,父類已經對異常資訊做過處理,子類直接通過super(msg);方法擷取自訂的異常資訊

      super(msg);  

       this.value = value;   //這裡可以把異常的數字也列印出來

     }

     public int getValue()  {  

       return value;

     }

}

      

class Demo {

     int div(int a,int b)throws FuShuException  {  //函數內部拋出了一個自訂的異常,在函數上要申明一下

       if(b<0)   

         throw new FuShuException("出現了除數是負數的情況------ / by fushu",b);//手動通過throw關鍵字拋出一個自訂異常對象。

        return a/b;  

     }

}

class  ExceptionDemo3 {  

    public static void main(String[] args)  {  

         Demo d = new Demo();   

         try   {    

            int x = d.div(4,-9);    

            System.out.println("x="+x);    

         }   catch (FuShuException e)   {    

            System.out.println(e.toString());   

             //System.out.println("除數出現負數了");    

            System.out.println("錯誤的負數是:"+e.getValue());   

        }      

          System.out.println("over");

     }

}

    繼承Exception的原因:異常體系有一個特點,因為異常和異常對象都不拋出,他們都具備可拋性,這個可拋性是throuable這個體系中的專屬特點,只有這個體系中的類和對象才可以被throw和throws操作。

    throws和throw的區別:

        throws使用在函數上;throw後跟的是異常對象。

        throw使用在函數內;throws後面跟的異常類。可以跟多個。用逗號隔開。

    RuntimeException 運行時異常

        如果在函數內容拋出該異常,函數上可以不用聲明,編譯一樣通過;如果在函數上聲明了該異常。調用者可以不用進行處理。編譯一樣通過;之所以不用在函數聲

明,是因為不需要讓調用者處理。當該異常發生,希望程式停止。因為在運行時,出現了無法繼續運算的情況,希望停止程式後,對代碼進行修正。

        自訂異常時:如果該異常的發生,無法在繼續進行運算,就讓自訂異常繼承RuntimeException。

 

class LanPingException extends Exception {  

    LanPingException(String message)  {   

        super(message);  

    }

}

class MaoYanException extends Exception {

     MaoYanException(String message)  {   

        super(message);  

    }

}

class NoPlanException extends Exception {  

     NoPlanException(String msg)  {  

         super(msg);  

     }

}

class Computer {  

    private int state = 3;  

    public void run()throws LanPingException,MaoYanException  {  

         if(state==2)    

            throw new LanPingException("藍屏了");   

        if(state==3)    

            throw new MaoYanException("冒煙了");

          System.out.println("電腦運行");  

    }  

    public void reset()  {  

         state = 1;   

        System.out.println("電腦重啟");   

     }

}

class Teacher {  

    private String name;  

    private Computer cmpt;

     Teacher(String name)  {   

        this.name = name;   

        cmpt = new Computer();

     }

     public void prelect()throws NoPlanException  {  

         try   {    

            cmpt.run();      

        }   catch (LanPingException e)   {   

             cmpt.reset();   

        }   catch (MaoYanException e)   {       

             test();    

             throw new NoPlanException("課時無法繼續"+e.getMessage());      

         }  

         System.out.println("講課");  

     }  

     public void test()  {   

        System.out.println("練習");  

     }

}

class ExceptionTest
{
     public static void main(String[] args)
     {
          Teacher t = new Teacher("畢老師");
          try
          {
               t.prelect();
          }
          catch (NoPlanException e)
          {
               System.out.println(e.toString());
               System.out.println("換老師或者放假");
          }
     }
}

    

    異常在子父類中覆蓋的體現:

        1)子類在覆蓋父類時,如果父類的方法拋出異常,那麼子類的覆蓋方法,只能拋出父類的異常或該異常的子類。

                (父類已經有問題,子類要繼承父類的功能,不能比父類更有問題,只能更最佳化

        2)父類拋出多個異常,那麼子類在覆蓋該方法時,只能拋出父類異常的子集(只要父類能處理)。

            3)如果父類或介面的方法中沒有拋出異常,那麼子類在覆蓋方法時也不可以拋出,只能try,絕對不能拋。

  包(package):

      對類進行分類管理;給類提供多層命名空間;寫在程式第一行;類的全名是:包名.類名;包也是一種封裝,建包可以將源檔案和類檔案分離。算是一種加密,保護

       原始碼被偷窺。

      包與包之間可以使用的許可權,只有public和protected兩種。

                                       public                   protected               default                private

                                  同一個類中            ok                                                 ok                                           ok                                           ok

 

                                  同一個包中            ok                                                  ok                                           ok

 

                                       子類                 ok                                                 ok            

 

                                     不同包中             ok

       導包:使用import關鍵字

      

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.