この記事の主な研究は、JavaのFinalize()メソッドをオーバーライドする試みであり、特定の実装は次のとおりです。
テストコード
パッケージcom.alio.gc;/** *実行結果: * */public class finalizeescapegc {public static finalizeescapegc instance = null; public void isalive(){system.out.println( "はい、私はまだ生きています"); } @Override Protected void finalize()throws throwsable {super.finalize(); system.out.println( "実行メソッドを実行する"); instance = this; } public static void main(string [] args)throws arturnedexception {instance = new finalizescapegc(); instance = null; System.gc(); thread.sleep(1000); instance.isalive(); //ファイナライズメソッドが書き直されない場合、インスタンス= nullpointerexceptionは間違いなく報告されます。 System.gc(); thread.sleep(1000); instance.isalive(); }}実行結果:
実行されたメソッドを完成させます
はい、私はまだ生きています
スレッド「Main」Java.lang.NullPointerExceptionの例外
com.alio.gc.finalizeescapegc.mainで(firemizeescapegc.java:29)
sun.reflect.nativemethodaccessorimpl.invoke0(ネイティブメソッド)
sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:62)
sun.reflect.delegatingmethodaccessorimpl.invoke(DelegatingMethodaccessorimpl.java:43)
java.lang.reflect.method.invoke(method.java:498)
com.intellij.rt.execution.application.appmain.main(appmain.java:134)
最初にinstance = null;次に、instance.isalive()を実行します。ファイナライズメソッドが書き直されない場合、nullpointerexceptionは間違いなく報告されます。
ただし、実際の実行結果は、脱出と失敗の成功です。これは、任意のオブジェクトのfinalize()メソッドがシステムによって自動的に1回のみ呼び出されるためです。オブジェクトが次のリサイクルに直面している場合、そのfinalize()メソッドは再び実行されません
オブジェクトを保存するこの方法は非常に不確実です。この方法の存在を忘れる必要はないことをお勧めします。
上記は、Javaのfinalize()メソッドの例コードをカバーするコードに関するすべてです。誰にとっても役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!