當我們在Java中創建一個對象時,默認情況下對象並不是弱對象。要創建弱引用對象,我們必須向 JVM 顯式指定它。
為什麽使用弱引用對象:
與 C/C++ 不同,Java 支持動態垃圾收集。這是在 JVM 運行垃圾Collector時執行的。為了不浪費空間,垃圾Collector會刪除所有無法訪問的對象。然而,為了將對象標記為垃圾回收,我們可以創建一個弱引用對象。
Java
// Java Program to show the usage of
// java.lang.ref.WeakReference Class
import java.lang.ref.WeakReference;
class GFG {
public static void main(String[] args)
{
// creating a strong object of MyClass
MyClass obj = new MyClass();
// creating a weak reference of type MyClass
WeakReference<MyClass> wobj
= new WeakReference<>(obj);
System.out.println(
"-> Calling Display Function using strong object:");
obj.Display();
System.out.println("-> Object set to null");
obj = null;
obj = wobj.get();
System.out.println(
"-> Calling Display Function after retrieving from weak Object");
obj.Display();
}
}
class MyClass {
void Display()
{
System.out.println("Display Function invoked ...");
}
}
輸出
-> Calling Display Function using strong object: Display Function invoked ... -> Object set to null -> Calling Display Function after retrieving from weak Object Display Function invoked ...
輸出
-> Calling Display Function using strong object: Display Function invoked ... -> Object set to null -> Calling Display Function after retrieving from weak Object Display Function invoked ...
WeakReference 類中的構造函數:
參數 | 說明 |
---|---|
WeakReference(T 指代) | 此構造函數創建一個引用給定對象的新弱引用。 |
WeakReference(T 所指對象,ReferenceQueue <T> q) | 此構造函數創建一個新的弱引用,該引用引用給定的對象並注冊到給定的隊列中。 |
從參考類繼承的方法
方法 | 說明 |
---|---|
清除 ( ) | 該方法清除該引用對象。 |
入隊 ( ) | 此方法將此引用對象添加到它注冊的隊列(如果有)中。 |
得到 ( ) | 該方法返回該引用對象的指示對象。 |
已入隊 ( ) | 此方法告知此引用對象是否已被程序或垃圾Collector排隊。 |
方法的實施:
Java
// Java Program to show the usage of
// java.lang.ref.WeakReference Class
import java.lang.ref.WeakReference;
class GFG {
public static void main(String[] args)
{
X obj = new X();
WeakReference<X> weakobj
= new WeakReference<X>(obj);
System.out.println(
"-> Retrieving object from weak reference using get ()");
weakobj.get().show();
System.out.println(
"-> Is it possible to queue object using enqueue ()");
System.out.println(weakobj.enqueue());
System.out.println(
"-> Checking if reference is queued using isEnqueued ()");
System.out.println(weakobj.isEnqueued());
}
}
class X {
void show()
{
System.out.println("show () from X invoked..");
}
}
輸出
-> Retrieving object from weak reference using get () show () from X invoked.. -> Is it possible to queue object using enqueue () false -> Checking if reference is queued using isEnqueued () false
相關用法
- Java java.lang.ref.Reference用法及代碼示例
- Java java.lang.ref.PhantomReference用法及代碼示例
- Java java.lang.ref.SoftReference用法及代碼示例
- Java java.lang.ref.ReferenceQueue用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotation()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.getDeclaredAnnotations()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.isAccessible()用法及代碼示例
- Java java.lang.reflect.AccessibleObject.setAccessible()用法及代碼示例
- Java java.lang.reflect.Array.get()用法及代碼示例
- Java java.lang.reflect.Array.getBoolean()用法及代碼示例
- Java java.lang.reflect.Array.getByte()用法及代碼示例
- Java java.lang.reflect.Array.getChar()用法及代碼示例
- Java java.lang.reflect.Array.getDouble()用法及代碼示例
- Java java.lang.reflect.Array.getFloat()用法及代碼示例
- Java java.lang.reflect.Array.getInt()用法及代碼示例
- Java java.lang.reflect.Array.getLength()用法及代碼示例
- Java java.lang.reflect.Array.getLong()用法及代碼示例
- Java java.lang.reflect.Array.getShort()用法及代碼示例
- Java java.lang.reflect.Array.newInstance()用法及代碼示例
- Java java.lang.reflect.Array.set()用法及代碼示例
- Java java.lang.reflect.Array.setBoolean()用法及代碼示例
- Java java.lang.reflect.Array.setByte()用法及代碼示例
- Java java.lang.reflect.Array.setChar()用法及代碼示例
- Java java.lang.reflect.Array.setDouble()用法及代碼示例
注:本文由純淨天空篩選整理自varunkedia大神的英文原創作品 java.lang.ref.WeakReference Class In Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。