原因是,如果您在 try 块中写入某些内容,则它是特定/仅限于尝试块的,即如果您在 try 块内初始化变量,则不能在其范围之外使用它。下面的代码会导致编译时错误。
public static void main(String[] args) {
// TODO Auto-generated method stub
try{
int a=10;
}catch(Exception e){
System.out.println(e);
}
System.out.println(a);
}
以类似的方式,如果您在 try 块中返回某些内容,则其范围仅限于 try 块,但必须在方法级别。
想象一个例子,你在 try 块中的 return 语句之前写了一些东西,如下所示:
public Integer registerUser(User user) {
try{
// some code
return userCreationDao.registerUser(user);
} catch(Exception e){
e.printStackTrace();
}
}
如果//some code 导致错误,则会在异常中处理。然后??代码在哪里?它已经过了 return 语句,它无处可去。这就是您的代码另有说明的原因。
替代流程是,您需要在 catch 块中有另一个 return 语句,因此返回将在方法级别,因为代码将从 @ 返回987654331@
为什么我不能在 try 块中使用 return 语句
您可以在try 块内使用return 语句,但您也必须在try 块外放置另一个return。
public class tryBloc {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(sayHello(false));
}
public static boolean sayHello(boolean i){
try{
if(i)
return true;
}catch(Exception e){
System.out.println(e);
}
return false;
}
}
如果你在调用 sayHello 方法时传递了true,它将从try 块返回。
return 语句必须在方法级别,而不是在任何其他特定级别。