这里给出错误,因为方法必须返回Integer,即使userCreationDao中的registerUser返回Integer本身。
public Integer registerUser(User user) {
try{
return userCreationDao.registerUser(user);
} catch(Exception e){
e.printStackTrace();
}
}
答案 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;
}