Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels) Summary: [Ctors](https://developer.android.com/reference/java/lang/ref/PhantomReference#pubctors) \| [Methods](https://developer.android.com/reference/java/lang/ref/PhantomReference#pubmethods) \| [Inherited Methods](https://developer.android.com/reference/java/lang/ref/PhantomReference#inhmethods)

# PhantomReference


`
public


class
PhantomReference
`


`


`

`

extends https://developer.android.com/reference/java/lang/ref/Reference<T>


`

`


`

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) |||
| ↳ | [java.lang.ref.Reference](https://developer.android.com/reference/java/lang/ref/Reference)\<T\> ||
|   | ↳ | java.lang.ref.PhantomReference\<T\> |

<br />

*** ** * ** ***

Phantom reference objects, which are enqueued after the collector
determines that their referents may otherwise be reclaimed. Phantom
references are most often used to schedule post-mortem cleanup actions.

Suppose the garbage collector determines at a certain point in time
that an object is [phantom reachable](https://developer.android.com/reference/java/lang/ref/package-summary#reachability). At that time it will atomically clear
all phantom references to that object and all phantom references to
any other phantom-reachable objects from which that object is reachable.
At the same time or at some later time it will enqueue those newly-cleared
phantom references that are registered with reference queues.

In order to ensure that a reclaimable object remains so, the referent of
a phantom reference may not be retrieved: The `get` method of a
phantom reference always returns `null`.

## Summary

| ### Public constructors ||
|---|---|
| ` https://developer.android.com/reference/java/lang/ref/PhantomReference#PhantomReference(T,%20java.lang.ref.ReferenceQueue<?%20super%20T>)(T referent, https://developer.android.com/reference/java/lang/ref/ReferenceQueue<? super T> q) ` Creates a new phantom reference that refers to the given object and is registered with the given queue. |

| ### Public methods ||
|---|---|
| ` T` | ` https://developer.android.com/reference/java/lang/ref/PhantomReference#get()() ` Returns this reference object's referent. |

| ### Inherited methods |
|---|---|
| From class ` https://developer.android.com/reference/java/lang/ref/Reference ` |---|---| | ` void` | ` https://developer.android.com/reference/java/lang/ref/Reference#clear()() ` Clears this reference object. | | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/ref/Reference#clone()() ` Throws `https://developer.android.com/reference/java/lang/CloneNotSupportedException`. | | ` boolean` | ` https://developer.android.com/reference/java/lang/ref/Reference#enqueue()() ` Adds this reference object to the queue with which it is registered, if any. | | ` T` | ` https://developer.android.com/reference/java/lang/ref/Reference#get()() ` Returns this reference object's referent. | | ` boolean` | ` https://developer.android.com/reference/java/lang/ref/Reference#isEnqueued()() ` *This method was deprecated in API level 31. This method was never implemented to test if a reference object has been cleared and enqueued as it was previously specified since 1.2. This method could be misused due to the inherent race condition or without an associated `ReferenceQueue`. An application relying on this method to release critical resources could cause serious performance issue. An application should use `https://developer.android.com/reference/java/lang/ref/ReferenceQueue` to reliably determine what reference objects that have been enqueued or `refersTo(null)` to determine if this reference object has been cleared.* | | ` static void` | ` https://developer.android.com/reference/java/lang/ref/Reference#reachabilityFence(java.lang.Object)(https://developer.android.com/reference/java/lang/Object ref) ` Ensures that the object referenced by the given reference remains [*strongly reachable*](https://developer.android.com/reference/java/lang/ref/package-summary#reachability), regardless of any prior actions of the program that might otherwise cause the object to become unreachable; thus, the referenced object is not reclaimable by garbage collection at least until after the invocation of this method. | | ` final boolean` | ` https://developer.android.com/reference/java/lang/ref/Reference#refersTo(T)(T obj) ` Tests if the referent of this reference object is `obj`. | ||
| From class ` https://developer.android.com/reference/java/lang/Object ` |---|---| | ` https://developer.android.com/reference/java/lang/Object` | ` https://developer.android.com/reference/java/lang/Object#clone()() ` Creates and returns a copy of this object. | | ` boolean` | ` https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object)(https://developer.android.com/reference/java/lang/Object obj) ` Indicates whether some other object is "equal to" this one. | | ` void` | ` https://developer.android.com/reference/java/lang/Object#finalize()() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object. | | ` final https://developer.android.com/reference/java/lang/Class<?>` | ` https://developer.android.com/reference/java/lang/Object#getClass()() ` Returns the runtime class of this `Object`. | | ` int` | ` https://developer.android.com/reference/java/lang/Object#hashCode()() ` Returns a hash code value for the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notify()() ` Wakes up a single thread that is waiting on this object's monitor. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#notifyAll()() ` Wakes up all threads that are waiting on this object's monitor. | | ` https://developer.android.com/reference/java/lang/String` | ` https://developer.android.com/reference/java/lang/Object#toString()() ` Returns a string representation of the object. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long,%20int)(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait(long)(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*, or until a certain amount of real time has elapsed. | | ` final void` | ` https://developer.android.com/reference/java/lang/Object#wait()() ` Causes the current thread to wait until it is awakened, typically by being *notified* or *interrupted*. | ||

## Public constructors

### PhantomReference

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public PhantomReference (T referent, 
                ReferenceQueue<? super T> q)
```

Creates a new phantom reference that refers to the given object and
is registered with the given queue.

It is possible to create a phantom reference with a `null`
queue, but such a reference is completely useless: Its `get`
method will always return `null` and, since it does not have a queue,
it will never be enqueued.

<br />

| Parameters ||
|---|---|
| `referent` | `T`: the object the new phantom reference will refer to <br /> |
| `q` | `ReferenceQueue`: the queue with which the reference is to be registered, or `null` if registration is not required <br /> |

## Public methods

### get

Added in [API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)

```
public T get ()
```

Returns this reference object's referent. Because the referent of a
phantom reference is always inaccessible, this method always returns
`null`.

<br />

| Returns ||
|---|---|
| `T` | `null` <br /> |