Java基础 - 对方法中的返回类型和返回语句有点混淆

oks*_*s16 3 java return

我的理解是,在Java中,如果方法声明了一个返回类型,如果我们不在方法中放置一个return语句,编译就会失败.但是以下代码成功编译.

 public int test() throws Exception{
        throw new Exception("exception");
    }
Run Code Online (Sandbox Code Playgroud)

现在我有点困惑.我认为我的理解是错误的.有人可以澄清一下吗?谢谢.

JB *_*zet 10

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

什么是无效的将是这样,因为如果i <= 0,没有返回任何内容,并且没有抛出异常:

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

如果改为,它将是有效的

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

  • 我想补充一点,这是返回值的正常方法.Excelption是一种处理可能发生的错误的不同机制.两者都不相等,不应使用异常机制代替返回,以提供将值传递给调用者的其他方法. (2认同)