當我正在經歷我碰到下面的規則傳來JLS 8 11.2:爲什麼會有調用沒有try catch塊靜態無效的主要()
Java編程語言要求程序包含 處理程序檢查可能由執行 方法或構造函數導致的異常(第8.4.6節,第8.8.5節)。此編譯時檢查 是否存在異常處理程序旨在減少未正確處理的異常數。對於每個檢查異常 這是可能的結果,方法或構造函數的throws子句必須提及該異常的類別或該異常的類別的其中一個(第11.2.2.3)類別的其中一個 。
我不明白那條規則的要點。舉例來說,據我所知,這兩個程序
class Main
{
public static void main (String[] args) throws Exception
{
throw new Exception();
}
}
和
class Main
{
public static void main (String[] args) throws Exception
{
try{
throw new Exception();
} catch (Expection e){ }
}
}
是良好的。
但是該規則要求程序包含任何檢查的異常的處理程序,對於第一個不正確的異常。其實,看看處理程序的定義:
每個異常由類Throwable 或它的子類(§11.1)的一個實例表示。這樣的對象可以用來從發生異常的點向攜帶 的信息攜帶 信息。 處理程序通過try 語句(§14.20)的catch子句建立。
強調我的。
所以,在第一個程序是沒有任何處理,但
Java編程語言要求程序包含 處理程序檢查的異常
你能不能澄清這個規則?
拋出基本上是將異常傳遞給調用者。以便呼叫者可以以他自己的方式處理。而在第二個代碼中,你並不需要拋出實際的! – Prashant 2015-02-08 07:06:48
http://programmers.stackexchange.com/questions/257174/how-does-the-jvm-handle-an-exception-thrown-by-the-main-method – Adam 2015-02-08 07:07:12
「對於可能導致的每個檢查異常,方法或構造函數的throws子句必須提及該異常的類別或該異常類別的某個超類別之一。這裏的奧祕是什麼? – Raedwald 2015-02-08 12:04:16