首页 > Java > java教程 > 正文

在 Java 中完成

王林
发布: 2024-08-30 16:10:59
原创
439 人浏览过

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中文网其他相关文章!

相关标签:
来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板