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の結果に影響を与えることはできません.
具体的な検証コードは次のとおりです.
問題を見た後、私も疑問に思った.これらの問題の答えはいったい何なのか.
そこでこの博文があった.まずテストの検証を経た結論を投げ出して、読者がテストすることができることを待っています:結論: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)
}
}
}