Javaのfinally文の例を詳しく解説

零下一度
リリース: 2017-07-20 19:02:50
オリジナル
1732 人が閲覧しました

finally ステートメントが実行されない状況は少なくとも 2 つあります。
(1) try ステートメントが実行されない try ステートメントの前に return が返された場合、finally ステートメントは実行されません。これは、finally ステートメントを実行するための必要条件ではあるが、十分ではない条件が、対応する try ステートメントを実行する必要があることも示しています。

(2) try ブロック|catch ブロック内に System.exit(0); のような文があります。 System.exit(0) は Java 仮想マシン JVM を終了します。もちろん、finally ステートメントは実行されません。

try-catch-finally では、return がfinallyに遭遇した場合、return はfinallyに対して無効です。つまり:

1. try catch ブロックでreturnが行われると、finallyも実行されます。

2.finally の return ステートメントは、try catch ブロックの return ステートメントの効果を上書きします。

結論: return ステートメントは必ずしも関数の終了ではありません。return が実行されると、return 後の値が戻り値変数にコピーされるだけです。


class Exc{
	int a;
	int b;
}


public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
		e.a = 10;
		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;
			
		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);
		
		return res+3;
	}
	
	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}
ログイン後にコピー

出力:

try ……
finnaly occured
mian b= 2
ログイン後にコピー

結論: 例外がなければ、try のコードブロックを try のリターンまで実行し、finally が実行された後、try のコードブロックを実行します。戻る。終了機能。

class Exc{
	int a;
	int b;
}


public class Except {
	@SuppressWarnings("finally")
	static int   compute (){
		Exc e = new Exc();
//		e.a = 10;
//		e.b = 10;
		int res = 0 ;
		try{
			res = e.a / e.b;
			System.out.println("try ……");
			return res + 1;
			
		}catch(NullPointerException e1){
			System.out.println("NullPointerException occured");
		}catch(ArithmeticException  e1){
			System.out.println("ArithmeticException occured");
		}catch(Exception e3){
			System.out.println("Exception occured");
		}finally{
			System.out.println("finnaly occured");
		}
		System.out.println(res);
		
		return res+3;
	}
	
	public static void main(String[] args){
		int b =  compute();
		System.out.println("mian b= "+b);
	}
}
ログイン後にコピー

出力:

ArithmeticException occured
finnaly occured
0
mian b= 3
ログイン後にコピー

結論: try で例外が発生した場合は、catch の実行後、例外ステートメントで catch によってキャプチャされた例外コード ブロックにジャンプし、最後に実行して try{}catch{} から抜け出します。 finally{} は、下方向に実行を継続し、try の後続のステートメントは実行されません。

以上がJavaのfinally文の例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート