java-異常進階-包的使用

來源:互聯網
上載者:User

標籤:類型   檢測   調用   catch   方式   方法   .sh   異常捕獲   gpo   

一 finally1.1 異常執行的順序
package test;public class Test {    public static void main(String[] args)  {    Demo d = new Demo();    try {        d.show(-5);        System.out.println("hello try");    } catch (NoShowException e) {        e.printStackTrace();        System.out.println("hello catch");    }    }}class NoShowException extends Exception{    NoShowException(String message)    {        super(message);    }}class Demo{    void show(int num)throws NoShowException    {        if(num<0)            throw new NoShowException(num+",數值是非法的");        System.out.println("show ....."+num);    }}

結果:

 

1.2 finally 作用

有一些特定的代碼無論異常是否發生,都需要執行。
因為異常會引發程式跳轉,導致有寫語句執行不到。無法滿足這個需求。
異常捕獲處理時java提供解決方案。

應用情境;

 

定義一個功能往資料庫中添加資料。void add(Data data)throws NoAddException{//1,串連資料庫。try{//2,添加資料。//添加資料時發生了異常情況。throw new SQLException();程式跳轉,就執行不到中斷連線。//而中斷連線必須要執行,因為不執行,串連資源在浪費。//無論是否發生問題,都需要執行中斷連線的動作,從而釋放資源。}catch(SQLException e){//解決資料庫的問題。//同時將問題告訴調用者。throw new NoAddException();}finally{//3,中斷連線。}}

總結:finally到底什麼時候用
只要程式中使用到了具體的資源(資料庫連接,IO資源,網路連接socket等)
需要釋放,都必須定義在finally中。你在定義程式,只要問題發生與否,
指定程式都需要執行時,就定義finally中。

二 異常的組合方式


try catch finally 組合方式:

1 .try catch : 對代碼進行異常檢測,並對檢測的異常傳遞給catch處理。

try catch : 對代碼進行異常檢測,並對檢測的異常傳遞給catch處理。異常捕獲處理。void show()//不用throws {try{throw new Exception();}catch(Exception e){}}

2. try finally : 對代碼進行異常檢測,檢測到異常後因為沒有catch,所以一樣會被預設jvm拋出。
異常是沒有捕獲處理的。但是功能所開啟資源需要進行關閉,所有finally。
只為關閉資源。

void show()//需要throws {try{throw new Exception();}finally{}}

 

3,
try catch finally
檢測異常,並傳遞給catch處理,並定義資源釋放。

4,try catch1 catch2 catch3...... 

class ExceptionDemo10 {public static void main(String[] args) {System.out.println("Hello World!");}}

 

三 異常在繼承或實現的細節

異常在繼承或者實現中的使用細節:★★★★★
1,子類覆蓋父類方法時,如果父類的方法聲明異常,子類只能聲明父類異常或者該異常的子類,或者不聲明。
2,當父類方法聲明多個異常時,子類覆蓋時只能聲明多個異常的子集。
3,當被覆蓋的方法沒有異常聲明時,子類覆蓋時時無法聲明異常的。
舉例:父類存在這種情況,介面也有這種情況,
問題:介面中沒有聲明異常,而實現的子類覆蓋方法時發生了異常,怎麼辦?
 無法進行throws聲明,只能catch的捕獲。萬一問題處理不了呢?catch中繼續throw拋出,但是只能將異常轉換成RuntimeException子類拋出

1,子類覆蓋父類方法時,如果父類的方法聲明異常,子類只能聲明父類異常或者該異常的子類,或者不聲明。

原因:如是不是這樣,會發生類型轉換異常.具體看下面代碼講解

下面紅色部分產生類型轉換異常 //AException ex = new BException();

ps:父類有問題了,在覆蓋的時候子類不能有更多的問題

Exception    |--AException        |--AAException    |--BExceptionclass AException extends Exception{}class BException extends Exception{}class AAException extends AException{}class Fu{    void show()    {            }}class Tool{    void method(Fu f)//Fu f = new Zi();    {        try        {            f.show();        }        catch (AException ex)//AException ex = new BException();        {        }    }}Tool t = new Tool();//t.method(new Fu());t.method(new Zi());class Zi extends Fu{    void show()throws BException
{ } }

 

 

四 包

 

java-異常進階-包的使用

聯繫我們

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