public class Object
Object
类是类层次结构的根。每个类都有
Object
作为超类。所有对象,包括数组,实现这个类的方法。
类
Constructor and Description |
---|
Object() |
Modifier and Type | Method and Description |
---|---|
protected Object |
clone()
创建并返回此对象的副本。
|
boolean |
equals(Object obj)
指示是否有其他对象“等于”这一个。
|
protected void |
finalize()
当垃圾收集确定没有对对象的引用时,由对象上的垃圾收集器调用。
|
类<?> |
getClass()
返回该
Object 运行时类。
|
int |
hashCode()
返回一个对象的哈希代码值。
|
void |
notify()
唤醒一个在这个对象的监视器上等待的单个线程。
|
void |
notifyAll()
唤醒正在等待此对象监视器上的所有线程。
|
String |
toString()
返回对象的字符串表示形式。
|
void |
wait()
使当前线程等待另一个线程调用此对象的方法或
notify()
notifyAll() 方法。
|
void |
wait(long timeout)
使当前线程等待另一个线程调用此对象的方法或
notify()
notifyAll() 方法,或一个指定的时间流逝。
|
void |
wait(long timeout, int nanos)
使当前线程等待另一个线程调用此对象的方法或
notify()
notifyAll() 方法,或者其他某个线程中断当前线程,或一定量的实际时间已经过去了。
|
public final 类<?> getClass()
Object
运行时类。返回的
类
对象是由类的代表
static synchronized
方法锁定对象。
实际结果是,|X|
Class<? extends |X|>
的表达,getClass
称为静态类型擦除。例如,没有投在这个代码片段的要求:
Number n = 0;
Class<? extends Number> c = n.getClass();
类
对象。
public int hashCode()
HashMap
利益支持。
对hashCode
一般合同:
hashCode
方法总是返回相同的整数,没有提供信息用于equals
比较的对象被修改。这个整数不需要保持一致,从一个应用程序的一个执行到另一个执行相同的应用程序。equals(Object)
法两个对象是相等的,那么调用hashCode
方法每一个对象必须产生相同的整数结果。equals(java.lang.Object)
法两个对象是不平等的,然后调用hashCode
方法每一个对象必须产生不同的整数结果。然而,程序员应该意识到,产生不同的整数结果的不平等的对象可能会提高哈希表的性能。尽合理的切实可行,由类Object
定义hashCode方法返回不同的对象不同的整数。(这通常是通过将该对象的内部地址转换成一个整数,但这不是实现实现技术的™java编程语言。要求)
equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public boolean equals(Object obj)
的equals
方法实现了对非空对象引用的一个等价关系:
x
,x.equals(x)
应该返回true
。x
和y
,x.equals(y)
应该返回true
当且仅当y.equals(x)
返回true
。x
,y
,和z
,如果x.equals(y)
返回true
和y.equals(z)
返回true
,然后x.equals(z)
应该返回true
。x
和y
,多次调用x.equals(y)
始终返回true
或始终返回false
,没有提供信息用于equals
比较对象被修改。x
,x.equals(null)
应该返回false
。这类Object
equals
方法实现对象上差别可能性最大的等价关系;就是说,对于任何非空的参考值x
和y
,此方法返回true
当且仅当x
和y
引用同一个对象(x == y
有价值true
)。
请注意,它一般是必要覆盖hashCode
方法重写此方法,以保持对hashCode
方法的一般合同,即平等的对象必须具有相等的散列码。
obj
-参考对象的比较。
true
obj参数相同;
false
否则。
hashCode()
,
HashMap
protected Object clone() throws CloneNotSupportedException
x
,表达:
将是真实的,并表示:x.clone() != x
将x.clone().getClass() == x.getClass()
true
,但这些都不是绝对的要求。虽然这是通常的情况下,
将x.clone().equals(x)
true
,这不是一个绝对的要求。
按照惯例,返回的对象应该通过调用super.clone
获得。如果一个类和它的所有父类(除Object
)遵守本公约的情况下,这将是x.clone().getClass() == x.getClass()
。
根据惯例,这个方法返回的对象应该是独立于这个对象(正在被克隆)。为了实现这种独立性,需要修改的super.clone
返回对象的一个或多个字段然后返回。通常,这意味着复制任何可变对象,包括内部的“深层结构”被克隆对象的更换与该份对这些对象的引用的参考文献。如果一个类只包含原始字段或对不可变对象的引用,那么它是通常的情况下,通过super.clone
返回的对象中的任何字段需要修改。
类的方法Object
clone
执行特定的复制操作。首先,如果此对象的类不实现接口Cloneable
,然后CloneNotSupportedException
抛出。请注意,所有的数组都被实现的接口Cloneable
,数组类型的clone
T[]
方法的返回类型是T[]
其中T是任何参考或原始类型。否则,此方法创建此对象的类的新实例并初始化与正是这个对象的相应字段内容的各个领域,如分配;字段的内容不克隆自己。因此,该方法执行此对象的“浅副本”,而不是“深复制”操作。
这类Object
本身不实现接口Cloneable
,所以调用一个对象的类是Object
将导致在运行时抛出异常的clone
方法。
CloneNotSupportedException
-如果对象的类不支持
Cloneable
接口。子类重写
clone
方法也抛出该异常表示实例无法克隆。
Cloneable
public String toString()
toString
方法返回一个字符串,“以文本方式表示”这个对象。其结果应该是一个简洁,但翔实的代表性,是一个容易阅读的人。建议所有子类都重写此方法。
Object
类的toString
方法返回一个包含该类的对象是一个实例的名称字符串的符号` @
',和符号进制表示的对象的哈希码。换句话说,此方法返回一个等于值的字符串:
getClass().getName() + '@' + Integer.toHexString(hashCode())
public final void notify()
wait
方法。
被唤醒的线程将无法继续进行,直到当前线程放弃此对象上的锁定。唤醒的线程将以通常的方式与任何其他可能正在积极竞争的线程同步的方式竞争;例如,唤醒的线程在被下一个线程锁定这个对象时没有可靠的特权或缺点。
此方法只应被一个线程的所有者,该线程是这个对象的监视器的所有者。线程成为对象的监视器的所有者在三种方式中的一种:
synchronized
声明对象上进行同步的身体。Class,
对象执行同步静态方法的类。只有一个线程在一个时间可以拥有一个对象的监视器。
IllegalMonitorStateException
-如果当前线程不拥有此对象监视器。
notifyAll()
,
wait()
public final void notifyAll()
wait
方法。
被唤醒的线程将无法继续进行,直到当前线程放弃此对象上的锁定。唤醒的线程将以通常的方式与任何其他可能正在积极竞争的线程同步的方式竞争;例如,唤醒的线程在被下一个线程锁定这个对象时没有可靠的特权或缺点。
此方法只应被一个线程的所有者,该线程是这个对象的监视器的所有者。看到一个描述的方式,一个线程可以成为监视器所有者的notify
方法。
IllegalMonitorStateException
-如果当前线程不拥有此对象监视器。
notify()
,
wait()
public final void wait(long timeout) throws InterruptedException
notify()
notifyAll()
方法,或一个指定的时间流逝。
当前线程必须拥有此对象的监视器。
这种方法使当前线程(称之为T)把自己置于对象的等待集中,然后放弃此对象上的所有同步要求。线程的线程调度的目的T成为残疾人和处于休眠状态,直到四个事情发生:
notify
方法。notifyAll
方法。timeout
是零,但是,再不考虑实际时间和线程只是等待通知。wait
方法被调用。螺纹
T然后返回的
wait
方法的调用。因此,从
wait
方法返回的对象和线程
T
同步状态正是当
wait
方法被调用。
一个线程可以同时醒来,没有被通知,中断,或时,所谓的空虚假唤醒。虽然这将很少发生在实践中,应用程序必须防止它通过测试的条件,应该引起线程被唤醒,并继续等待,如果条件不满意。换句话说,等待应该总是发生在循环中,就像这一个:
同步(obj){虽然( <条件不成立> )obj等(超时);…/执行适当的条件} 条件不成立>(有关此主题的更多信息,见第3.2.3在java中的Doug Lea的“并行编程(第二版)”(Addison Wesley,2000),或50项在Joshua Bloch的“有效的java语言程序设计教程》(Addison Wesley,2001)。
如果当前线程的线程interrupted之前或同时是等待,然后InterruptedException
抛出。此对象的锁定状态已还原为上面所述的,此异常不会引发此异常。
请注意,wait
方法,它将当前线程进入等待设置该对象,打开只有这个对象;任何其他对象在当前线程可以同步线程等待时仍处于锁定状态。
此方法只应被一个线程的所有者,该线程是这个对象的监视器的所有者。看到一个描述的方式,一个线程可以成为监视器所有者的notify
方法。
timeout
-最大等待时间以毫秒为单位。
IllegalArgumentException
如果超时值是负数。
IllegalMonitorStateException
-如果当前线程不是此对象监视器的所有者。
InterruptedException
-如果任何线程中断当前线程之前或在当前线程正在等待通知。当前线程的空中断状态被清除时,抛出该异常。
notify()
,
notifyAll()
public final void wait(long timeout, int nanos) throws InterruptedException
notify()
notifyAll()
方法,或者其他某个线程中断当前线程,或一定量的实际时间已经过去了。
这种方法类似于一个参数的wait
方法,但它允许更好地控制时间放弃之前等待通知。真正的时间量,测量纳秒,给出:
1000000*timeout+nanos
在所有其他方面,这种方法做同样的事情作为一个论证的方法wait(long)
。特别是,wait(0, 0)
意味着什么wait(0)
相同。
当前线程必须拥有此对象的监视器。线程释放该监视器的所有权,并等待,直到下列两个条件发生:
notify
notifyAll
线程。timeout
毫秒加nanos
毫微秒参数指定,逝去了。然后,该线程等待,直到它可以重新获得监视器的所有权并恢复执行。
在一个说法,中断和虚假唤醒是可能的,这种方法应该在循环中使用:
同步(obj){虽然( <条件不成立> )obj等(超时,Nano);…/执行适当的条件} 条件不成立>这种方法应该只被一个线程是拥有此对象监视器。看到一个描述的方式,一个线程可以成为监视器所有者的
notify
方法。
timeout
-最大等待时间以毫秒为单位。
nanos
-额外的时间在纳秒范围是999999。
IllegalArgumentException
-如果超时值是负的值或Nano不在范围是999999。
IllegalMonitorStateException
-如果当前线程不拥有此对象监视器。
InterruptedException
-如果任何线程中断当前线程之前或在当前线程正在等待通知。当前线程的空中断状态被清除时,抛出该异常。
public final void wait() throws InterruptedException
notify()
notifyAll()
方法。换句话说,这个方法的行为就好像它仅执行呼叫
wait(0)
。
当前线程必须拥有此对象的监视器。的线程释放该监视器的所有权并等待,直到另一个线程通知等待此对象监视器醒来通过调用方法或方法的notify
notifyAll
线程。然后,该线程等待,直到它可以重新获得监视器的所有权并恢复执行。
在一个说法,中断和虚假唤醒是可能的,这种方法应该在循环中使用:
同步(obj){虽然( <条件不成立> )wait() OBJ;…/执行适当的条件} 条件不成立>这种方法应该只被一个线程是拥有此对象监视器。看到一个描述的方式,一个线程可以成为监视器所有者的
notify
方法。
IllegalMonitorStateException
-如果当前线程不是此对象监视器的所有者。
InterruptedException
-如果任何线程中断当前线程之前或在当前线程正在等待通知。当前线程的空中断状态被清除时,抛出该异常。
notify()
,
notifyAll()
protected void finalize() throws Throwable
finalize
方法配置系统资源或执行其他清理。
对finalize
总承包是调用如果java虚拟机™已经决定,不再有任何这样的对象可以被任何线程尚未死亡访问,除了由于一些其他对象或类,准备敲定结束了一个动作。的finalize
方法可以采取任何行动,包括使该对象重新获得其他线程;对finalize
,通常的目的不过是之前的对象是不可撤销地丢弃执行清理行动。例如,表示一个对象的最终方法,表示一个输入/输出连接可能会执行明确的I / O交易,以打破之前的对象被永久丢弃的连接。
Object
类的finalize
方法不执行专项行动;它只是返回正常。子类可以重写此Object
定义。
java编程语言不保证该线程将调用任何给定对象的finalize
方法。它保证,但是,调用的线程将不会持有任何用户可见的同步锁,当执行完成时调用。如果finalize方法抛出未捕获的异常,异常是不容忽视的,对象终止终止。
在finalize
方法已为一个对象调用,没有进一步采取行动,直到java虚拟机再次确定不再有任何这样的对象可以被任何线程尚未死亡的访问,包括由其他对象或准备敲定类可能采取的行动,在这点对象可能被丢弃。
该方法是finalize
最多只调用一次java虚拟机在任何给定的对象。
任何异常的原因finalize
方法抛出这个对象最终被叫停,但被忽视。
Throwable
-
异常
提出的这个方法
WeakReference
,
PhantomReference
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.