在 Java 中删除一个对象
我们将在下面的例子中学习如何在 Java 中删除一个对象和使用垃圾回收器。
Java 通过引用 null
来删除对象
在第一个删除 Java 对象的例子中,我们创建了一个带有构造函数的类,该构造函数初始化了变量 name
和 age
。在 main
方法中,创建了一个 User
类的对象,并传递了 name
和 age
的值。现在,object
已经被初始化,我们可以用它来获取 age
,并进行比较来显示一条消息。但是在这之后,我们要删除 myObject
,以便不再使用。
要做到这一点,我们再次初始化 myObject
,但需要使用 null
。一旦 myObject
是 null
,我们就不能使用它来调用它的任何方法或变量,如果我们这样做,它将抛出一个异常。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
类的方法在 student1
和 student2
对象上被调用。在后面的代码中,我们已经在一个范围内创建了更多的 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
相关文章
用 Java 创建一个猜数游戏
发布时间:2023/10/10 浏览次数:84 分类:Java
-
任务是为猜谜游戏编写 Java 程序。猜谜游戏是一个约束满足问题。你必须在给定次数的试验中猜出正确的数字;否则,你不会赢。
从 Mac 中卸载 JDK 8
发布时间:2023/10/10 浏览次数:79 分类:Java
-
本文介绍如何从 MacOS 卸载 JDK 8。在过去的几十年里,Java 一直是主要的编程语言之一。它是计算机科学不可或缺的一部分。
Java 中的有限状态机
发布时间:2023/10/10 浏览次数:197 分类:Java
-
本教程演示如何在 Java 中实现有限状态机。有限状态机用于识别模式。本教程演示如何在 Java 中实现有限状态机。
Java 中的位掩码操作
发布时间:2023/10/10 浏览次数:101 分类:Java
-
在 Java 中,位掩码允许我们在一个数值变量中存储多个值。我们将值的每一位都视为一个单独的值,而不是一个整体的单个变量。
Java 中的弱引用类
发布时间:2023/10/10 浏览次数:129 分类:Java
-
本教程演示了 Java 中的弱引用类。弱引用是一种强度不足以使对象保留在内存中的引用。本教程演示了 Java 中弱引用的使用。
用 Java 连接 MySQL 数据库
发布时间:2023/10/10 浏览次数:134 分类:Java
-
这篇文章将演示如何使用 Java 连接 MySQL 数据库。本教程介绍了如何在 Java 中连接 MySQL 数据库。我们还列出了一些示例代码,以便你可以进一步了解该主题。
在 Java 中调用另一个方法中的变量
发布时间:2023/10/10 浏览次数:139 分类:Java
-
本教程解释了如何在 Java 中调用另一个方法中的变量。在本文中,我们将学习如何在 Java 中调用另一个方法中的变量。这取决于变量的类型和它在类内的作用域。
在 Java 中导入自定义类
发布时间:2023/10/10 浏览次数:73 分类:Java
-
这篇文章将要导入 Java 中的自定义类。本文介绍了如何在 Java 中导入自定义类。如果该类存在于同一个包中,则通过创建其对象来使用该类,如果该类存在于另一个包中