Java基础 - 关于方法的返回类型和返回语句有些困惑

3
我的理解是,如果Java方法声明了返回类型,那么如果在方法中不加return语句,编译会失败。但下面这段代码却可以成功编译。
 public int test() throws Exception{
        throw new Exception("exception");
    }

现在我有点困惑了。我觉得我的理解是错误的。可以有人帮我澄清一下吗? 谢谢。

1个回答

10

Java方法必须返回或抛出异常。如果所有可能的代码路径都不导致返回或异常,则编译器会拒绝编译。这个方法中唯一的代码路径是抛出异常,所以它是有效的。

如果i <= 0,则以下内容将无效,因为没有返回值,也没有抛出异常:

public int test() throws Exception {
    int i = new Random().nextInt();
    if (i > 0) { 
        throw new Exception("exception");
    }
}

如果改成这样是正确的

public int test() throws Exception {
    int i = new Random().nextInt();
    if (i > 0) { 
        throw new Exception("exception");
    }
    else {
        return 0;
    }
}

2
我想补充一下,返回值是正常的方式。异常是处理可能发生的错误的不同机制。两者并不相等,异常机制不应该用来替代返回值,以提供给调用者额外的通信方式。 - Snicolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接