try {
i = 1;
return i;
} catch (Exception e) {
return i = 3;
} finally {
i = 2;
//System.out.println(i);
}为什么返回的是1,而不是2??
请指教
i = 1;
return i;
} catch (Exception e) {
return i = 3;
} finally {
i = 2;
//System.out.println(i);
}为什么返回的是1,而不是2??
请指教
如果你的i在外面return的话就是2了public int goTest() {
int i;
try{
i = 1;
//return i;
}catch(Exception e) {
i = 3;
e.printStackTrace();
}finally {
i = 2;
}
System.out.println(i);
return i;
}
public static void main(String[] args) {
Test t = new Test();
t.goTest();
}
i = 1;
return i; //在这里把返回值压栈,即返回值 1 压栈
} catch (Exception e) {
return i = 3;
} finally {
i = 2; //然后执行 i = 2
//System.out.println(i);
}
//然后函数调用结束,返回值 1 出栈如果在finally处也调用 return i,那么新的返回值被压栈,最后返回的就是finally的return
把2赋给i,但实际这时,return已经不再用i了
如果以下代码,就会出现你预想的结果
public static void main(String args[]) {
int[] k = new T1().t1();
System.out.print(k[0]);
} public int[] t1() { int[] i = {1,2,3};
try {
i[0] = 11;
return i;
} catch (Exception e) {
i[0] = 21;
return i;
} finally {
i[0] = 31;
System.out.println(i);
}
}输出为31,也就是在finally中修改过的结果
finally都会执行,如果有return语句,那它将在return之前执行再返回。
我们在开发过程中可这样使用:try {
//打开数据库连接
//开始事务
//操作数据库
//返回操作结果
} catch (Exception e) {
//回滚事务
//返回错误代码
e.printStackTrace();
}finally{
//关闭数据库
}
//不过不建议一个方法内出现多个return语句,你可以用一个变量接收它,最后返回这个变量
int i = 0;
try{
i = 1;
}catch(Exception e){
}finally{
i = 2;
}
System.out.println(i);
int i = 0;
try{
i = 1;
return ;
}catch(Exception e){
}finally{
i = 2;
System.out.println(i);
}
我运行的结果是2,按照楼主的写法,好像编译不会通过。需要扩大i的作用域
finally的代码会在return前执行