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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public static void main(String[] args) {
  int a = 5;       //定义一个变量作为参数传入函数
  System.out.println(increment(a)); //打印函数返回值
}
private static int increment(int a) { //定义函数increment(),参数int,返回一个int
  try {        //捕捉产生的异常
   if (a == 5) {     
    throw new Exception();  //制造一个异常,
   }
  } catch (Exception e) {
          // 捕捉后不做任何操作
  }finally{
   a += 1;
  }
  a += 2;
  return a;
}

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

13 个回复

正序浏览
finally{}中的语句是无论catch()是否捕捉到异常它都会执行,所以在finally里面就一个自加1,返回前再执行自加2,最后将8返回。
回复 使用道具 举报
finally{
   a += 1;
  }
  a += 2;
  return a;
}
无轮前面是否执行,这个最后都会执行,所以结果为5+1+2=8
回复 使用道具 举报
本帖最后由 赵家阳 于 2013-4-5 00:22 编辑
  1. public static void main(String[] args) {
  2.      int a = 5;       //定义一个变量作为参数传入函数
  3.      try{
  4.       System.out.println("要try了");
  5.       a = increment(a);
  6.       System.out.println(a); //打印函数返回值
  7.      }catch(Exception e){
  8.       e.toString();
  9.      }
  10.      System.out.println("在这里:"+a);
  11. }
  12. private static int increment(int a) throws Exception { //定义函数increment(),参数int,返回一个int
  13.    try {        //捕捉产生的异常
  14.       if (a == 5) {     
  15.        throw new Exception();  //制造一个异常,
  16.       }
  17.    }
  18.    finally{
  19.       a += 1;
  20.    }
  21.    a += 2;
  22.    return a;
  23. }
复制代码
这是我写的。如果a==5,那么就报错啦,但是a的值没有变。LZ的代码,有catch语句,将异常处理掉,只不过没有任何异常信息输出。但是,finally语句一定会执行,所以finally执行完,a=6,下面,再执行,a=8.
回复 使用道具 举报
public static void main(String[] args) {
  int a = 5;       //定义一个变量作为参数传入函数
  System.out.println(increment(a)); //打印函数返回值
}
private static int increment(int a) { //定义函数increment(),参数int,返回一个int
  try {        //捕捉产生的异常
   if (a == 5) {     
    throw new Exception();  //制造一个异常,这里条件满足
   }
  } catch (Exception e) {
          // 捕捉后不做任何操作
  }finally{ //finally{}里面的执行语句是一定执行的.
   a += 1;//a为5 a+=1等同于a=a+1, 所以a为6 程序继续运行.
  }
  a += 2;//a为6, a+=2就为8.
  return a;//返回 所以a就为8.
}


回复 使用道具 举报
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
{:soso_e143:}  结果是8啊。是不是你想实现的return语句放错了?
回复 使用道具 举报
本来就是8啊!
public static void main(String[] args) {
  int a = 5;       //定义一个变量作为参数传入函数
  System.out.println(increment(a)); //打印函数返回值
}
private static int increment(int a) {
  try {         
   if (a == 5) {     //因为a是5所以这里满足
    throw new Exception();  //这里抛异常后被你又抓回来了
   }
  } catch (Exception e) {
          // 捕捉后不做任何操作
  }finally{  //接着要执行finally这里,因为finally是一定执行的。所以a+1变成6了。
   a += 1;
  }
//程序这里继续还会走,没有return,break;
  a += 2; //这里a又加2,变成8了,接着返回了。
  return a;
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
finally一定被执行我知道,但是finally后的为什么也执行了应该是直接返回哦,我有另外一个程序运行结果是直接返回了,没有执行finally后的语句。。
回复 使用道具 举报
首先finally{}里面的语句是一定会执行的,当a=5时捕获到异常,在catch (Exception e) {}不做任何处理,所以就执行finally{}(此时a=6)里面的语句,执行完继续往下执行(a += 2;此时a=8。所以输出是8);
回复 使用道具 举报
首先你没有明白finally的含义,finally{}里面的执行语句是一定执行的,不管你是在catch里面是处理还是继续抛出异常,还是不做任何处理,finally里面的都执行
下面来看看你的代码
开始的时候你定义int a=5;try{}catch(){}完了继续往下走开始执行finally里面的语句,a+=1;这个语句执行完a的值就是6了,下面你a+=2;这时a的值是8,最后你return的就是8

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
因为变量a初始值是5,当判断if (a == 5) { throw new Exception();  //制造一个异常},捕捉异常后有没进行处理,而finally中的代码是一定会执行,此时 a = a +1;接着程序还没结束,最后又执行了 a = a+2; 最终 return a = 8;

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

回复 使用道具 举报
开始a=5;if()里为true 继续执行throw new Exception();   在catch里没做任何操作 final是必须执行的。执行a+=1  ,再执行a+=2,所以a=8;
回复 使用道具 举报
a==5  catch Exception 因为catch没有做任何处理 所以继续往下执行
由于finally必定执行 a+=1  

继续执行a+=2

最终 a=8
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马