異常の謎


いくつかのプログラムセグメントを見て、動作を分析します.
1、
<pre name="code" class="java"><span style="font-size:18px;">public static boolean fun(){
	try{
		return false;
	}finally{
		return true;
	}
}
System.out.println(fun());</span>
 
  
  
 

2、

<span style="font-size:18px;">public static boolean fun(){
	try{
		return false;
	}finally{
		System.out.println("finally");
	}
}
System.out.println(fun());</span>

3、
<span style="font-size:18px;">public static void fun(){
	try{
		System.out.println("try");
		System.exit(0);
	}finally{
		System.out.println("finally");
	}
}
fun();</span>

結果:
1、true
2、finally
false
3、try
return,finally,exitの組合せが異なる場合が見られ,finallyブロックがいつ発生したかを解析する.
try-finally文では、finally文ブロックは、try文ブロックが正常に終了しているか、予期せぬ終了しているかにかかわらず、常にtry文ブロックから離れることを制御します.
予期せぬ状況:
1、放出異常
2、閉鎖型文はbreak,continueを実行した
3、returnが現れる
ではexitは?計算すべきでしょう.結局、プログラムの順序の実行を阻止しました.
実は違います.exitメソッドは、現在のスレッドと他のすべてのその場で忙しいスレッドを停止するため、つまりexitはtry-finallyの実行環境を直接消滅させ、finallyに実行権を与えることは言うまでもありません.