您的位置:首页 > 其它

return语句在try-catch-finally中的执行顺序

2010-05-17 21:47 633 查看
return语句在try-catch-finally中的执行顺序,这个问题很早在Q群上听闻,今天结合网上资料以及自己的实践,大体明白了:

在try范围执行时抛出异常后,try里面剩余的代码不再执行,直接跳到catch

public class returnDemo{
  public static void main(String[] args)
  {
    Finally e = new Finally();
    System.out.println(e.tryThis());
  }
  
  public int tryThis()
  {
    try{
      System.out.println("1");
      throw new Exception();
      return 1;
    }catch(Exception ex){
      System.out.println("2");
      return 2;
    }finally{
      System.out.println("4");
      return 3;
    }
    //System.out.println("5");  
  }
}

 
          在编译时,以上已经发生错误了:
          returnDemo.java:13: 无法访问的语句
                 return 1;
                ^
                1 错误
          可见在throw 异常后,return 1就无法访问(执行)了!
          在这里System.out.println("5");  给注释了,否则编译时也会提示“无法访问的语句”!道理相信大家明白!
finally的return优先级最高

public class Finally{
  public static void main(String[] args)
  {
    Finally e=new Finally();
    System.out.println(e.tryThis());
  }
  
  public int tryThis()
  {
    try{
      System.out.println("1");
      throw new Exception();
    //return 1;
    }catch(Exception ex){
      System.out.println("2");
      return 2;
    }finally{
      System.out.println("4");
      return 3;
    }
  }
}

             执行结果:
            1
            2
            4
            3
            说明catch的return 2; 是无效的,因为return 3; 首要地返回了结果。 如果让try执行return,结果也是表明try的return 1;是无效的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  exception string class