try{
   代码1;
   return 1;
}catch(Exception e){
   代码2;
   return 2;
}finally{
   代码3
}
return 3;
我的代码如果执行了[ return 1 ],那么finally{}里面的语句会执行吗?
还有如果执行了[ return 2 ],那么finally{}里面的语句会执行吗?

解决方案 »

  1.   

    finally的优先级别比return高!  return 之前执行finally里的代码
      

  2.   

    除非System.exit(0);
    否则都会执行代码3
      

  3.   

    finally中的代码是必然要执行的。
    如果try中发生异常,则catch中的代码执行,并且finally中的代码执行,当catch中的代码没有再次抛出异常,则finally后面的代码执行。
    public class  Test
    {
    public static void main(String[] args) throws Exception
    {
    try{
    throw new Exception();
    }catch(Exception e){
    System.out.println("Exception!!!!!");
    //throw e;
    }finally{
    System.out.println("Finally!!!!!");
    }
    System.out.println("After!!!!!");
    }
    }
    当你把//throw e;不注释的时候,在编译的时候会告诉你System.out.println("After!!!!!");是执行不到语句。