是否必须处理运行时异常?

时间:2017-05-17 17:32:05

标签: java exception

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。谁是对的?我误解了什么吗?

3 个答案:

答案 0 :(得分:1)

  

一个。所有Exception类都扩展了Error。

     

湾所有类的Error都扩展了Exception。

     

d。所有Exception类都扩展为Throwable。

ExceptionError都延伸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。你可以,但它没有必要。