您的位置:首页 > 编程语言 > Java开发

java中 try、catch、finally 执行顺序关系

2014-12-29 17:18 330 查看
1. finally 里 始终会被执行到, System.exit(0); 除这种被执行外。即使是发现了异常,如(3)中被注释的throw 异常,也会在抛异常前先执行finally.

2. 即使try中有return ,也是先执行 return 后面的语句完了之后,不立马return,而是去执行finally中的语句。

3. 当try中与finally里,同时出现return , 则只会返回 finally 中的return 结果。

4. finally中的值不能影响try中 即将返回的结果值。

以上对try中与finally中的结论,同样适用于catch 与 finally里,

1. finally 里 始终会被执行到, System.exit(0); 除这种被执行外。即使是发现了异常,如(3)中被注释的throw 异常,也会在抛异常前先执行finally.

2. 即使catch中有return ,也是先执行 return 后面的语句完了之后,不立马return,而是去执行finally中的语句。

3. 当catch中与finally里,同时出现return, 则只会返回 finally 中的return 结果。

4. finally中的值不能影响catch中 即将返回的结果值。

注意: 若finally中没有return 在 try或catch中有return ,那么在执行return 跟着语句之后,会把语句的结果新开辟一内存空间,直接把结果的存放此内存空间中。所以,finally中的值不能影响try或catch中即将return的结果

public static String getS(String s){

try {

s = "1";

return s; //执行到此处会把要返回的值保存,然后跳到finally中,s会被改变,但是返回的值仍是1

} catch (Exception e) {

e.printStackTrace();

}finally{

s = "2";

// return s; //若没注释 则回返回2

}

return s;//不会执行到

}

public class TestTry1

{

public static void main(String[] args) throws Exception{

System.out.println("client execute1 ------"+TestTry1());

}

public static Person TestTry1() throws Exception{

int i = 1;

try{

//throw new Exception();

//System.exit(0);

return new Person(++i,"try1"); //(1)

}catch(Exception e){

System.out.println(" catch run --------, this can not possible"); // (2)

//throw e ;

return new Person(i,"catch1"); // (3)

}finally{

++i;

new Person(i,"finally1"); // (4)

}

}

}

class Person

{

private int num = 0;

private String location ;

public Person(int num,String location){

this.num = num;

this.location = location;

System.out.println("------ "+location+" Person can execute---------- num="+num);

}

public String toString(){

return "{Person num=["+num+"]+ location=["+location+"]" ;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: