Java 異常類(lèi)

2018-01-19 18:13 更新

Java面向?qū)ο笤O(shè)計(jì) - Java異常類(lèi)

異常類(lèi)層次結(jié)構(gòu)

異常類(lèi)層次結(jié)構(gòu)從java.lang.Throwable類(lèi)開(kāi)始。

當(dāng)拋出異常時(shí),它必須是Throwable類(lèi)的對(duì)象或其任何子類(lèi)。

catch塊的參數(shù)必須是Throwable類(lèi)型,或其子類(lèi)之一,例如Exception,ArithmeticException,IOException等。

我們可以通過(guò)從一個(gè)異常類(lèi)繼承我們的類(lèi)來(lái)創(chuàng)建我們自己的異常類(lèi)。

使用多個(gè)catch塊

Java運(yùn)行時(shí)選擇適當(dāng)?shù)腸atch塊,并從第一個(gè)catch塊開(kāi)始順序?qū)ふ液线m的catch時(shí)鐘。

try塊的多個(gè)catch塊必須從最具體的異常類(lèi)型排列為最通用的異常類(lèi)型。

以下代碼使用多個(gè)catch塊的有效序列。

ArithmeticException類(lèi)是RuntimeException類(lèi)的子類(lèi)。

如果這兩個(gè)異常都在同一個(gè)try塊的catch塊中處理,那么最具體的類(lèi)型,即ArithmeticException,必須出現(xiàn)在最通用的類(lèi)??型之前,即RuntimeException。

try  {
// Do  something, which  might  throw  Exception
}
catch(ArithmeticException e1)  {
// Handle  ArithmeticException first
}
catch(RuntimeException e2)  {
// Handle  RuntimeException after  ArithmeticException
}

已檢查和未檢查異常

有三種類(lèi)型的異常:

  • 有一些例外,有更高的可能發(fā)生。我們可以在try-catch塊中處理它們。或者我們可以在調(diào)用方法/構(gòu)造函數(shù)聲明中指定它可能拋出異常。
  • 錯(cuò)誤是可能發(fā)生的異常,并且我們幾乎不能處理它。例如,java.lang.OutOfMemeoryError。我們不能做任何事情從內(nèi)存不足錯(cuò)誤中恢復(fù)。
    異常類(lèi)層次結(jié)構(gòu)中的類(lèi),它們是Error類(lèi)的子類(lèi)和Error類(lèi)本身,屬于此類(lèi)別的異常。
    編譯器不堅(jiān)持對(duì)我們的代碼采取行動(dòng)。如果在運(yùn)行時(shí)拋出此類(lèi)異常,運(yùn)行時(shí)將通過(guò)顯示詳細(xì)的錯(cuò)誤消息并暫停應(yīng)用程序來(lái)處理它。
  • 在運(yùn)行時(shí)可能會(huì)發(fā)生異常,我們可能會(huì)從異常條件中恢復(fù)。
    異常類(lèi)層次結(jié)構(gòu)中的類(lèi),它們是RuntimeException類(lèi)的子類(lèi)和RuntimeException類(lèi)本身,屬于此類(lèi)別。
    編譯器不堅(jiān)持對(duì)我們的代碼采取行動(dòng)。

第一類(lèi)中的異常稱(chēng)為檢查異常,因?yàn)榫幾g器檢查它們是否在代碼中處理。

Throwable類(lèi),Exception類(lèi)和Exception類(lèi)的子類(lèi)(不包括RuntimeException類(lèi)及其子類(lèi))稱(chēng)為檢查異常。

所有未檢查異常的異常稱(chēng)為未檢查異常,因?yàn)榫幾g器不檢查它們是否在代碼中處理。

Error類(lèi),Error類(lèi)的所有子類(lèi),RuntimeException類(lèi)及其所有子類(lèi)都是未檢查的異常。

我們可以處理未檢查的異常,如果我們想,編譯器不會(huì)強(qiáng)迫我們這樣做。

用于處理已檢查或未檢查異常的程序結(jié)構(gòu)是相同的。

以下代碼顯示如何處理已檢查的異常:

import java.io.IOException;

public class Main {
  public static void main(String[] argv) {
    try {
      int input = System.in.read();
      if (input != -1) {
        System.out.println(input);
      }
    } catch (IOException e) {
      System.out.print("IOException occurred.");
    }
  }
}


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)