try catch finally
public class hello {
public static void main(String[] args) {
System.out.println(doSome());
}
public static String doSome(){
int i=100;
try{
return "try中的i:"+i;
}catch (Exception e){
e.printStackTrace();
i+=5;
return "catch中的i:"+i;
}finally {
i+=1;
System.out.println("finally此处被执行。");
System.out.println("finally中的i:"+i);
}
}
}
在此处可以看到,finally代码块被执行了。
finally {
i+=1;
System.out.println("finally此处被执行。");
System.out.println("finally中的i:"+i);
}
此处做了一个修改
i+=1;
和输出
System.out.println("finally此处被执行。"); System.out.println("finally中的i:"+i);
注意此时finally中是没有return
语句的情况下。此时即使修改了i
的值,但是是在finally
代码块中修改的,结束后不会对doSome()
方法体的int i=100;
修改,相当于只在finally
代码块作用域下生效,此时,在try中return "try中的i:"+i;
仍为未作修改的值int i=100;
可以看到输出try中的i:100
。
public class hello {
public static void main(String[] args) {
System.out.println(doSome());
}
public static String doSome(){
int i=100;
try{
return "try中的i:"+i;
}catch (Exception e){
e.printStackTrace();
i+=5;
return "catch中的i:"+i;
}finally {
i+=1;
System.out.println("finally此处被执行。");
System.out.println("finally中的i:"+i);
return "finally中的i:"+i;
}
}
}
此处做了一个修改
i+=1;
和输出
System.out.println("finally此处被执行。"); System.out.println("finally中的i:"+i);
以及
return "finally中的i:"+i;
注意此时finally中是有return
语句的情况下。此时修改了i
的值,也是在finally
代码块中修改的,在finally
代码块作用域下生效,但此时,在finally
中return "finally中的i:"+i;
此时会使工作栈中finally
代码块直接返回,返回的是修改了的finally作用域中的值,即做了修改的i+=1;
可以看到输出"finally中的i:"+i;
。即