Which statements are true?
<a>All classes of Exception extends Error.
<b>All classes of Error extends Exception.
<c>All Errors must be handled or declared.
<d>All classes of Exception extends Throwable.
<e>All Throwables must be handled or declared.
<f>All Exceptions must be handled or declared.
<g>Runtime Exceptions need never be handled or declared.
根据我的回答应该是d和f因为我认为运算符异常,例如算术异常需要处理,因为我们总是将它们放在try和catch块中以便处理它,但是在“kathy Sierra”的ocjp书中给出了它答案是d和g。谁是对的?我误解了什么吗?
答案 0 :(得分:1)
一个。所有Exception类都扩展了Error。
湾所有类的Error都扩展了Exception。
d。所有Exception类都扩展为Throwable。
Exception
和Error
都延伸Throwable
,因此(a)和(b)为假,(d)为真。
℃。必须处理或声明所有错误。
即必须处理或声明所有Throwables。
F。必须处理或声明所有例外情况。
以上都是假的,在这里更多地了解它:Java: checked vs unchecked exception explanation
克。永远不需要处理或声明运行时异常。
是的,原因与上面的链接相同。
以下是未处理 ArithmeticException
的简单示例(扩展RuntimeException
扩展Exception
):
int a = 42 / 0; // that would only throw at runtime, no need to try..catch it
答案 1 :(得分:0)
我想也许你误解了“处理”的含义。&#34;虽然抓住并做一些像ArithmeticException
这样的RuntimeException
之类的事情可能是明智的,但实际上你并不需要抓住它。当作者说&#34;必须处理或宣布所有异常时,&#34;处理意味着捕捉。您不必catch
或声明RuntimeException
。在这种情况下声明意味着向您的方法添加throws YourRuntimeException
。
在您的特定示例中,您不必始终捕获ArithmeticException
或声明throws ArithmeticException
,因为它是RuntimeException
。
答案 2 :(得分:0)
我认为需要处理运算符异常,例如算术异常,因为我们总是把它们放在try和catch块中
不,不是真的。我的意思是,你可以把它们放在try...catch
中,但它不是总是。例如,
int i = 2;
int j = i/0;
我们不需要try..catch
。你可以做到
int i = 2;
int j;
try{
j = i/0;
}catch(Exception e){
System.out.println("Divide By Zero");
}
但没有必要。另一方面,Checked Exception需要始终需要try...catch
。但是,由于Exceptions
被选中和未选中,因此该语句为false。
但是,最后一个是真的,因为运行时异常不需要try...catch
。你可以,但它没有必要。