Java知多少(45)未被捕獲的異常

來源:互聯網
上載者:User

標籤:

在你學習在程式中處理異常之前,看一看如果你不處理它們會有什麼情況發生是很有好處的。下面的小程式包括一個故意導致被零除錯誤的運算式。
1 class Exc0 {2     public static void main(String args[]) {3         int d = 0;4         int a = 42 / d;5     }6 }

當Java運行時系統檢查到被零除的情況,它構造一個新的異常對象然後拋出該異常。這導致Exc0的執行停止,因為一旦一個異常被拋出,它必須被一個例外處理常式捕獲並且被立即處理。該例中,我們沒有提供任何我們自己的例外處理常式,所以異常被Java運行時系統的預設處理常式捕獲。任何不是被你程式捕獲的異常最終都會被該預設處理常式處理。預設處理常式顯示一個描述異常的字串,列印異常發生處的堆棧軌跡並且終止程式。


下面是由標準javaJDK運行時解譯器執行該程式所產生的輸出:
1     java.lang.ArithmeticException: / by zero2     at Exc0.main(Exc0.java:4)

注意,類名Exc0,方法名main,檔案名稱Exc0.java和行數4是怎樣被包括在一個簡單的堆棧使用軌跡中的。還有,注意拋出的異常類型是Exception的一個名為ArithmeticException的子類,該子類更明確的描述了何種類型的錯誤方法。本章後面部分將討論,Java提供多個內建的與可能產生的不同種類執行階段錯誤相匹配的異常類型。


堆棧軌跡將顯示導致錯誤產生的方法調用序列。例如,下面是前面程式的另一個版本,它介紹了相同的錯誤,但是錯誤是在main( )方法之外的另一個方法中產生的:
1 class Exc1 {2     static void subroutine() {3         int d = 0;4         int a = 10 / d;5     }6     public static void main(String args[]) {7         Exc1.subroutine();8     }9 }

預設異常處理器的堆棧軌跡結果表明了整個調用棧是怎樣顯示的:

1     java.lang.ArithmeticException: / by zero2     at Exc1.subroutine(Exc1.java:4)3     at Exc1.main(Exc1.java:7)

如你所見,棧底是main的第7行,該行調用了subroutine( )方法。該方法在第4行導致了異常。呼叫堆疊對於調試來說是很重要的,因為它查明了導致錯誤的精確的步驟。

  系列文章:

Java知多少(上)

Java知多少(39)interface介面

Java知多少(40)介面和抽象類別的區別

Java知多少(41)泛型詳解

Java知多少(42)泛型萬用字元和型別參數的範圍

Java知多少(43)異常處理基礎

Java知多少(44)異常類型

 

Java知多少(45)未被捕獲的異常

聯繫我們

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