2015-04-26 17 views
1
public class A extends Exception {....} 
public class B extends A {....} 
public class C extends RuntimeException {....} 

给定方法签名A bar(B q)抛出C,下列哪个不会编译?给定方法签名A bar(B q)抛出C,下列哪个不会编译?

A.

A m() throws C { 
    return bar(new B()); 
}  

B.

m() { 
    return bar(new B()); 
} 

C.所有上述将编译。

答案是C.有可能与B中的错字,不知道。 我不理解这个问题,在概念上,它是什么问,等等。 我得到A是B的超类,而C单独作为RuntimeException,所以它不在编译时检查?
而我得到的方法里面必须是一个B时间的例外,它在两个答案都有效。 有人可以帮忙解释为什么这两个编译?

+1

为什么*他们不会*编译?你能解释一下你认为的矛盾吗? –

+0

我真的不明白B.答案是怎么回事。它不会抛出C方法签名。在m()前面有一个答案,而不是另一个答案。我不明白这些问题/答案选项的格式,以解释有关其功能的任何信息。 – sumitz1212

+2

由于方法签名中没有返回类型,B应该失败。 – Eranda

回答

0

C是一种运行时异常的。您不需要声明运行时异常,编译器会忽略它们。

Here's一个很好的解释上手。

声明异常并不意味着必然是一个例外。这只是意味着我们应该为抛出异常的可能性做好准备。

选项B将无法编译,但不是因为异常的。它不会编译,因为没有返回类型。选择A宣布了A类型的退货。

相关问题