이 기사의 주요 연구는 Java의 Finalize () 메소드를 무시하려는 시도이며, 특정 구현은 다음과 같습니다.
테스트 코드
패키지 com.alio.gc;/** * 실행 결과 : * */public class finalizeescapegc {public static finalizeescapegc instance = null; public void isalive () {system.out.println ( "예, 아직 살아 있습니다"); } @override protected void finalize () 던지기 가능 {super.finalize (); System.out.println ( "최종 방법 실행"); 인스턴스 = 이것; } public static void main (String [] args)은 InterruptedException {instance = new finalizeescapegc (); 인스턴스 = null; System.gc (); Thread.sleep (1000); instance.isalive (); // 최종 메소드가 다시 작성되지 않으면 인스턴스 = nullPointerException이 확실히보고됩니다. System.gc (); Thread.sleep (1000); instance.isalive (); }}실행 결과 :
실행 된 최종 방법
예, 나는 아직도 살아 있습니다
스레드의 예외 "main"java.lang.nullpointerexception
at com.alio.gc.finalizeescapegc.main (finalizeescapegc.java:29)
at sun.reflect.nativeMeThodAccessorImpl.invoke0 (기본 메소드)
at sun.reflect.nativeMethodaccessorimpl.invoke (nativeThodAccessorImpl.java:62)
at sun.reflect.delegatingmethodaccessorimpl.invoke (methodaccessorimpl.java:43 위임)
at Java.lang.reflect.method.invoke (method.java:498)
at com.intellij.rt.execution.application.appmain.main (appmain.java:134)
첫 번째 실행 인스턴스 = null; 그런 다음 instance.isalive ()를 실행합니다. 최종 메소드가 다시 작성되지 않으면 NullPointerException 이보고됩니다.
그러나 실제 실행 결과는 탈출과 실패의 성공입니다. 이는 모든 객체의 최종 () 메소드가 시스템에 의해서만 자동으로 호출되기 때문입니다. 객체가 다음 재활용에 직면하면, 최종화 () 메소드가 다시 실행되지 않습니다.
물체를 저장하는이 방법은 매우 불확실합니다. 그것을 사용할 필요가 없고이 방법의 존재를 잊어 버리는 것이 좋습니다.
위의 모든 것은 Java의 Finalize () 메소드 예제 코드를 다루는 코드에 관한 것입니다. 모든 사람에게 도움이되기를 바랍니다. 관심있는 친구는이 사이트의 다른 관련 주제를 계속 참조 할 수 있습니다. 단점이 있으면 메시지를 남겨 두십시오. 이 사이트를 지원해 주신 친구들에게 감사드립니다!