Class Object
Object is the root of the class hierarchy.Every class hasObject as a superclass. All objects,including arrays, implement the methods of this class.- Since:
- 1.0
- See Also:
Constructor Summary
ConstructorsMethod Summary
Modifier and TypeMethodDescriptionprotectedObjectclone()Creates and returns a copy of this object.booleanIndicates whether some other object is "equal to" this one.protected voidfinalize()Deprecated, for removal: This API element is subject to removal in a future version.Finalization is deprecated and subject to removal in a futurerelease.finalClass<?> getClass()Returns the runtime class of thisObject.inthashCode()Returns a hash code value for this object.final voidnotify()Wakes up a single thread that is waiting on this object'smonitor.final voidWakes up all threads that are waiting on this object's monitor.toString()Returns a string representation of the object.final voidwait()Causes the current thread to wait until it is awakened, typicallyby beingnotified orinterrupted.final voidwait(long timeoutMillis) Causes the current thread to wait until it is awakened, typicallyby beingnotified orinterrupted, or until acertain amount of real time has elapsed.final voidwait(long timeoutMillis, int nanos) Causes the current thread to wait until it is awakened, typicallyby beingnotified orinterrupted, or until acertain amount of real time has elapsed.
Constructor Details
Object
public Object()Constructs a new object.
Method Details
getClass
Returns the runtime class of thisObject. The returnedClassobject is the object that is locked bystatic synchronizedmethods of the represented class.The actual result type is
Class<? extends |X|>where|X|is the erasure of the static type of theexpression on whichgetClassis called. Forexample, no cast is required in this code fragment:Number n = 0;Class<? extends Number> c = n.getClass();- Returns:
- The
Classobject that represents the runtime class of this object. - SeeJava Language Specification:
- 15.8.2 Class Literals
hashCode
public int hashCode()Returns a hash code value for this object. This method issupported for the benefit of hash tables such as those provided byHashMap.The general contract of
hashCodeis:- Whenever it is invoked on the same object more than once during an execution of a Java application, the
hashCodemethod must consistently return the same integer, provided no information used inequalscomparisons on the object is modified. This integer need not remain consistent from one execution of an application to another execution of the same application. - If two objects are equal according to the
equalsmethod, then calling thehashCodemethod on each of the two objects must produce the same integer result. - It isnot required that if two objects are unequal according to the
equalsmethod, then calling thehashCodemethod on each of the two objects must produce distinct integer results. However, the programmer should be aware that producing distinct integer results for unequal objects may improve the performance of hash tables.
- Whenever it is invoked on the same object more than once during an execution of a Java application, the
equals
Indicates whether some other object is "equal to" this one.The
equalsmethod implements anequivalence relationon non-null object references:- It isreflexive: for any non-null reference value
x,x.equals(x)should returntrue. - It issymmetric: for any non-null reference values
xandy,x.equals(y)should returntrueif and only ify.equals(x)returnstrue. - It istransitive: for any non-null reference values
x,y, andz, ifx.equals(y)returnstrueandy.equals(z)returnstrue, thenx.equals(z)should returntrue. - It isconsistent: for any non-null reference values
xandy, multiple invocations ofx.equals(y)consistently returntrueor consistently returnfalse, provided no information used inequalscomparisons on the objects is modified. - For any non-null reference value
x,x.equals(null)should returnfalse.
An equivalence relation partitions the elements it operates onintoequivalence classes; all the members of anequivalence class are equal to each other. Members of anequivalence class are substitutable for each other, at leastfor some purposes.
- API Note:
- It is generally necessary to override the
hashCodemethod whenever this method is overridden, so as to maintain thegeneral contract for thehashCodemethod, which statesthat equal objects must have equal hash codes.The two-argument
Objects.equalsmethod implements an equivalence relationon two possibly-null object references. - Implementation Requirements:
- The
equalsmethod for classObjectimplementsthe most discriminating possible equivalence relation on objects;that is, for any non-null reference valuesxandy, this method returnstrueif and onlyifxandyrefer to the same object(x == yhas the valuetrue).In other words, under the reference equality equivalencerelation, each equivalence class only has a single element. - Parameters:
obj- the reference object with which to compare.- Returns:
trueif this object is the same as the obj argument;falseotherwise.- See Also:
- It isreflexive: for any non-null reference value
clone
Creates and returns a copy of this object. The precise meaningof "copy" may depend on the class of the object. The generalintent is that, for any objectx, the expression:
will be true, and that the expression:x.clone() != x
will bex.clone().getClass() == x.getClass()
true, but these are not absolute requirements.While it is typically the case that:
will bex.clone().equals(x)
true, this is not an absolute requirement.By convention, the returned object should be obtained by calling
super.clone. If a class and all of its superclasses (exceptObject) obey this convention, it will be the case thatx.clone().getClass() == x.getClass().By convention, the object returned by this method should be independentof this object (which is being cloned). To achieve this independence,it may be necessary to modify one or more fields of the object returnedby
super.clonebefore returning it. Typically, this meanscopying any mutable objects that comprise the internal "deep structure"of the object being cloned and replacing the references to theseobjects with references to the copies. If a class contains onlyprimitive fields or references to immutable objects, then it is usuallythe case that no fields in the object returned bysuper.cloneneed to be modified.- Implementation Requirements:
- The method
clonefor classObjectperforms aspecific cloning operation. First, if the class of this object doesnot implement the interfaceCloneable, then aCloneNotSupportedExceptionis thrown. Note that all arraysare considered to implement the interfaceCloneableand thatthe return type of theclonemethod of an array typeT[]isT[]where T is any reference or primitive type.Otherwise, this method creates a new instance of the class of thisobject and initializes all its fields with exactly the contents ofthe corresponding fields of this object, as if by assignment; thecontents of the fields are not themselves cloned. Thus, this methodperforms a "shallow copy" of this object, not a "deep copy" operation.The class
Objectdoes not itself implement the interfaceCloneable, so calling theclonemethod on an objectwhose class isObjectwill result in throwing anexception at run time. - Returns:
- a clone of this instance.
- Throws:
CloneNotSupportedException- if the object's class does not support theCloneableinterface. Subclasses that override theclonemethod can also throw this exception to indicate that an instance cannot be cloned.- See Also:
toString
Returns a string representation of the object.Satisfying this method's contract implies a non-nullresult must be returned.- API Note:
- In general, the
toStringmethod returns a string that"textually represents" this object. The result shouldbe a concise but informative representation that is easy for aperson to read.It is recommended that all subclasses override this method.The string output is not necessarily stable over time or acrossJVM invocations. - Implementation Requirements:
- The
toStringmethod for classObjectreturns a string consisting of the name of the class of which theobject is an instance, the at-sign character `@', andthe unsigned hexadecimal representation of the hash code of theobject. In other words, this method returns a string equal to thevalue of:ThegetClass().getName() + '@' + Integer.toHexString(hashCode())Objects.toIdentityStringmethod returns the string for anobject equal to the string that would be returned if neitherthetoStringnorhashCodemethods wereoverridden by the object's class. - Returns:
- a string representation of the object
notify
public final void notify()Wakes up a single thread that is waiting on this object'smonitor. If any threads are waiting on this object, one of themis chosen to be awakened. The choice is arbitrary and occurs atthe discretion of the implementation. A thread waits on an object'smonitor by calling one of thewaitmethods.The awakened thread will not be able to proceed until the currentthread relinquishes the lock on this object. The awakened thread willcompete in the usual manner with any other threads that might beactively competing to synchronize on this object; for example, theawakened thread enjoys no reliable privilege or disadvantage in beingthe next thread to lock this object.
This method should only be called by a thread that is the ownerof this object's monitor. A thread becomes the owner of theobject's monitor in one of three ways:
- By executing a synchronized instance method of that object.
- By executing the body of a
synchronizedstatement that synchronizes on the object. - For objects of type
Class,by executing a static synchronized method of that class.
Only one thread at a time can own an object's monitor.
- Throws:
IllegalMonitorStateException- if the current thread is not the owner of this object's monitor.- See Also:
notifyAll
public final void notifyAll()Wakes up all threads that are waiting on this object's monitor. Athread waits on an object's monitor by calling one of thewaitmethods.The awakened threads will not be able to proceed until the currentthread relinquishes the lock on this object. The awakened threadswill compete in the usual manner with any other threads that mightbe actively competing to synchronize on this object; for example,the awakened threads enjoy no reliable privilege or disadvantage inbeing the next thread to lock this object.
This method should only be called by a thread that is the ownerof this object's monitor. See the
notifymethod for adescription of the ways in which a thread can become the owner ofa monitor.- Throws:
IllegalMonitorStateException- if the current thread is not the owner of this object's monitor.- See Also:
wait
Causes the current thread to wait until it is awakened, typicallyby beingnotified orinterrupted.In all respects, this method behaves as if
wait(0L, 0)had been called. See the specification of thewait(long, int)methodfor details.- Throws:
IllegalMonitorStateException- if the current thread is not the owner of the object's monitorInterruptedException- if any thread interrupted the current thread before or while the current thread was waiting. Theinterrupted status of the current thread is cleared when this exception is thrown.- See Also:
wait
Causes the current thread to wait until it is awakened, typicallyby beingnotified orinterrupted, or until acertain amount of real time has elapsed.In all respects, this method behaves as if
wait(timeoutMillis, 0)had been called. See the specification of thewait(long, int)methodfor details.- Parameters:
timeoutMillis- the maximum time to wait, in milliseconds- Throws:
IllegalArgumentException- iftimeoutMillisis negativeIllegalMonitorStateException- if the current thread is not the owner of the object's monitorInterruptedException- if any thread interrupted the current thread before or while the current thread was waiting. Theinterrupted status of the current thread is cleared when this exception is thrown.- See Also:
wait
Causes the current thread to wait until it is awakened, typicallyby beingnotified orinterrupted, or until acertain amount of real time has elapsed.The current thread must own this object's monitor lock. See the
notifymethod for a description of the ways in whicha thread can become the owner of a monitor lock.This method causes the current thread (referred to here asT) toplace itself in the wait set for this object and then to relinquish anyand all synchronization claims on this object. Note that only the lockson this object are relinquished; any other objects on which the currentthread may be synchronized remain locked while the thread waits.
ThreadT then becomes disabled for thread scheduling purposesand lies dormant until one of the following occurs:
- Some other thread invokes the
notifymethod for thisobject and threadT happens to be arbitrarily chosen asthe thread to be awakened. - Some other thread invokes the
notifyAllmethod for thisobject. - Some other threadinterruptsthreadT.
- The specified amount of real time has elapsed, more or less.The amount of real time, in nanoseconds, is given by the expression
1000000 * timeoutMillis + nanos. IftimeoutMillisandnanosare both zero, then real time is not taken into consideration and thethread waits until awakened by one of the other causes. - ThreadT is awakened spuriously. (See below.)
The threadT is then removed from the wait set for thisobject and re-enabled for thread scheduling. It competes in theusual manner with other threads for the right to synchronize on theobject; once it has regained control of the object, all itssynchronization claims on the object are restored to the status quoante - that is, to the situation as of the time that the
waitmethod was invoked. ThreadT then returns from theinvocation of thewaitmethod. Thus, on return from thewaitmethod, the synchronization state of the object and ofthreadTis exactly as it was when thewaitmethodwas invoked.A thread can wake up without being notified, interrupted, or timing out, aso-calledspurious wakeup. While this will rarely occur in practice,applications must guard against it by testing for the condition that shouldhave caused the thread to be awakened, and continuing to wait if the conditionis not satisfied. See the example below.
For more information on this topic, see section 14.2,"Condition Queues," in Brian Goetz and others'Java Concurrencyin Practice (Addison-Wesley, 2006) or Item 81 in JoshuaBloch'sEffective Java, Third Edition (Addison-Wesley,2018).
If the current thread isinterruptedby any thread before or while it is waiting, then an
InterruptedExceptionis thrown. Theinterrupted status of the current thread is cleared whenthis exception is thrown. This exception is not thrown until the lock status ofthis object has been restored as described above.- API Note:
- The recommended approach to waiting is to check the condition being awaited ina
whileloop around the call towait, as shown in the examplebelow. Among other things, this approach avoids problems that can be causedby spurious wakeups.synchronized (obj) { while ( <condition does not hold and timeout not exceeded> ) { long timeoutMillis = ... ; // recompute timeout values int nanos = ... ; obj.wait(timeoutMillis, nanos); } ... // Perform action appropriate to condition or timeout } - Parameters:
timeoutMillis- the maximum time to wait, in millisecondsnanos- additional time, in nanoseconds, in the range 0-999999 inclusive- Throws:
IllegalArgumentException- iftimeoutMillisis negative, or if the value ofnanosis out of rangeIllegalMonitorStateException- if the current thread is not the owner of the object's monitorInterruptedException- if any thread interrupted the current thread before or while the current thread was waiting. Theinterrupted status of the current thread is cleared when this exception is thrown.- See Also:
- Some other thread invokes the
finalize
Deprecated, for removal: This API element is subject to removal in a future version.Finalization is deprecated and subject to removal in a futurerelease. The use of finalization can lead to problems with security,performance, and reliability.SeeJEP 421 fordiscussion and alternatives.Subclasses that override
finalizeto perform cleanup should usealternative cleanup mechanisms and remove thefinalizemethod.UseCleanerandPhantomReferenceas safer ways to release resourceswhen an object becomes unreachable. Alternatively, add aclosemethod to explicitly release resources, and implementAutoCloseableto enable use of thetry-with-resourcesstatement.This method will remain in place until finalizers have been removed frommost existing code.
Called by the garbage collector on an object when garbage collectiondetermines that there are no more references to the object.A subclass overrides thefinalizemethod to dispose ofsystem resources or to perform other cleanup.When running in a Java virtual machine in which finalization has beendisabled or removed, the garbage collector will never call
finalize(). In a Java virtual machine in which finalization isenabled, the garbage collector might callfinalizeonly after anindefinite delay.The general contract of
finalizeis that it is invokedif and when the Java virtualmachine has determined that there is no longer anymeans by which this object can be accessed by any thread that hasnot yet died, except as a result of an action taken by thefinalization of some other object or class which is ready to befinalized. Thefinalizemethod may take any action, includingmaking this object available again to other threads; the usual purposeoffinalize, however, is to perform cleanup actions beforethe object is irrevocably discarded. For example, the finalize methodfor an object that represents an input/output connection might performexplicit I/O transactions to break the connection before the object ispermanently discarded.The
finalizemethod of classObjectperforms nospecial action; it simply returns normally. Subclasses ofObjectmay override this definition.The Java programming language does not guarantee which thread willinvoke the
finalizemethod for any given object. It isguaranteed, however, that the thread that invokes finalize will notbe holding any user-visible synchronization locks when finalize isinvoked. If an uncaught exception is thrown by the finalize method,the exception is ignored and finalization of that object terminates.After the
finalizemethod has been invoked for an object, nofurther action is taken until the Java virtual machine has againdetermined that there is no longer any means by which this object canbe accessed by any thread that has not yet died, including possibleactions by other objects or classes which are ready to be finalized,at which point the object may be discarded.The
finalizemethod is never invoked more than once by a Javavirtual machine for any given object.Any exception thrown by the
finalizemethod causesthe finalization of this object to be halted, but is otherwiseignored.- API Note:
- Classes that embed non-heap resources have many optionsfor cleanup of those resources. The class must ensure that thelifetime of each instance is longer than that of any resource it embeds.
Reference.reachabilityFence(Object)can be used to ensure thatobjects remain reachable while resources embedded in the object are in use.A subclass should avoid overriding the
finalizemethodunless the subclass embeds non-heap resources that must be cleaned upbefore the instance is collected.Finalizer invocations are not automatically chained, unlike constructors.If a subclass overridesfinalizeit must invoke the superclassfinalizer explicitly.To guard against exceptions prematurely terminating the finalize chain,the subclass should use atry-finallyblock to ensuresuper.finalize()is always invoked. For example,@Override protected void finalize() throws Throwable { try { ... // cleanup subclass state } finally { super.finalize(); } } - Throws:
Throwable- theExceptionraised by this method- SeeJava Language Specification:
- 12.6 Finalization of Class Instances
- See Also: