Finalize 是 Java 中的一个方法。这个finalizes()方法和main方法类似。 Finalizes() 方法在对象被垃圾回收之前调用。这意味着原始对象执行清理活动的最后机会,例如释放系统资源、关闭数据库连接、文件打开连接等。 Finalize 方法的主要问题是 Java 语言规范 (JLS) 无法保证该方法将被调用由垃圾收集器或何时调用。让我们考虑一个示例,对象在符合垃圾回收条件后可能会无限期等待。这意味着在调用其finalize()方法之前。同样,在完成调用它的方法后,不能保证它会立即被收集。因此,在 Finalize() 方法中执行关键活动是没有意义的。它可能在一个 JVM 中工作,并且在开发时在其他 JVM 中可能无法工作。finalize() 方法在 java.lang.Object 中可用,因此它自动可供所有类覆盖,因为 Object 是类' 基类。
finalize()方法是在对象被垃圾回收之前调用的,所以这意味着我们不能像其他Java方法一样手动调用finalize()方法。 Finalize() 方法仅由垃圾收集器 (GC) 线程调用一次。
广告 该类别中的热门课程 财务建模和估值 - 专业化 | 51 课程系列 | 30 次模拟测试开始您的免费软件开发课程
网络开发、编程语言、软件测试及其他
代码:
protected void finalize throws Throwable { //write some code }
finalize()方法有一个空的实现,并且在我们的类中存在清理活动,那么我们必须重写这个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 给定重写方法,它就像用户创建的方法,因为我们知道实际的 Finalize 方法签名 protected void 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() { //displaying some message to the user System.out.println("\tI am actaully Overriding now."); } }
输出:
解释:正如我们在上面的输出中看到的,我们由于覆盖了实际的 Finalize() 方法而输出了 Finalize() 方法。
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(); } } }
输出:
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(); } } }
输出:
说明:上面的例子清楚地说明了finalize方法并不总是保证执行。
Java的finalizes()方法用于收集垃圾回收对象。该方法在调用 GC() 方法之前调用。此方法并不总是保证执行。
以上是在 Java 中完成的详细内容。更多信息请关注PHP中文网其他相关文章!