考虑以下接口:
package hf;
public interface BadInterface
{
void meth() throws Exception;
}
通过以下类实现:
package hf;
public class apples implements BadInterface
{
public static void main(String[] args)
{
new apples().meth();
}
public void meth()
{
System.out.println("Ding dong meth.");
}
}
尽管meth()是引发异常的方法,但是方法meth()的调用者不必处理或声明异常,但程序可以成功运行。为什么会这样呢?它是否违反了以下规则:无论何时调用引发异常的方法,都需要捕获该异常或声明自己抛出该异常?
实现接口方法时,可以声明所抛出的异常少于接口中列出的异常。
当你打电话new apples().meth()
,你调用meth()
上的apples
实例。编译器知道这不会抛出任何东西,所以很好。
你做完了吗:
BadInterface foo = new apples(); // Note: should be Apples (code style)
foo.meth();
那么您将需要捕获在接口中声明的异常,因为编译器仅知道它正在处理BadInterface
实例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句