Java 为什么我不能在try块中使用return语句

Java 为什么我不能在try块中使用return语句,java,Java,这里它给出了一个错误,因为方法必须返回整数,即使userCreationDao中的registerUser本身返回整数 public Integer registerUser(User user) { try{ return userCreationDao.registerUser(user); } catch(Exception e){ e.printStackTrace(); } } 即使发生异常,也可以修改该方法以返回值 publ

这里它给出了一个错误,因为方法必须返回整数,即使userCreationDao中的registerUser本身返回整数

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;
    }

}