如果我们在try中给出这样的返回语句,那么执行的顺序是什么
| 12
 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中返回相同的变量,则返回最新的变量。
| 12
 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中返回的值将是最终值。
| 12
 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之前抛出并捕获,那么将遵循正常的执行命令。
让我们运行以下代码
| 12
 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;
  }
} | 
输出
| 12
 3
 
 | try // return in trynull
 finally // returning value in finally.
 | 
号
现在这个输出解释你想要的每件事。finally运行,而try中有return运行。
如果你的try中有System.exit(0),finally将不会执行。
		
		
- 当您自然地设置数组的值时,您指定的是顺序,这就是顺序
 
	 
无论情况如何,finally将始终执行。如果成功执行try块,则不会执行catch块。如果try块抛出异常,那么catch块将执行
 
在对返回语句进行评估之后,始终执行finally。
		
		
- 那么,返回语句中的表达式仍将在finally子句之前进行计算。