您的位置:首页 > 其它

当try、catch、finally遭遇return

2014-01-27 13:29 211 查看
以往认为函数只要执行到return语句便会返回结果并终止,然而这时错误的,因为这存在特例。

掌握下面几条原则就可以完全解决“当try、catch、finally遭遇return”的问题。

原则:1、finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行。

2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。

3、函数必须确保有唯一返回值

说明: try中如果包含return语句则catch块和finally块中必须至少有一个含有return语句。或者try中通过throw new Exception();抛出异常,则catch与finally中至少有一个return语句。因为try块会假定其中发生异常,且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。

4、return语句的优先级是finally最大,且try与catch块中只有两者之一的return语句会被执行。为保证函数只有一个返回值则返回优先级最大的值。

下面通过例子讲解上面的三条原则

public class TestReturn {
public static void main(String[] args) {
TestReturn t1 = new TestReturn();
int k = 0;
System.out.println(t1.test1(k));
}

public int test1 (int k) {

try {
k = k + 1;
System.out.println("try"+ k);
return k;
} catch (Exception e) {
k = k + 2;
System.out.println("catch"+ k);
return k;
} finally {
k = k + 3;
System.out.println("finally"+ k);
return k;
}
}
}


结果:

try1

finally4

4

说明:try中执行完输出后,由于其return优先级并不最高,所以不会返回,继续执行finally语句块并返回

public class TestReturn {

public static void main(String[] args) {
TestReturn t1 = new TestReturn();
int k = 0;
System.out.println(t1.test1(k));
}

public int test1 (int k) {
try {
throw new Exception();
} catch (Exception e) {
k = k + 2;
System.out.println("catch"+ k);
return k;
} finally {
k = k + 3;
System.out.println("finally"+ k);
return k;
}
}
}


结果:

catch2

finally5

5

转自:http://hi.baidu.com/cloudcomputing/item/7d6bf09c2bec73f628164729
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: