【发布时间】:2012-01-07 10:22:45
【问题描述】:
我的理解是,在Java中,如果一个方法声明了一个返回类型,如果我们不在方法中放置一个return语句,编译就会失败。但是下面的代码编译成功。
public int test() throws Exception{
throw new Exception("exception");
}
现在我有点困惑。我认为我的理解是错误的。有人可以澄清一下吗? 谢谢。
【问题讨论】:
我的理解是,在Java中,如果一个方法声明了一个返回类型,如果我们不在方法中放置一个return语句,编译就会失败。但是下面的代码编译成功。
public int test() throws Exception{
throw new Exception("exception");
}
现在我有点困惑。我认为我的理解是错误的。有人可以澄清一下吗? 谢谢。
【问题讨论】:
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;
}
}
【讨论】: