java.lang.Object
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.Object相关的知识,希望对你有一定的参考价值。
Class Object是类Object的根,所有的对象(包括数组)都实现了这个类的方法。
方法:
Modifier and type | Method | Description |
---|---|---|
protect Object | clone() | 创建并返回此对象的副本 |
Boolean | equals(Object obj) | 判断对象是否相等 |
protect void | finalsize() | 当垃圾收集确定没有该对象的引用时,垃圾收集器在该对象上调用该对象 |
类<?> | getClass() | 返回此Object的运行时类 |
int | hashCode() | 返回对象的哈希码值 |
void | notify() | 唤醒正在等待对象监视器的单个线程 |
void | notifyAll() | 唤醒正在等待对象监视器的所有线程 |
String | toString() | 返回对象的字符串表示形式 |
void | wait() | 使当前线程等待,直到另一个线程调用该对象的notify()或notify All()方法 |
void | wait(long timeout) | 使当前线程等待,直到另一个线程调用该对象的notify()或notify All()方法或者指定时间已过 |
void | wait(long timeout,int nanos) | 使当前线程等待,直到另一个线程调用该对象的notify()或notityAll()方法或者某些其他线程中断当前线程,或者指定时间已过???(不是很明白) |
方法详解
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)和y.equals(z)都返回true,那么x.equals(z)返回true。
- 一致性:多次调用 x.equals(y)应始终返回true或者false,如果x或y的值没有被修改。
- 对于任意的非空参考值x ,x.equals(null)返回false。
protected Object clone() throws CloneNotSupportedException:
创建并返回此对象的副本。 “复制”的精确含义可能取决于对象的类。 一般的意图是,对于任何对象x ,表达式:
x.clone() != x
x.clone().getClass() == x.getClass()
x.clone().equals(x)
异常:CloneNotSupportedException - 如果对象的类不支持Cloneable接口。 覆盖clone方法的子类也可以抛出此异常以指示实例无法克隆。
public String toString():
返回对象的字符串表示形式。 一般来说, toString方法返回一个“textually代表”这个对象的字符串。 结果应该是一个简明扼要的表达,容易让人阅读。 建议所有子类覆盖此方法。
public final void notify():
唤醒正在等待对象监视器的单个线程。 如果任何线程正在等待这个对象,其中一个被选择被唤醒。 选择是任意的,并且由实施的判断发生。 线程通过调用wait方法之一等待对象的监视器。
唤醒的线程将无法继续,直到当前线程放弃此对象上的锁定为止。 唤醒的线程将以通常的方式与任何其他线程竞争,这些线程可能正在积极地竞争在该对象上进行同步; 例如,唤醒的线程在下一个锁定该对象的线程中没有可靠的权限或缺点。
该方法只能由作为该对象的监视器的所有者的线程调用。
线程以三种方式之一成为对象监视器的所有者:
通过执行该对象的同步实例方法。
通过执行在对象上synchronized synchronized语句的正文。
对于类型为Class,的对象,通过执行该类的同步静态方法。
异常:IllegalMonitorStateException - 如果当前线程不是此对象的监视器的所有者。
public final void notifyAll():
唤醒正在等待对象监视器的所有线程。 线程通过调用wait方法之一等待对象的监视器。唤醒的线程将无法继续,直到当前线程释放该对象上的锁。 唤醒的线程将以通常的方式与任何其他线程竞争,这些线程可能正在积极地竞争在该对象上进行同步; 例如,唤醒的线程在下一个锁定该对象的线程中不会有可靠的特权或缺点。
protected void finalize() throws Throwable:
当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。 一个子类覆盖了处理系统资源或执行其他清理的finalize方法。
finalize的一般合同是,如果Java¢虚拟机已经确定不再有任何方法可以被任何尚未死亡的线程访问的方法被调用,除非是由于最后确定的其他对象或类的准备工作所采取的行动。 finalize方法可以采取任何行动,包括使此对象再次可用于其他线程; 然而, finalize的通常目的是在对象不可撤销地丢弃之前执行清除动作。 例如,表示输入/输出连接的对象的finalize方法可能会在对象被永久丢弃之前执行显式I / O事务来中断连接。
所述finalize类的方法Object执行任何特殊操作; 它只是返回正常。 Object的Object可以覆盖此定义。
Java编程语言不能保证哪个线程将为任何给定的对象调用finalize方法。 但是,确保调用finalize的线程在调用finalize时不会持有任何用户可见的同步锁。 如果finalize方法抛出未捕获的异常,则会忽略该异常,并终止该对象的定类。
在为对象调用finalize方法之后,在Java虚拟机再次确定不再有任何方式可以通过任何尚未被死亡的线程访问此对象的任何方法的情况下,将采取进一步的操作,包括可能的操作由准备完成的其他对象或类别,此时可以丢弃对象。
finalize方法从不被任何给定对象的Java虚拟机调用多次。
finalize方法抛出的任何异常都会导致该对象的终止被停止,否则被忽略。
本人刚实习的小白板一块,慢慢提高自己,有错误请大神指出。谢谢。
以上是关于java.lang.Object的主要内容,如果未能解决你的问题,请参考以下文章