黑马程序员技术交流社区
标题:
这个程序的执行结果怎么是8 求解释
[打印本页]
作者:
我自信我很牛
时间:
2013-4-4 01:42
标题:
这个程序的执行结果怎么是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{
a += 1;
}
a += 2;
return a;
}
作者:
李尧
时间:
2013-4-4 02:36
a==5 catch Exception 因为catch没有做任何处理 所以继续往下执行
由于finally必定执行 a+=1
继续执行a+=2
最终 a=8
作者:
杜加璇
时间:
2013-4-4 08:46
开始a=5;if()里为true 继续执行throw new Exception(); 在catch里没做任何操作 final是必须执行的。执行a+=1 ,再执行a+=2,所以a=8;
作者:
林声荣
时间:
2013-4-4 09:04
因为变量a初始值是5,当判断if (a == 5) { throw new Exception(); //制造一个异常},捕捉异常后有没进行处理,而finally中的代码是一定会执行,此时 a = a +1;接着程序还没结束,最后又执行了 a = a+2; 最终 return a = 8;
作者:
庞立森
时间:
2013-4-4 09:05
首先你没有明白finally的含义,finally{}里面的执行语句是一定执行的,不管你是在catch里面是处理还是继续抛出异常,还是不做任何处理,finally里面的都执行
下面来看看你的代码
开始的时候你定义int a=5;try{}catch(){}完了继续往下走开始执行finally里面的语句,a+=1;这个语句执行完a的值就是6了,下面你a+=2;这时a的值是8,最后你return的就是8
作者:
谢辉林
时间:
2013-4-4 09:18
首先finally{}里面的语句是一定会执行的,当a=5时捕获到异常,在catch (Exception e) {}不做任何处理,所以就执行finally{}(此时a=6)里面的语句,执行完继续往下执行(a += 2;此时a=8。所以输出是8);
作者:
我自信我很牛
时间:
2013-4-4 10:27
finally一定被执行我知道,但是finally后的为什么也执行了应该是直接返回哦,我有另外一个程序运行结果是直接返回了,没有执行finally后的语句。。
作者:
朱德帅
时间:
2013-4-4 12:59
本来就是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;
}
作者:
胡滨
时间:
2013-4-4 13:10
{:soso_e143:} 结果是8啊。是不是你想实现的return语句放错了?
作者:
黄玉昆
时间:
2013-4-4 17:06
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者:
刘林虎
时间:
2013-4-4 18:00
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.
}
作者:
赵家阳
时间:
2013-4-5 00:18
本帖最后由 赵家阳 于 2013-4-5 00:22 编辑
public static void main(String[] args) {
int a = 5; //定义一个变量作为参数传入函数
try{
System.out.println("要try了");
a = increment(a);
System.out.println(a); //打印函数返回值
}catch(Exception e){
e.toString();
}
System.out.println("在这里:"+a);
}
private static int increment(int a) throws Exception { //定义函数increment(),参数int,返回一个int
try { //捕捉产生的异常
if (a == 5) {
throw new Exception(); //制造一个异常,
}
}
finally{
a += 1;
}
a += 2;
return a;
}
复制代码
这是我写的。如果a==5,那么就报错啦,但是a的值没有变。LZ的代码,有catch语句,将异常处理掉,只不过没有任何异常信息输出。但是,finally语句一定会执行,所以finally执行完,a=6,下面,再执行,a=8.
作者:
london1908
时间:
2013-4-5 13:04
finally{
a += 1;
}
a += 2;
return a;
}
无轮前面是否执行,这个最后都会执行,所以结果为5+1+2=8
作者:
杨成
时间:
2013-4-5 21:05
finally{}中的语句是无论catch()是否捕捉到异常它都会执行,所以在finally里面就一个自加1,返回前再执行自加2,最后将8返回。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2