目录
Java中的finalize()方法是如何工作的?
在 Java 中实现 Finalize 的示例
示例#4
结论
首页 Java java教程 在 Java 中完成

在 Java 中完成

Aug 30, 2024 pm 04:10 PM
java

Finalize 是 Java 中的一个方法。这个finalizes()方法和main方法类似。 Finalizes() 方法在对象被垃圾回收之前调用。这意味着原始对象执行清理活动的最后机会,例如释放系统资源、关闭数据库连接、文件打开连接等。 Finalize 方法的主要问题是 Java 语言规范 (JLS) 无法保证该方法将被调用由垃圾收集器或何时调用。让我们考虑一个示例,对象在符合垃圾回收条件后可能会无限期等待。这意味着在调用其finalize()方法之前。同样,在完成调用它的方法后,不能保证它会立即被收集。因此,在 Finalize() 方法中执行关键活动是没有意义的。它可能在一个 JVM 中工作,并且在开发时在其他 JVM 中可能无法工作。finalize() 方法在 java.lang.Object 中可用,因此它自动可供所有类覆盖,因为 Object 是类' 基类。

Java中的finalize()方法是如何工作的?

finalize()方法是在对象被垃圾回收之前调用的,所以这意味着我们不能像其他Java方法一样手动调用finalize()方法。 Finalize() 方法仅由垃圾收集器 (GC) 线程调用一次。

广告 该类别中的热门课程 财务建模和估值 - 专业化 | 51 课程系列 | 30 次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

代码:

protected void finalize throws Throwable
{
//write some code
}
登录后复制

finalize()方法有一个空的实现,并且在我们的类中存在清理活动,那么我们必须重写这个finalize()方法来定义我们的清理活动。

在 Java 中实现 Finalize 的示例

下面是一些提到的例子:

示例#1

最终确定方法用户覆盖方法示例

代码:
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 方法签名 protected 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

Finalize 方法不保证示例

代码:
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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java 中的平方根 Java 中的平方根 Aug 30, 2024 pm 04:26 PM

Java 中的平方根

Java 中的完美数 Java 中的完美数 Aug 30, 2024 pm 04:28 PM

Java 中的完美数

Java 中的随机数生成器 Java 中的随机数生成器 Aug 30, 2024 pm 04:27 PM

Java 中的随机数生成器

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java中的Weka

Java 中的阿姆斯特朗数 Java 中的阿姆斯特朗数 Aug 30, 2024 pm 04:26 PM

Java 中的阿姆斯特朗数

Java 中的史密斯数 Java 中的史密斯数 Aug 30, 2024 pm 04:28 PM

Java 中的史密斯数

Java Spring 面试题 Java Spring 面试题 Aug 30, 2024 pm 04:29 PM

Java Spring 面试题

突破或从Java 8流返回? 突破或从Java 8流返回? Feb 07, 2025 pm 12:09 PM

突破或从Java 8流返回?

See all articles