在 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
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn