为什么在这种情况下引发异常的方法的调用者不必处理该异常?

用户名

考虑以下接口:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么在这种情况下Mockito doThrow不会引发异常?与模拟零互动

AJAX错误:TypeError:在这种情况下无法访问“参数”,“被调用者”和“调用者”

为什么抓IOException异常需要在这种情况下,

为什么在这种情况下抛出检查异常类型?

在这种情况下处理异常的最佳方法是什么

为什么在这种情况下jquery不调用成功处理程序?

为什么在没有引发异常的情况下杰斯特说有断言调用?

如何在没有 UnhandledPromiseRejectionWarning 的情况下从 Promise 向调用者抛出异常

为什么在这种情况下我不必引用字符串变量?

为什么在调用者而不是有问题的行上引发异常

在这种情况下如何防止空引用异常

如何从调用者的范围引发异常?

当Java方法引发异常时,它会返回给JNI调用者什么?

批处理脚本:在这种情况下,为什么不能重定向标准输出?

为什么在这种情况下mouseout处理程序的行为如此不合逻辑?

为什么Python处理KeyError和IndexError的方式不同(在这种情况下)?

为什么在这种情况下事件处理程序不起作用?

为什么在这种情况下超出了最大调用堆栈?

为什么在这种情况下没有调用最合适的构造函数?

为什么在这种情况下需要引用/借用?

为什么在这种情况下转发参考无效?

为什么在这种情况下Array的元素是可选的?

为什么std :: forward在这种情况下无用

为什么在这种情况下会有UnboundLocalError?

为什么在这种情况下x = 44?

为什么在这种情况下创建循环?

在这种情况下,为什么Python比C ++快?

为什么在这种情况下引用模板参数?

为什么在这种情况下使用BufferedReader?