finally语句一定会执行么? (转)
finally语句一定会执行么?
前几天有一个朋友去面试,被问到这样一个问题,如下
4
我记得学习的时候说有返回值的方法,执行完return语句后就会停止了;另一方面我还记得在try……catch语句中finally语句也是一定要执行的。于是在这里就产生了麻烦。试了一下,发现果然是执行了finally中的值。正好这两天公司在培训,我便把这个问题提给java很厉害的一个讲师,他用断点测试了一下,说是两个值都返回了……
我又改了一小下,在get方法中逐个添上了输出信息到控制台的语句,发现居然能执行。如下
输出:
First: a = 2
Second: a = 4
Third: a = 4
可这明明是一个需要返回一个int整数的方法啊。
不明白了,请大家解疑。
1
public class smallT
2
{
3
public static void main(String args[])
4
{
5
smallT t = new smallT();
6
int b = t.get();
7
System.out.println(b);
8
}
9
public int get()
10
{
11
try
12
{
13
return 2 ;
14
}
15
catch (Exception e)
16
{
17
return 3 ;
18
}
19
finally
20
{
21
return 4 ;
22
}
23
}
24
}
25
输出:
public class smallT2
{3
public static void main(String args[])4
{5
smallT t = new smallT();6
int b = t.get();7
System.out.println(b);8
} 9
public int get()10
{11
try 12
{13
return 2 ;14
} 15
catch (Exception e)16
{17
return 3 ;18
} 19
finally 20
{21
return 4 ;22
} 23
} 24
} 25
4
我记得学习的时候说有返回值的方法,执行完return语句后就会停止了;另一方面我还记得在try……catch语句中finally语句也是一定要执行的。于是在这里就产生了麻烦。试了一下,发现果然是执行了finally中的值。正好这两天公司在培训,我便把这个问题提给java很厉害的一个讲师,他用断点测试了一下,说是两个值都返回了……
我又改了一小下,在get方法中逐个添上了输出信息到控制台的语句,发现居然能执行。如下
1
public class test
2

{
3
public static void main(String args[])
4
{
5
test t = new test();
6
int b = t.get();
7
System.out.println("Third: a = "+b);
8
}
9
public int get()
10
{
11
try
12
{
13
System.out.println("First: a = "+2);
14
return 2;
15
}
16
catch(Exception e)
17
{
18
System.out.println(3);
19
}
20
finally
21
{
22
System.out.println("Second: a = "+4);
23
return 4;
24
}
25
}
26
}
27
public class test2


{3
public static void main(String args[])4

{5
test t = new test();6
int b = t.get();7
System.out.println("Third: a = "+b);8
}9
public int get()10

{11
try12

{13
System.out.println("First: a = "+2);14
return 2;15
}16
catch(Exception e)17

{18
System.out.println(3);19
}20
finally21

{22
System.out.println("Second: a = "+4);23
return 4;24
}25
}26
}27
输出:
First: a = 2
Second: a = 4
Third: a = 4
可这明明是一个需要返回一个int整数的方法啊。
不明白了,请大家解疑。
haohao
2007-03-12 18:14:24
评论:0
阅读:96
引用:0
