try、catch、finally実行順序およびreturn関係の概要


この間、フォーラムをぶらぶらしていて、1枚の投稿を見ました.tryにreturn文が存在する場合、finallyは実行しますか?2.finallyでtry return結果を変更した場合、どのようなデータが返されますか?3.finallyにもreturnがある場合、どのreturnを返しますか?
問題を見た後、私も疑問に思った.これらの問題の答えはいったい何なのか.
そこでこの博文があった.まずテストの検証を経た結論を投げ出して、読者がテストすることができることを待っています:結論:1.finallyでは常に実行されますシステムexit(0); それ以外は実行されます.異常が発見するも、(3)において注釈されたthrow異常のように、異常を投げる前にfinallyを実行する.2.tryにreturnがあっても、まずreturnの後の文を実行してから、すぐにreturnではなくfinallyの文を実行します.3.tryでfinallyとreturnが同時に現れると、finallyのreturn結果のみが返されます.4.finallyの値はtryで返される結果値に影響しません.以上のtryにおけるfinallyにおける結論はcatchとfinallyにも同様に適用される.finallyでは常に実行されますシステム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の結果に影響を与えることはできません.
具体的な検証コードは次のとおりです.
class DataDemo
{
 private int num = 0;
 private String location ;
 public DataDemo(int num,String location){
  this.num = num;
  this.location = location;
  System.out.println("------ "+location+" Person can execute---------- num="+num); 
 }

 public String toString(){
 
  return "{DataDemo num=["+num+"]+ location=["+location+"]" ;
 }
}
public class TryCatchFinallyTest
{
 public static void main(String[] args) throws Exception{
   System.out.println("client execute1 ------"+TestTry());
 }

 public static DataDemo  testTry() throws Exception{
  int i = 1;
 
  try{
   //throw new Exception();
    //System.exit(0);
      return new DataDemo(++i,"try1"); //(1)  finally return DateDemo return 。 finally return , return i, finally ++i , 0, 1    
  }catch(Exception e){
   System.out.println(" catch run --------, this can not possible"); // (2)
   //throw e ;
   return new DataDemo(i,"catch1"); // (3)
  }finally{
   ++i;
     new DataDemo(i,"finally1"); // (4)
  
  }
 }

}