A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© j816326 中级黑马   /  2013-7-2 11:09  /  1543 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码
看看这个小程序的运行过程啊。不太理解。抛了异常会继续运行吗。最好给出运行过程。万分感谢

7 个回复

倒序浏览
学习学习!
回复 使用道具 举报
  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. }
复制代码
回复 使用道具 举报

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

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

懂了谢谢
回复 使用道具 举报
薛淑凯 发表于 2013-7-2 14:56
参数是0的时候依次执行try里的+=1  finally里的+=3  函数没有结束当然要继续执行+=4了 ...

恩,知道了谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马