別樣JAVA學習(六)繼承下(2.3)異常下

來源:互聯網
上載者:User

標籤:net   運算   執行   兩種   log   strong   blog   資料   runtime   

1、RuntimeException

Exception中有一個特殊的子類異常RuntimeException執行時異常。


假設在函數內容拋出該異常,函數上能夠不用聲明。編譯一樣通過。

假設在函數上聲明了該異常,調用者能夠不用進行處理。編譯一樣通過。


之所以不用在函數上聲明,是由於不須要讓調用者處理。

當該異常發生,希望程式停止。

由於在執行時,出現了無法繼續運算的情況,

希望停止程式後。對代碼進行修正。


例:

class Person{public void checkName(String name){//if(name.equals("lisi"))//相當於NullPointerExceptionif("lisi".equals(name))//相當於if(name!=null && name.equals("lisi"))System.out.println("YES");else System.out.println("No");}}main()              //代碼簡寫。。。。要執行自行加上些其它東西{Person p=new Person();p.checkName(null);}

因此自己定義異常時,假設該異常的發生。無法再繼續進行運算,

就讓自己定義異常繼承RuntimeException。


玩點有趣的。

是不是發現,一有異常程式就停止。


對於異常分兩種:

1。編譯時間被檢測的異常。(這時異常是可處理的)

2,編譯時間不被檢測的異常(執行時異常。RuntimeException以及其子類)

異常進入時會進行instanceof推斷是否為RuntimeException



2、異常-finally

finally

比如。client與服務端連結。無論是否出現錯誤都要運行斷開操作,

但出現錯誤client就不需對從服務端讀取到的資料進行處理,跳過。

public void method(){串連資料庫;資料操作;//throw new SQLException關閉資料庫;//該動作,不管資料操作是否成功。一定要關閉資源try{串連資料庫;資料操作;//throw new SQLException}catch(SQLException e){會對資料庫進行異常處理;        }finally{關閉資料庫;}}


3、異常-處理語句其他格式

1,

try{}catch(){}

2,

try{}catch(){}finally{}

3,

try{}finally{//一定要啟動並執行代碼}

記住一點:catch是用於處理異常。

假設沒有catch就代表異常沒有被處理過。假設該異常是檢測時異常,那麼必須聲明。



4、異常-覆蓋時的異常特點

1,子類在覆蓋父類時,假設父類的方法拋出異常。那麼子類的覆蓋方法,僅僅能拋出父類的異常或該異常的子類。


假設這樣:
class Zi extends Fu{void show()throws CException//或者BException。不但是CException {}}




class Test {void function(Fu f){f.show();}}class ExceptionDemo7{public static void main(String[] args){Test t=new Test();t.function(new Fu());}}



假設Zi真出現C異常。那就在內部處理

2。假設父類的方法拋出多個異常,那麼子類在覆蓋該方法時,僅僅要父類異常的子集。

3,假設父類或介面的方法中沒有異常拋出,那麼子類在覆蓋方法時,也不可拋出異常。

      假設子類發生異常,就必需要進行try處理。絕對不能拋。




5、異常-練習

有一個圓形和長方形,都能夠擷取面積。

對於面積假設出現非法的數值。視為是擷取面積出現故障。

問題通過異常來表示。


6、異常-總結

異常:

是什嗎?是對問題的描寫敘述。將問題進行對象的封裝。

異常體系:

       Throwable

               |--Error

               |--Exception

                          |--RuntimeException

異常體系的特點:異常體系中的全部類以及建立的對象都具備可拋性,

                            也就是說能夠被throw和throwskeyword所操作,

                            僅僅有異常體系具備這個特點。

------------------------------------------

throw和throws的使用方法:

throw定義在函數內,用於拋出異常對象。

throws定義在函數內,用於拋出異常類,能夠拋出多個用逗號隔開。


當函數內容有throw拋出異常對象。並未進行try處理。

必需要在函數上聲明。都在編譯失敗。

注意。RuntimeException除外。

也就是說,函數內假設拋出的RuntimeException異常。函數上能夠不用聲明。

假設函式宣告了異常。調用者須要進行處理,處理方法能夠throws能夠try。

------------------------------------------

異常有兩種:

       編譯時間被檢測異常

              該異常在編譯時間,假設沒有處理(沒有拋也沒有try)。編譯失敗

              該異常被標識,代表這能夠被處理。

       執行時異常(編譯時間不檢測)

              在編譯時間。不須要處理。編譯器不檢查。

              該異常的發生。建議不處理,讓程式停止,須要對代碼進行修正。

------------------------------------------

異常處理語句:

try{//須要被處理的代碼;}catch(){//處理異常的代碼;}finally{//一定會啟動並執行代碼;}

有三中結合格式:

1、

try{}catch(){}

2、

try{}finally{}

3、

try{}catch(){}finally{}

注意:

1、finally中定義的一般是   關閉資源碼。由於資源必須釋放。


2、finally僅僅有一種情況不會運行。當運行到System.exit(0);

------------------------------------------

自己定義異常:

       定義類繼承Exception或者RuntimeException

       1,為了讓該自己定義類具備可拋性。

       2,讓該類具備操作異常的共性方法。

       當要定義自己定義異常的資訊時。能夠使用父類已經定義好的功能。

       異常資訊傳遞給父類的建構函式。

       class MyException extends Exception

       {

              MyException(String message)

              {

                    super(message);        

              }

       }

------------------------------------------

異常的優點:

1,將問題進行封裝

2,將正常流程代碼和問題處理代碼相分離。方便於閱讀。

異常的處理原則:

1,處理方式有兩種:try或者throws。

2,調用到拋出異常的功能時,拋出幾個。就處理幾個。

一個try相應多個catch。

3,多個catch,父類的catch放到最以下。

4,catch內,須要定義針對性的處理方式。不要簡單的定義printStackTrace,輸出語句。

     也不要不寫。

當捕獲到的異常,本功能處理不了時,能夠繼續在catch中拋出。

try
{
    throw new AException();
}
catch(AException e)
{
    throw e;
}
假設該異常處理不了,但並不屬於該功能出現的異常。
能夠將異常轉換後。再拋出和該功能相關的異常。

或者異常能夠處理,當須要將異常產生的和本功能相關的問題提供出去。
當調用者知道,並處理。

也能夠將捕獲異常處理後,轉換新的異常。
try
{
    throw new AException();
}
catch(AException e)
{
    throw new BException();
}
------------------------------------------
異常的注意事項:
      在子父類覆蓋時:
      1。子類拋出的異常必須是父類的異常的子類或者子集。
      2,假設父類或者介面沒有異常拋出時,子類覆蓋出現異常。僅僅能try不能拋。
      
參閱
ExceptionTest.java  老師用電腦上課
ExceptionTest1.java 圖形面積

別樣JAVA學習(六)繼承下(2.3)異常下

聯繫我們

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