gpt4 book ai didi

java - 具有未检查异常与已检查异常的接口(interface)声明

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:30:06 24 4
gpt4 key购买 nike

我在下面搜索了我的问题的可能答案,但没有找到。

我了解已检查异常和未检查异常之间的区别,以及程序员可以/必须使用它们做什么。但是,当涉及到接口(interface)时,我不太明白编译器如何解释未经检查的异常。

最近,我正在编写类似于以下的接口(interface)和实现:

public interface Operation {
int operate(int x, int y) throws ArithmeticException;
}

public class Divide implements Operation {
@Override
public int operate(int x, int y) throws ArithmeticException {
try {
return x / y;
} catch (ArithmeticException ex) {
System.out.println("Division error!");
}
}
}

这就是我感到困惑的地方。以下实现也将编译:

public class Divide implements Operation {
@Override
public int operate(int x, int y) {
return x / y;
}
}

为什么编译器不关心我在接口(interface)中声明方法抛出异常?我知道未经检查的异常是运行时异常,不需要程序员处理它们,但不明白为什么当我在界面中明确声明我希望处理异常时,它不会强制我处理它。

有人可以解释为什么编译器会允许这种情况发生吗?

最佳答案

您将“处理”异常与继承规则混淆了。当您实现或重写一个方法时,没有规则规定新方法必须抛出与已实现/重写的方法完全相同的异常。唯一的规则是它不能抛出超出父方法允许异常范围的已检查异常。将界面视为与外界建立契约。它说,“任何调用此方法的人都必须准备好处理这些类型的异常”。实现者可以自由地抛出异常,知道它会被处理,但他们绝不必须抛出它。

关于java - 具有未检查异常与已检查异常的接口(interface)声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com