Javaのは最終的に行うために使用しますか?

私たちは、プログラム言語は何のガベージコレクションを持っていないとデストラクタが自動的にメカニズムを呼び出す場合、その後、この時間は最終的に、それは非常に重要であることを知っています。

しかし、Javaのために、それは、ガベージコレクションのメカニズムを持っていないメモリの解放は、もはや問題である。が、Javaにはデストラクタが呼び出されないことができ、その後、Javaはどのような状況下で、それは最終的に使うのでしょうか?

最終的にはJavaで使いますか?

あなたは、finally節が必要で、その初期状態に加えて、メモリリソースを復元したい場合。これらのリソースはクリーンアップする必要性が含まれています。

私たちは外の世界への切り替えと言うことも、ファイルを開くまたはネットワーク接続、画面上のグラフィックス、。

例で実証するために?

この手順の目的は、main()関数が終了すると、スイッチが閉じなければならないことを保証することであるので、このように、我々は、tryブロックと例外ハンドラの各々の端部であるsw.off()メソッドに加えこれは、呼び出します。

ただし、例外がスローされる中、それは、このメソッドが呼び出されることはありませんで、トラップ・ハンドラではなかったです。

public class Switch {
	private boolean state = false;
	public boolean read() {
		return state;
	}
	public void on() {
		state = true;
		System.out.println(this);
	}
	public void off() {
		state =  false;
		System.out.println(this);
	}
    public String toString() {
    	return state ? "on":"off";
    }
}
public class OnOffException1 extends Exception{
	
}
public class OnOffException2 extends Exception{

}
public class OnOffSwitch {
	private static Switch sw = new Switch();
	public static void f()
	throws OnOffException1,OnOffException2{}
	public static void main(String[] args) {
		try {
			sw.on();
			// Code that can throw exceptions...
			f();
			sw.off();
		}catch(OnOffException1 e) {
			System.out.println("OnOffException1");
			sw.off();
		}catch(OnOffException2 e) {
			System.out.println("OnOffException2");
			sw.off();
		}
	}
}

結果:

これらの問題を解決するために、使用することは、最終的に向上させます:

これはsw.f()メソッドは、どのような場合に実行される保証します。

public class OnOffSwitch {
	private static Switch sw = new Switch();
	public static void f()
	throws OnOffException1,OnOffException2{}
	public static void main(String[] args) {
		try {
			sw.on();
			// Code that can throw exceptions...
			OnOffSwitch.f();
		}catch(OnOffException1 e) {
			System.out.println("OnOffException1");
		}catch(OnOffException2 e) {
			System.out.println("OnOffException2");
		}finally {
			sw.off();
		}
	}
}

例外の場合は、現在の例外ハンドラでキャッチされていないで、例外処理メカニズムは、より高いレベルの例外ハンドラにジャンプする前になり、最終的に実行節:でも、彼は言いました:

それが壊れると文を継続するために来て、この場合では、finally節も実行されているがいることに注意します:

我々は最終的に分割し、タグ付けされ、使用を続ける場合は、Javaでのgoto文を使用する必要はありません。

class FourException extends Exception{}

public class AlwaysFinally {

	public static void main(String[] args) {
		System.out.println("Entering first try block");
		try {
			System.out.println("Entering second try block");
			try{
				throw new FourException();
			}finally{
				System.out.println("finally in 2nd try block");
			}
		}catch(FourException e) {
			System.out.println("Caught FourException in 1st try block");
		}finally {
			System.out.println("finally in 1st try block");
		}
	}
}

 

おすすめ

転載: blog.csdn.net/qq_41026809/article/details/92579748