增求return的用法
public class Test3{
public static int output=0;
public static void foo(int i){
try{
if(i==1) throw new Exception();
}
catch(Exception e){
output =2;
return; ////#
}
finally{output =3;
}
output =4; ////*
}
public static void main(String args[]){
foo(1);System.out.println(output);
}
}
当我把#行去掉时,×行要执行,why??我不晓得这个return的用法,谁帮帮我 tr catch finally三个运行关系
有finally时是必须运行的,就算你在catch中有return ,finally中的代码也要执行,
如果在执行finally中碰到return了就直接回到catch继续执行,比如你的代码,执行到#是return不会马上执行它,而是执行finally,然后继续return(#)。如果#去掉那就不返回接着执行太try catch finally 整体之后的语句也就是*啦 i是先自加然后再用,也就是先自加3次,那么i就是4了 结果就是4 4 4了,不过你给的结果10,4,我也不知道为什么,我在vc上运行的结果和楼上的一样,一般情况下不建议使用这样的表达式,因为这样表达是在不同的编译器上结果可能不同的,
public static int output=0;
public static void foo(int i){
try{
if(i==1) throw new Exception();
}
catch(Exception e){
output =2;
return; ////#
}
finally{output =3;
}
output =4; ////*
}
public static void main(String args[]){
foo(1);System.out.println(output);
}
}
当我把#行去掉时,×行要执行,why??我不晓得这个return的用法,谁帮帮我 tr catch finally三个运行关系
有finally时是必须运行的,就算你在catch中有return ,finally中的代码也要执行,
如果在执行finally中碰到return了就直接回到catch继续执行,比如你的代码,执行到#是return不会马上执行它,而是执行finally,然后继续return(#)。如果#去掉那就不返回接着执行太try catch finally 整体之后的语句也就是*啦 i是先自加然后再用,也就是先自加3次,那么i就是4了 结果就是4 4 4了,不过你给的结果10,4,我也不知道为什么,我在vc上运行的结果和楼上的一样,一般情况下不建议使用这样的表达式,因为这样表达是在不同的编译器上结果可能不同的,