在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java/ 在方法內(nèi)部throw異常,必須要同時在方法頭部聲明throws嗎?

在方法內(nèi)部throw異常,必須要同時在方法頭部聲明throws嗎?

下面節(jié)選自類 JSONObject:

public String getString(String key) {
    this.verifyIsNull();
    Object o = this.get(key);
    if(o != null) {
        return o.toString();
    } else {
        throw new JSONException("JSONObject[" + JSONUtils.quote(key) + "] not    found.");
    }
}

以上直接拋出異常,而沒有在方法頭部聲明throws。

但是我自己寫的方法中,是同時有throw和throws的。去掉throws就會報錯:

Unhundled Exception 。

這是為什么?

回答
編輯回答
近義詞

java異常一般分為Checked異常和Runtime異常,所有RuntimeException類及其子類的實例被稱為Runtime異常,不屬于該范疇的異常則被稱為CheckedException
Java認(rèn)為Checked異常都是可以被處理的異常,所以Java程序必須顯示處理Checked異常。如果程序沒有處理Checked異常,該程序在編譯時就會發(fā)生錯誤無法編譯。
RuntimeException異常如果沒有顯示的捕獲處理則由系統(tǒng)自動檢測并將它們交給缺省的異常處理程序。
JSONException應(yīng)該是RuntimeException的子類,可以不用顯式的對它try...catch或者throws.如果沒有對該異常的處理會交給jvm處理。
而你自己寫的異常肯定是屬于Checked異常,被認(rèn)為是可以避免的異常,必須try...catch或者顯式的拋出throws不然編譯報錯。如果你自定義的異常想像throw new JSONException這樣處理,則你自定義的異常需要繼承RuntimeException即可。

2017年3月3日 09:11
編輯回答
悶騷型

JSONException RuntimeException(繼承) 是運行時異常 不用捕捉

2017年9月16日 21:52