Java 为什么我不能在try块中使用return语句
这里它给出了一个错误,因为方法必须返回整数,即使userCreationDao中的registerUser本身返回整数Java 为什么我不能在try块中使用return语句,java,Java,这里它给出了一个错误,因为方法必须返回整数,即使userCreationDao中的registerUser本身返回整数 public Integer registerUser(User user) { try{ return userCreationDao.registerUser(user); } catch(Exception e){ e.printStackTrace(); } } 即使发生异常,也可以修改该方法以返回值 publ
public Integer registerUser(User user) {
try{
return userCreationDao.registerUser(user);
} catch(Exception e){
e.printStackTrace();
}
}
即使发生异常,也可以修改该方法以返回值
public Integer registerUser(User user) {
int value =-1;
try{
value=userCreationDao.registerUser(user);
} catch(Exception e){
e.printStackTrace();
}
return value;
}您需要做这两件事中的一件,因为如果抛出异常,您的方法永远不会返回值
public Integer registerUser(User user) {
try{
return userCreationDao.registerUser(user);
} catch(Exception e){
e.printStackTrace();
return null;
}
}
或
原因是,如果您在
try
块中写入某个内容,它是特定的/仅限于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
导致错误,则会在异常中处理。然后代码在哪里?它已经过了返回语句,它无处可去。这就是您的代码声明其他内容的原因
Alternate流程到此,您需要在catch
块中有另一个return
语句,因此返回将在方法级别,因为代码将从try/catch
返回
为什么我不能在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
语句必须位于方法级别,而不是任何其他特定级别。似乎非常简单。在catch
中,不返回整数。你得退一个。如果发生异常,catch
触发,原始的return
将被跳过。等等……这个方法是否在userCreationDao
是其实例的类中?方法只需始终返回某个内容或抛出,这并不意味着返回必须在方法级别。Return可以在try-block和catch-block中,在try-catch-blockHi@Piro之外没有返回,即使try-and-catch中都有Return,这也是一个错误。在我的示例中,如果在catch块中重新写入return false,它将抛出一个错误。尝试一下,因为只有在达到条件时才返回。但这并不意味着你需要回到外面去试捕。如果(i)返回true,您可以在之后再次返回代码>并在catch中返回block@Piro,正确,如果它同时在try和catch中,那么它就在方法作用域中,因为它将从try/catch返回。@Piro,替代流,即在catch块中添加return语句在解决方案中已经提到过。您需要做这两件事之一。。。不,有很多选择,包括抛出null代码>,返回1代码>和while(true)代码>。
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;
}
}