黑马程序员技术交流社区

标题: 一个小知识点 [打印本页]

作者: j816326    时间: 2013-7-2 11:09
标题: 一个小知识点
  1. public class Test{
  2.         public static String output="";

  3.         public static void foo(int i){

  4.         try {

  5.         if(i==1){
  6.        
  7.         throw new Exception();
  8.        
  9.         }
  10.         output +="1";
  11.     }

  12.         catch(Exception e){

  13.         output+="2";

  14.         return;        
  15.         } finally{

  16.         output+="3";

  17.         }

  18.         output+="4";

  19.         }


  20.         public static void main(String args[]){

  21.         foo(0);

  22.         foo(1);  

  23.         }

  24. }
复制代码
看看这个小程序的运行过程啊。不太理解。抛了异常会继续运行吗。最好给出运行过程。万分感谢
作者: chensc    时间: 2013-7-2 11:51
学习学习!
作者: 薛淑凯    时间: 2013-7-2 12:07
  1. public class Test {
  2.         public static String output = "";
  3.         public static void foo(int i) {
  4.                 try {
  5.                         if (i == 1) {
  6.                                 throw new Exception();//抛出异常之后try块剩余部分不再执行
  7.                         }
  8.                         output += "1";
  9.                 }
  10.                 catch (Exception e) {
  11.                         output += "2";
  12.                         return;
  13.                 } finally {
  14.                         output += "3";//finally语句是在函数返回之后执行的
  15.                 }
  16.                 output += "4";
  17.         }
  18.         public static void main(String args[]) {
  19.                 //foo(0);
  20.                 foo(1);
  21.                 //参数是1时候抛出异常,+=1不再执行,接着捕获异常执行+=2,然后函数返回,执行finally语句,+=4不再执行.结果34
  22.                 System.out.println(output);
  23.         }
  24. }
复制代码

作者: j816326    时间: 2013-7-2 12:28
薛淑凯 发表于 2013-7-2 12:07

参数为1的时候  好像不对啊 还有参数为0的时候为什么+=4也执行了
作者: wangpan    时间: 2013-7-2 12:52
foo(0):
      因为参数不等于1,所以不会抛出异常,不会走到catch语句,程序执行完try语句块,接着执行try语句块外面的output += "4";,所以此时output内容为“134”。
foo(1):
      因为参数等于1,所以程序直接抛出异常,不会再执行output += "1";,就走到了catch语句中,return就返回了,但是函数返回finally也执行,所以此时output内容为“13423”。其中“23”是第二个foo(1)执行的结果。
作者: 薛淑凯    时间: 2013-7-2 14:56
j816326 发表于 2013-7-2 12:28
参数为1的时候  好像不对啊 还有参数为0的时候为什么+=4也执行了

参数是0的时候依次执行try里的+=1  finally里的+=3  函数没有结束当然要继续执行+=4了
作者: j816326    时间: 2013-7-2 15:11
wangpan 发表于 2013-7-2 12:52
foo(0):
      因为参数不等于1,所以不会抛出异常,不会走到catch语句,程序执行完try语句块,接着执行tr ...

懂了谢谢
作者: j816326    时间: 2013-7-2 15:11
薛淑凯 发表于 2013-7-2 14:56
参数是0的时候依次执行try里的+=1  finally里的+=3  函数没有结束当然要继续执行+=4了 ...

恩,知道了谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2