迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

在 Java 中删除一个对象

作者:迹忆客 最近更新:2023/10/10 浏览次数:

我们将在下面的例子中学习如何在 Java 中删除一个对象和使用垃圾回收器。


Java 通过引用 null 来删除对象

在第一个删除 Java 对象的例子中,我们创建了一个带有构造函数的类,该构造函数初始化了变量 nameage。在 main 方法中,创建了一个 User 类的对象,并传递了 nameage 的值。现在,object 已经被初始化,我们可以用它来获取 age,并进行比较来显示一条消息。但是在这之后,我们要删除 myObject,以便不再使用。

要做到这一点,我们再次初始化 myObject,但需要使用 null。一旦 myObjectnull,我们就不能使用它来调用它的任何方法或变量,如果我们这样做,它将抛出一个异常。System.gc() 用于收集任何剩余的垃圾,这样就不会有空字段或对象剩下来释放内存。

我们可以看到,在 User 类中有一个 finalize() 方法。它是一个重载方法,在收集垃圾之前对对象进行调用。

public class JavaDeleteObject {
    public static void main(String[] args) {

        User myObject = new User("John", 30);
        int userAge = myObject.age;
      
        if (userAge > 25) {
            System.out.println("User age is : " + userAge);
        } else {
            System.out.println("User age is less than 25 : " + userAge);
        }
        myObject = null;
        System.gc();
      
        System.out.println(myObject.age);

    }

}

class User {
    String name;
    int age;

    User(String n, int a) {
        name = n;
        age = a;
    }

    protected void finalize() {
        System.out.println("Object is garbage collected.");
    }
}

输出:

User age is : 30
Object is garbage collected.
Exception in thread "main" java.lang.NullPointerException
	at com.company.JavaDeleteObject.main(JavaDeleteObject.java:18)

Java 通过将对象赋值为 null 来删除一个在限制范围内的对象

在下面的代码中,我们有一个 Student 类,它有三个数据成员,这些数据成员使用该类的参数化构造函数赋值。它有一个 showDetails() 方法和 showNextIndex() 方法。它还有 finalize() 方法来显示下一个学生的索引。

Student 类的新对象是用 new 关键字创建的。Student 类的方法在 student1student2 对象上被调用。在后面的代码中,我们已经在一个范围内创建了更多的 Student 类对象。在使用它们之后,我们调用 System.gc(),要求 JVM 对这个作用域内创建的两个对象进行垃圾回收。

在进入作用域之前,nextIndex 值会递增到 3,在离开作用域之前是 5。为了减少 nextIndex 值,在对象被垃圾收集之前,使用 System.runFinalization() 方法对 5 值调用两次。

然后显示正确的 nextIndex 值,不包括范围内的值。

class Student {
  
    private int index;
    private String name;
    private int age;
    private static int nextIndex=1;
  
    Student(String name,int age){
        this.name = name;
        this.age = age;
        this.index = nextIndex++;
    }
  
    public void showDetails(){
        System.out.println("Student at Index : "+index+", Student name: "+name +", age: "+age);
    }
  
    public void showNextIndex(){
        System.out.println("Next Index: "+nextIndex);
    }
  
    protected void finalize()
    {
        --nextIndex;
    }
}

class UseStudent{
    public static void main(String[] args){
        Student student1 = new Student("John",23);
        Student student2 = new Student("Doe",20);
        student1.showDetails();
        student2.showDetails();
        student1.showNextIndex();
        student2.showNextIndex();
        {
            Student student3 = new Student("Sam",22);
            Student student4 = new Student("Ben",21);
            student3.showDetails();
            student4.showDetails();
            student3.showNextIndex();
            student4.showNextIndex();
          
            student3 = student4 = null;
            System.gc();
            System.runFinalization();
        }
        student2.showNextIndex();
    }
}

输出:

Student at Index : 1, Student name: John, age: 23
Student at Index : 2, Student name: Doe, age: 20
Next Index: 3
Next Index: 3
Student at Index : 3, Student name: Sam, age: 22
Student at Index : 4, Student name: Ben, age: 21
Next Index: 5
Next Index: 5
Next Index: 3

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 C# 中删除对象

发布时间:2024/02/02 浏览次数:134 分类:编程语言

我们可以通过在 C# 中为其分配空值来删除用户定义类的对象。本教程将讨论在 C# 中删除用户定义类的对象的方法。在 C# 中通过给它分配 null 值来删除一个用户定义的类对象

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便