>Java >java지도 시간 >Java로 마무리

Java로 마무리

王林
王林원래의
2024-08-30 16:10:59444검색

Finalize는 Java의 메소드입니다. 이 finalizes() 메소드는 기본 메소드와 유사합니다. 이 finalizes() 메소드는 객체가 가비지 수집되기 직전에 호출됩니다. 이는 시스템 리소스 해제, 데이터베이스와 같은 연결 닫기, 파일 열기 연결 등과 같은 정리 작업을 수행할 수 있는 원본 개체의 마지막 기회를 의미합니다. finalize 메서드의 주요 문제점은 호출될 Java 언어 사양(JLS)이 보장되지 않는다는 것입니다. 가비지 수집기에 의해 또는 호출될 때. 객체가 가비지 수집 대상이 된 후 무기한으로 기다릴 수 있는 예를 생각해 보겠습니다. 이는 finalize() 메서드가 호출되기 전을 의미합니다. 마찬가지로 보장 없음이라는 메서드를 완성한 후 즉시 수집됩니다. 따라서 finalize() 메서드 내에서 중요한 활동을 수행하는 것은 의미가 없습니다. 하나의 JVM에서는 작동할 수도 있고 개발 시 다른 JVM에서는 작동하지 않을 수도 있습니다. finalize() 메소드는 java.lang.Object 내부에서 사용 가능하므로 Object가 클래스이므로 모든 클래스에서 자동으로 재정의할 수 있습니다. ' 기본 클래스입니다.

Java에서 finalize() 메소드는 어떻게 작동하나요?

이 finalizes() 메서드는 객체가 가비지 수집되기 전에 호출되므로 다른 Java 메서드처럼 finalize() 메서드를 수동으로 호출할 수 없다는 의미입니다. 가비지 수집기(GC) 스레드에서 finalize() 메서드를 한 번만 호출합니다.

광고 이 카테고리에서 인기 있는 강좌 재무 모델링 및 가치 평가 - 전문 분야 | 51 코스 시리즈 | 모의고사 30개

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

코드:

protected void finalize throws Throwable
{
//write some code
}

finalize() 메소드에는 빈 구현이 있고 클래스에 정리 활동이 있습니다. 그러면 정리 활동을 정의하기 위해 이 finalize() 메소드를 재정의해야 합니다.

Java에서 Finalize를 구현하는 예

다음은 언급된 몇 가지 예입니다.

예시 #1

Finalize 메소드 사용자 재정의 메소드 예시

코드:
Main.java

//creating class
public class Main {
//main method for run the Java application
public static void main(String[] args)
{
//Creating String object with some content
String string = new String("I am Amardeep");
//make the string reference to null for allow it for Garbage Collection
string = null;
// Calling gc method for Garbage Collection
System.gc();
//displaying some message to the user
System.out.println("\tI am in Main method");
}
//We are Overriding finalize method.
public void finalize()
{
//displaying some message to the user
System.out.println("\tI am feeling that I am Overriding finalize method");
}
}

출력:

Java로 마무리

설명: 위 출력을 관찰하면 재정의 방법을 마무리하지 않았다는 사실에 놀랄 수도 있습니다. 재정의된 메서드가 제공되는 실제 Java가 아닌 코드를 자세히 관찰하면 실제 finalize 메서드 서명으로 보호되는 void finalize()를 알고 있으므로 사용자가 생성한 메서드와 같습니다. 그래서 우리는 이것을 출력에 포함하지 않았습니다.

예시 #2

실제 메서드를 재정의하는 메서드 완성

코드:
Main.java

//creating class
public class Main {
//main method for run the Java application
public static void main(String[] args)
{
//Creating Main object
Main main = new Main();
//make the main reference to null for allow it for Garbage Collection
main = null;
// Calling gc method for Garbage Collection
System.gc();
//displaying some message to the user
System.out.println("\tI am Amardeep from main method");
}
//We are Overriding finalize method.
@Override
protected void finalize()
{
//displaying some message to the user
System.out.println("\tI am actaully Overriding now.");
}
}

출력:

Java로 마무리

설명: 위 출력에서 ​​볼 수 있듯이 실제 finalize() 메서드를 재정의하기 때문에 finalize() 메서드 출력을 수행합니다.

예시 #3

Finally 블록 예시의 Finalize 메소드

코드:
Main.java

//creating class
public class Main {
//main method for run the Java application
public static void main(String[] args)
{
//Creating Main object
Main main = new Main();
//make the main reference to null for allow it for Garbage Collection
main = null;
// Calling gc method for Garbage Collection
System.gc();
//displaying some message to the user
System.out.println("\tI am Amardeep from main method");
}
//We are Overriding finalize method.
@Override
protected void finalize() throws Throwable {
try{
//displaying some message to the user
System.out.println("\tFinalize of Paramesh");
}catch(Throwable t){
throw t;
}finally{
//displaying some message to the user
System.out.println("\tCalling finalize from finally block");
super.finalize();
}
}
}

출력:

Java로 마무리

예시 #4

확정 방법이 보장되지 않는 예

코드:
FinalizeNotGuarantee.java

//package com.finalize;
public class FinalizeNotGuranteed implements Runnable {
//user defined method
private void getMyMethod() throws InterruptedException {
//try block
try {
System.out.println("Hi, I am TRY");
throw new NullPointerException();
//catch block
} catch (NullPointerExceptionnpe) {
System.out.println("Hi, Iam CATCH");
//finally block
} finally {
System.out.println("Hi, I am FINALLY");
}
}
//overriding finalize method
@Override
protected void finalize() throws Throwable {
System.out.println("I am kinside finalize block");
super.finalize();
}
//overriding Thread run method
@Override
public void run() {
try {
getMyMethod();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
for (int i = 1; i<= 3; i++) {
//start the thread method run by using start method
new Thread(new FinalizeNotGuranteed()).start();
}
}
}

출력:

Java로 마무리

설명: 위의 예는 finalize 메소드가 항상 실행을 보장하는 것은 아니라는 점을 명확하게 보여줍니다.

결론

Java finalizes() 메소드는 가비지 수집 객체를 수집하는 데 사용됩니다. 이 메서드는 GC() 메서드가 호출되기 직전에 호출됩니다. 이 방법은 항상 실행이 보장되는 것은 아닙니다.

위 내용은 Java로 마무리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:자바 Base64 디코드다음 기사:자바 Base64 디코드