原文地址:http://qing0991.blog.51cto.com/1640542/1387200
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
static
int
NoException(){
int
i=
10
;
try
{
System.out.println(
"i in try block is:"
+i);
return
--i;
}
catch
(Exception e){
--i;
System.out.println(
"i in catch - form try block is:"
+i);
return
--i;
}
finally
{
System.out.println(
"i in finally - from try or catch block is:"
+i);
return
--i;
}
}
|
1
2
3
4
5
|
public
static
void
main(
String
[] args) {
System.out.println(
"=============NoException=================="
);
System.out.println(NoException());
System.out.println(
"==============================="
);
}
|
1
2
3
4
5
|
=============NoException==================
i
in
try
block
is
:
10
i
in
finally
- from
try
or
catch
block
is
:
9
8
===============================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
public
static
int
NoException1(){
int
i=
10
;
try
{
System.out.println(
"i in try block is:"
+i);
return
--i;
}
catch
(Exception e){
--i;
System.out.println(
"i in catch - form try block is:"
+i);
return
--i;
}
finally
{
System.out.println(
"i in finally - from try or catch block is:"
+i);
--i;
System.out.println(
"i in finally block is:"
+i);
//return --i;
}
}
|
1
2
3
4
5
6
|
=============NoException1==================
i
in
try
block
is
:
10
i
in
finally
- from
try
or
catch
block
is
:
9
i
in
finally
block
is
:
8
9
===============================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
static
int
WithException(){
int
i=
10
;
try
{
System.out.println(
"i in try block is:"
+i);
i = i/
0
;
return
--i;
}
catch
(Exception e){
System.out.println(
"i in catch - form try block is:"
+i);
--i;
System.out.println(
"i in catch block is:"
+i);
return
--i;
}
finally
{
System.out.println(
"i in finally - from try or catch block is--"
+i);
--i;
System.out.println(
"i in finally block is--"
+i);
return
--i;
}
}
|
1
2
3
4
5
6
7
8
|
=============WithException==================
i
in
try
block
is
:
10
i
in
catch
- form
try
block
is
:
10
i
in
catch
block
is
:
9
i
in
finally
- from
try
or
catch
block
is
--
8
i
in
finally
block
is
--
7
6
===============================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public
static
int
WithException1(){
int
i=
10
;
try
{
System.out.println(
"i in try block is:"
+i);
i=i/
0
;
return
--i;
}
catch
(Exception e){
System.out.println(
"i in catch - form try block is:"
+i);
return
--i;
}
finally
{
System.out.println(
"i in finally - from try or catch block is:"
+i);
--i;
System.out.println(
"i in finally block is:"
+i);
//return i;
}
}
|
1
2
3
4
5
6
7
|
=============WithException1==================
i
in
try
block
is
:
10
i
in
catch
- form
try
block
is
:
10
i
in
finally
- from
try
or
catch
block
is
:
9
i
in
finally
block
is
:
8
9
===============================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
public
static
int
WithException2(){
int
i=
10
;
try
{
System.out.println(
"i in try block is:"
+i);
i=i/
0
;
return
--i;
}
catch
(Exception e){
System.out.println(
"i in catch - form try block is:"
+i);
int
j = i/
0
;
return
--i;
}
finally
{
System.out.println(
"i in finally - from try or catch block is:"
+i);
--i;
--i;
System.out.println(
"i in finally block is:"
+i);
return
--i;
}
|
1
2
3
4
5
6
7
|
=============WithException2==================
i
in
try block
is
:10
i
in
catch - form try block
is
:10
i
in
finally -
from
try
or
catch block
is
:10
i
in
finally block
is
:8
7
===============================
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public
static
int
WithException3(){
int
i=
10
;
try
{
System.out.println(
"i in try block is:"
+i);
i=i/
0
;
//return --i;
}
catch
(Exception e){
System.out.println(
"i in catch - form try block is:"
+i);
//int j = i/0;
//return --i;
}
finally
{
System.out.println(
"i in finally - from try or catch block is:"
+i);
--i;
--i;
System.out.println(
"i in finally block is:"
+i);
//return --i;
}
return
--i;
}
|
1
2
3
4
5
6
7
|
=============WithException3==================
i
in
try
block
is
:
10
i
in
catch
- form
try
block
is
:
10
i
in
finally
- from
try
or
catch
block
is
:
10
i
in
finally
block
is
:
8
7
===============================
|
return语句并不是函数的最终出口,如果有finally语句,这在return之后还会执行finally(return的值会暂存在栈里面,等待finally执行后再返回)
结论二:
finally里面不建议放return语句,根据需要,return语句可以放在try和catch里面和函数的最后。可行的做法有四:
(1)
return语句只在函数最后出现一次。
(2)return语句仅在try和catch里面都出现。
(3)return语句仅在try和函数的最后都出现。
(4)return语句仅在catch和函数的最后都出现。
注意,除此之外的其他做法都是不可行的,编译器会报错。