如果我们在try中给出这样的返回语句,那么执行的顺序是什么
1 2 3 4 5 6 7 8 9 10
   | try{ 
--- ---- 
----- 
return a; 
} 
 
catch{ 
} 
finally{ 
}  | 
 
这里是什么样的执行顺序,如果有回报在尝试。请告诉我
		
		
- 你为什么不自己试试呢?这是微不足道的测试。
 
- @格罗德里格斯谢谢
 
 
	  
http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html jls-14.20.2
finally总是执行。如果try中有一个return,其余的try和catch不执行,则finally执行(从内到外),然后函数退出。
		
		
- 不准确。如果调用System.exit()或JVM崩溃,则不会执行finally。
 
- 是的,如果你把电脑从墙上拔掉,它也不会执行。这是同一种情况,不需要资格认证。
 
- @或者恐龙会吃掉你的机器。但是调用System.exit()是一个你应该注意的情况。(我同意JVM崩溃…)
 
- @Maroun Maroun是的,虽然诚实地说System.exit()的表现,但它本质上是由内部引起的系统崩溃。可能是关闭任何Java应用程序的最肮脏的方法,它似乎不能保证调用后可以完成多少操作,除非您有一个非常非常谨慎的Edcx1·5对您必须完成的任务的关闭钩子。我有一个应用程序在调用System.exit(0)时还没有将许多兆字节转储到文件中,而且很难或不可能完成它。老实说,最好不要打电话给System.exit()。
 
- @Maroun Maroun看起来像关机挂钩joining must complete tasks is considered as blocking trapped and will be terminated;您必须确保关机挂钩实际上自己完成工作。所以我想出来了。我仍然认为exit()是关闭机器的一个坏方法,如果你有更好的方法来处理它,应该避免。
 
 
	  
首先,你需要去获取文档并正确理解这个概念,你可以参考这些文档。
http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html
http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html jls-14.20.2
在StackOverflow上,没有人应该解释,因为这个站点基本上不是一个完整的目的。
 
在try-catch的处理中,当你从try块来的return东西,它将超出try-catch-finally的范围。因为catch块只接受try抛出的内容。不是返回的内容,现在当您从try块返回时,它不会到达try端,最终不会被执行,它将退出try-catch-finally块,返回到您的代码。
如果try中有返回,则控件将转到finally块,执行存在的代码,然后退出。因此,在此期间,如果finally块中对try中返回的变量有任何更改,并且如果finally中返回相同的变量,则返回最新的变量。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   | try {
             i  = 11;
             return i ;
            } catch (Exception e ) {
                // TODO: handle exception
            } finally{
                i  = 12;
                return i ; --> This will be returned
             }
        //return i;
     }  | 
 
但是如果只有修改,最终没有重试,那么在try中返回的值将是最终值。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
   |  try {
             i  = 11; --> this will be returned
              return i ;
            } catch (Exception e ) {
                // TODO: handle exception
            } finally{
                i  = 12; -- this will be executed
             }
        //return i;
     }  | 
 
。
通常情况下,try-catch-finally的命令执行命令是先执行try,然后如果exception特洛伊并被抓获,execute将执行catch。如果捕获异常或未捕获异常,则始终执行finally。
如果你的try中有return,那么try中的执行将在那里停止,并将执行finally。如果exception在该return之前抛出并捕获,那么将遵循正常的执行命令。
让我们运行以下代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | public static void main (String[] args ) {
    String[] arr =getInfo ();
    for(String i :arr ){
        System. out. println(i );
    }
}
public static String[] getInfo (){
    String[] arr =new String[3];
  try {
      arr [0]="try";
      return arr ;
  }catch (Exception e ){
      arr [1]="catch";
      return arr ;
  }finally {
      arr [2]="finally";
      return arr ;
  }
}  | 
 
输出
1 2 3
   | try // return in try 
null 
finally // returning value in finally.  | 
 
号
现在这个输出解释你想要的每件事。finally运行,而try中有return运行。
如果你的try中有System.exit(0),finally将不会执行。
		
		
- 当您自然地设置数组的值时,您指定的是顺序,这就是顺序
 
 
	  
无论情况如何,finally将始终执行。如果成功执行try块,则不会执行catch块。如果try块抛出异常,那么catch块将执行
 
在对返回语句进行评估之后,始终执行finally。
		
		
- 那么,返回语句中的表达式仍将在finally子句之前进行计算。