Home > Java > javaTutorial > body text

Finalize in Java

王林
Release: 2024-08-30 16:10:59
Original
348 people have browsed it

Finalize is a method in Java. This finalizes () method is similar to the main method. This finalizes () method is called just before the object is garbage collected. It means the original object’s last chance to perform cleanup activities like releasing system resources, closing connections like database, file open connection, etc. The main problem with the finalize method is there is no guarantee by Java Language Specification (JLS) that will be called by garbage collector or when it will be called. Let’s consider an example that an object may wait up to an indefinite time after the object becomes eligible for garbage collection. It means before its finalize() method is called. Same way, after finalizing the method called it is no guarantee, it will be immediately collected. So there is no sense to perform critical activities inside the finalize() method. It may work in one JVM, and it may not work in other JVM at the time of development.finalize() method is available inside java.lang.Object so that it is automatically available to all the classes for overriding as Object is the classes’ base class.

How does the finalize() method work in Java?

This finalizes () method is called before an object is garbage collected, so it means we can’t call finalize() method manually just like other Java methods. finalize() method called only once by garbage collector(GC) thread.

ADVERTISEMENT Popular Course in this category FINANCIAL MODELING & VALUATION - Specialization | 51 Course Series | 30 Mock Tests

Start Your Free Software Development Course

Web development, programming languages, Software testing & others

Code:

protected void finalize throws Throwable
{
//write some code
}
Copy after login

The finalize() method has an empty implementation, and in our class, clean-up activities are present, then we have to override this finalize() method to define our cleanup activities.

Examples to Implement Finalize in Java

Below are some examples mentioned:

Example #1

Finalize method user overriding method example

Code:
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");
}
}
Copy after login

Output:

Finalize in Java

Explanation: If you observe the above output, you might be surprised that you did not finalize the overriding method. If you closely observe the code that is not actual Java given overridden method, it is just like a user-created method as we know actual finalize method signature protected void finalize(). So we did not get this in the output.

Example #2

Finalize method overriding actual method example

Code:
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.");
}
}
Copy after login

Output:

Finalize in Java

Explanation: As we see in the above output, we finalize() method output because of overriding the actual finalize() method.

Example #3

Finalize method from finally block example

Code:
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();
}
}
}
Copy after login

Output:

Finalize in Java

Example #4

Finalize method not guaranteed example

Code:
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();
}
}
}
Copy after login

Output:

Finalize in Java

Explanation: The above example clearly illustrates that the finalize method not always guarantee to execute.

Conclusion

Java finalizes () method is used to collect the garbage collected object. This method is called just before the GC() method is called. This method is not always guaranteed to execute.

The above is the detailed content of Finalize in Java. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:php
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!