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

时间:2018-02-28 03:40:03

标签: java

这里给出错误,因为方法必须返回Integer,即使userCreationDao中的registerUser返回Integer本身。

public Integer registerUser(User user) {
    try{
        return userCreationDao.registerUser(user);
    } catch(Exception e){
        e.printStackTrace();
    }
}

3 个答案:

答案 0 :(得分:1)

原因是,如果你在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语句,因此返回将在方法级别,因为代码将是从try/catch

返回
  

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

您可以在try块中使用return语句,但您还必须在try块之外放置另一个返回。

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语句必须是方法级别而不是任何其他特定级别。

答案 1 :(得分:0)

即使发生异常,您也可以修改方法以返回值。

 public Integer registerUser(User user) {
int value =-1;
try{
    value=userCreationDao.registerUser(user);
} catch(Exception e){
    e.printStackTrace();
}
return value;

}

答案 2 :(得分:0)

您需要执行以下两项操作之一,因为如果抛出异常,您的方法永远不会返回值。

public Integer registerUser(User user) {
    try{
        return userCreationDao.registerUser(user);
    } catch(Exception e){
        e.printStackTrace();
        return null;
    }
}

public Integer registerUser(User user) {
    try{
        return userCreationDao.registerUser(user);
    } catch(Exception e){
        e.printStackTrace();
    }
    return null;
}