如果我有一個叫船類的,如果我寫:優勢聲明異常
class Boat throws Exception
裏面我的課,我使用try catch塊捕捉ArithmeticException例如。 有什麼好處是宣佈一個異常與不宣佈異常?
如果我有一個叫船類的,如果我寫:優勢聲明異常
class Boat throws Exception
裏面我的課,我使用try catch塊捕捉ArithmeticException例如。 有什麼好處是宣佈一個異常與不宣佈異常?
第一類不會拋出異常,只有方法將拋出
檢查本例中
class A
{
public A() throws Exception
{
int k=5/0;
}
}
public class B
{
public static void main(String[] args)
{
A a=new A();
}
}
當你運行上面的你會得到編譯時錯誤說
Unhandled exception type Exception
因爲當方法拋出異常時,它們需要通過調用對象來處理,就像是在說'嘿有人處理異常',所以調用它的方法應該ndle異常,如果他們不這將是一個編譯時錯誤。
爲了順利執行程序,方法拋出的異常應該通過調用方法來處理。這是你需要處理的方式。
class A
{
public A() throws Exception
{
int k=5/0;
}
}
public class B
{
public static void main(String[] args)
{
try{
A a=new A();
}
catch(Exception e)
{
System.out.println("caught "+e);
}
}
}
因此,聲明方法的異常的唯一好處是允許使用該方法的另一個類捕獲異常?請告訴我。 – Stranger
@Stranger通過拋出你指定的異常,你的方法將拋出下面的異常。它只是說,當你使用這種方法時,它會拋出以下異常,你需要去處理它們。例如:'Class.forName(str)'將拋出CNF異常來指定使用此方法將導致CNF異常檢查方法聲明http://docs.oracle.com/javase/1.4.2/docs/api/java/ lang/Class.html#forName%28java.lang.String%29 – Pragnani
「以允許使用該方法的另一個類捕獲異常」。更喜歡強迫另一個類去思考如何處理異常(捕獲或傳播)。 – Thilo
聲明異常將允許您的程序編譯,如果任何異常可以由編譯器確定「逃脫」。不過,它的主要目的是向你的方法的用戶(以及它們的編譯器)記錄它可能拋出異常。
因此,宣佈異常,vs宣佈更具體的異常原因,是取消該計劃的好處 - 作弊。
A class
不會拋出異常。只有方法。
對於一些異常(檢查可能出現在您的代碼中的異常,您無法捕獲),編譯器會強制您聲明它們。
你永遠不必聲明RuntimeExceptions(例如ArithmeticException),但你可以。這用作文檔。
您可以聲明您的代碼不會拋出的已檢查異常。如果你以後想要拋出它們,這就使得它具有面向未來的可能性,並且也允許子類這樣做。
當聲明異常時,可以使用廣義/通用(throws Exception
或甚至throws Throwable
),但通常更好的是更具體。這給了人們使用你的代碼更好的想法。擁有這些許多特定的Exception類的全部目的是爲了更容易地處理異常(並且讓編譯器強制實施某人至少考慮過這樣做的事實)。
如果你寫類似的東西,
double x = 1/0;
System.out.print("hey");
它會給你一個例外,你的代碼將停止,將無法打印哎。但如果你用try/catch
封裝它,它不會停止。
try{
double x = 1/0;
}catch(ArithmeticException){}
System.out.print("hey");
這將打印哎。
請參閱[this](http://docs.oracle.com/javase/tutorial/essential/exceptions/runtime.html)。 – m0skit0
'class'不會拋出異常。只有方法。 – Thilo