输出结果:134
13434
(1)public static String output =""在Test类中定义的一个字符串对象是一个静态的作用与全局的变量。
第一次调用函数:将参数传递给public staitc void foo(int i)函数中,先执行if(i==1)语句(0!=1),在if语句没有定义语句块时,只执行if语句后的第一条语句,也就output+=“1”,好了现在output对象中的字符串编程了“1”,然后执行finally{output+=“3”;}(finally语句被称为不论如何都要被执行的)这条语句相当于是在将字符串中的1,3合并成了一个字符串,也就是“13”最后执行output+=“4”;最后output对象中的字符串的值就被改变成了“134”;因为(1)的关系所以在System.out.println(output)的输出结果就为"134";
第二次调用时因为(1)的关系output的值是“134”,在用foo(1)调用时,因为if(i==1)那么output+=1不会执行,
然后执行的是catch{output+=3;},(此时output的引用指向的字符串对象是"1343",)继续执行return;在执行的return;时相当于要结束这次调用,但是在finally语句中的语句块中的代码必须执行,所以return就暂时等在了那,接着执行finall{output+=3;},此时的output引用指向的字符串对象的值就变成了“13434”。
这就是步骤:代码如下:
- public class NewTest {
- public static String output = "";
-
- public static void foo(int i){
- try{
- if(i==1)
- throw new Exception();
- output+=1;
-
-
- }catch(Exception e){
-
- output+=2;
- return;
-
- }finally{
-
- output+=3;
-
-
- }
-
-
- output+=4;
- }
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- foo(0);
- System.out.println("output1="+output);
- foo(1);
- System.out.println("output2="+output);
- }
- }
复制代码
/*我编译的代码输出的结果为:output1=134
:output2=13423
*/ |