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

本文深入探讨了Java中try、catch、finally块的执行流程,解释了finally块始终被执行的特点,无论是否抛出异常或存在return语句。通过实例展示了finally块如何影响变量值及返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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+"]" ;
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值