Java中finalize方法如何实现对象资源清理?

2026-05-15 22:421阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1230个文字,预计阅读时间需要5分钟。

Java中finalize方法如何实现对象资源清理?

目录一. 构建方法

1.概念

2.作用

3.特点

二. 基本使用

1.finalize简介

2.代码示例

2.1 Counter计数器 2.2 CounterTest测试类三. 结语一. 构建方法

1.概念

2.作用

3.特点

二. 基本使用

1.finalize简介

Java中finalize方法如何实现对象资源清理?

2.代码示例

2.1 Counter计数器 2.2 CounterTest测试类

三. 结语

目录
  • 一. 析构方法
    • 1. 概念
    • 2. 作用
    • 3. 特点
  • 二. 基本使用
    • 1. finalize简介
    • 2. 代码案例
      • 2.1 Counter计数器
      • 2.2 CounterTest测试类
  • 四. 结语

    一. 析构方法

    1. 概念

    我们现在已经知道,构造方法负责创建一个Java的类对象,并可以对该对象进行初始化。与此相对应的,其实还有一个方法,可以负责对象的销毁,这个负责对象销毁的方法,就叫做析构方法。在Java中,有一个专门的析构方法,即finalize()方法!

    2. 作用

    finalize()析构方法负责回收Java对象所占用的内存,该方法一般是在对象被垃圾收集器回收之前调用。通常我们会在finalize()方法中,指定对象销毁时要执行的操作,比如关闭对象打开的文件、IO流、释放内存资源等清理垃圾碎片的工作。

    3. 特点

    finalize()析构方法具有以下这些特点:

    • 垃圾回收器是否会执行finalize方法,以及何时执行该方法,是不确定的;
    • finalize()方法有可能会使对象复活,恢复到可触及的状态;
    • 垃圾回收器执行finalize()方法时,如果出现异常,垃圾回收器不会报告异常,程序会继续正常运行。

    二. 基本使用

    1. finalize简介

    在大多数情况下,Java的内存和垃圾回收都是由JVM的GC机制来自动完成。如果我们想手动实现,就可以使用finalize()方法,但该方法的执行与否是不确定的。也就是说,即使我们调用了finalize()方法,JVM也不一定就会立刻执行垃圾回收操作,这个取决于当前系统的内存占用情况。

    另外finalize()是一个被protected关键词修饰的方法,可以确保该方法不会被该类以外的代码调用。在每个Java类中都有finalize()方法,我们可以复写当前类中的finalize()方法。

    @Override protected void finalize(){ // 在这里终结代码 }

    2. 代码案例

    接下来设计一个代码案例,来给大家讲讲析构方法的基本使用。

    2.1 Counter计数器

    我们先来定义一个Counter计数器类,设计一个静态的计数器变量,通过方法调用改变count的值。

    /** * @author 一一哥Sun */ public class Counter { private static int count = 0; // 计数器变量 public Counter() { // 构造方法 this.count++; // 创建实例时增加值 } public int getCount() { // 获取计数器的值 return this.count; } @Override protected void finalize() { // 析构方法 this.count--; // 实例销毁时减少值 System.out.println("对象销毁"); } }

    以上案例中,static、@override等关键字,有些同学可能还不明白是怎么回事!先别急,后面我们都会学到,这里请大家先照着代码练习一下。

    2.2 CounterTest测试类

    接着我们再创建第2个类,对Counter里的finalize()进行测试。

    /* * @author * QQ:2312119590 * CSDN、掘金、知乎找我哦 */ public class CounterTest { public static void main(String[] args) { Counter cnt1 = new Counter(); // 创建第一个实例对象 System.out.println("数量:" + cnt1.getCount()); // 输出1 Counter cnt2 = new Counter(); // 创建第二个实例对象 System.out.println("数量:" + cnt2.getCount()); // 输出2 cnt2 = null; // 销毁实例2 try { System.gc(); // 手动调用清理内存的gc()方法 Thread.currentThread().sleep(1000); // 延时1000毫秒 System.out.println("数量:" + cnt1.getCount()); //再次输出1,说明有个对象被销毁 } catch (InterruptedException e) { e.printStackTrace(); } } }

    因为finalize()方法具有不确定性,也就是说,该方法到底会不会起作用是不一定的!所以我们在程序中可以调用 System.gc()方法或者 Runtime.gc()方法,来显式地提醒垃圾回收器尽快去执行垃圾回收操作。最终执行效果如下图所示:

    四. 结语

    至此,就把析构方法的功能及使用给大家介绍完毕了,现在你学会了吗?对我们这些初学者来说,我们暂时知道finalize析构方法的作用和基本用法即可。

    以上就是关于Java中finalize析构方法的作用详解的详细内容,更多关于Java finalize析构方法的资料请关注自由互联其它相关文章!

    标签:作用

    本文共计1230个文字,预计阅读时间需要5分钟。

    Java中finalize方法如何实现对象资源清理?

    目录一. 构建方法

    1.概念

    2.作用

    3.特点

    二. 基本使用

    1.finalize简介

    2.代码示例

    2.1 Counter计数器 2.2 CounterTest测试类三. 结语一. 构建方法

    1.概念

    2.作用

    3.特点

    二. 基本使用

    1.finalize简介

    Java中finalize方法如何实现对象资源清理?

    2.代码示例

    2.1 Counter计数器 2.2 CounterTest测试类

    三. 结语

    目录
    • 一. 析构方法
      • 1. 概念
      • 2. 作用
      • 3. 特点
    • 二. 基本使用
      • 1. finalize简介
      • 2. 代码案例
        • 2.1 Counter计数器
        • 2.2 CounterTest测试类
    • 四. 结语

      一. 析构方法

      1. 概念

      我们现在已经知道,构造方法负责创建一个Java的类对象,并可以对该对象进行初始化。与此相对应的,其实还有一个方法,可以负责对象的销毁,这个负责对象销毁的方法,就叫做析构方法。在Java中,有一个专门的析构方法,即finalize()方法!

      2. 作用

      finalize()析构方法负责回收Java对象所占用的内存,该方法一般是在对象被垃圾收集器回收之前调用。通常我们会在finalize()方法中,指定对象销毁时要执行的操作,比如关闭对象打开的文件、IO流、释放内存资源等清理垃圾碎片的工作。

      3. 特点

      finalize()析构方法具有以下这些特点:

      • 垃圾回收器是否会执行finalize方法,以及何时执行该方法,是不确定的;
      • finalize()方法有可能会使对象复活,恢复到可触及的状态;
      • 垃圾回收器执行finalize()方法时,如果出现异常,垃圾回收器不会报告异常,程序会继续正常运行。

      二. 基本使用

      1. finalize简介

      在大多数情况下,Java的内存和垃圾回收都是由JVM的GC机制来自动完成。如果我们想手动实现,就可以使用finalize()方法,但该方法的执行与否是不确定的。也就是说,即使我们调用了finalize()方法,JVM也不一定就会立刻执行垃圾回收操作,这个取决于当前系统的内存占用情况。

      另外finalize()是一个被protected关键词修饰的方法,可以确保该方法不会被该类以外的代码调用。在每个Java类中都有finalize()方法,我们可以复写当前类中的finalize()方法。

      @Override protected void finalize(){ // 在这里终结代码 }

      2. 代码案例

      接下来设计一个代码案例,来给大家讲讲析构方法的基本使用。

      2.1 Counter计数器

      我们先来定义一个Counter计数器类,设计一个静态的计数器变量,通过方法调用改变count的值。

      /** * @author 一一哥Sun */ public class Counter { private static int count = 0; // 计数器变量 public Counter() { // 构造方法 this.count++; // 创建实例时增加值 } public int getCount() { // 获取计数器的值 return this.count; } @Override protected void finalize() { // 析构方法 this.count--; // 实例销毁时减少值 System.out.println("对象销毁"); } }

      以上案例中,static、@override等关键字,有些同学可能还不明白是怎么回事!先别急,后面我们都会学到,这里请大家先照着代码练习一下。

      2.2 CounterTest测试类

      接着我们再创建第2个类,对Counter里的finalize()进行测试。

      /* * @author * QQ:2312119590 * CSDN、掘金、知乎找我哦 */ public class CounterTest { public static void main(String[] args) { Counter cnt1 = new Counter(); // 创建第一个实例对象 System.out.println("数量:" + cnt1.getCount()); // 输出1 Counter cnt2 = new Counter(); // 创建第二个实例对象 System.out.println("数量:" + cnt2.getCount()); // 输出2 cnt2 = null; // 销毁实例2 try { System.gc(); // 手动调用清理内存的gc()方法 Thread.currentThread().sleep(1000); // 延时1000毫秒 System.out.println("数量:" + cnt1.getCount()); //再次输出1,说明有个对象被销毁 } catch (InterruptedException e) { e.printStackTrace(); } } }

      因为finalize()方法具有不确定性,也就是说,该方法到底会不会起作用是不一定的!所以我们在程序中可以调用 System.gc()方法或者 Runtime.gc()方法,来显式地提醒垃圾回收器尽快去执行垃圾回收操作。最终执行效果如下图所示:

      四. 结语

      至此,就把析构方法的功能及使用给大家介绍完毕了,现在你学会了吗?对我们这些初学者来说,我们暂时知道finalize析构方法的作用和基本用法即可。

      以上就是关于Java中finalize析构方法的作用详解的详细内容,更多关于Java finalize析构方法的资料请关注自由互联其它相关文章!

      标签:作用