Java Object 的介绍

什么是Object

public class Object:
Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class.

Object是所有类层次结构的根,所有的类都继承与Object或者其子类。
同时,Object是唯一没有父节点的类。

Object 的Constructor

没有任何代码,只是简单的一个声明。

methods

Object 方法列表

getClass

public final Class<?> getClass()

返回这个Object在运行时的类型。
returns:The Class object that represents the runtime class of this object.

hashCode

public int hashCode()

返回该Object的哈希值。这个方法用于获得哈希表的好处而被支持。
hashCode的基本约定:

  • 在同一个Java代码的执行中,任何时候调用相同Object的hashCode将会返回相同的值。但是,在同一个Java程序的不同的执行当中,可以返回不同的值。
  • 如果两个Object调用equals方法返回true,那么两个Object的hashCode必须返回相同的值。
  • 两个Object根据equals方法返回false,两个Object的hashCode方法可能返回相同的哈希值。但是,程序员应该意识到,让两个不同的Object产生不同的hash code可能会提高哈希表的性能。
    实际上,Object定义的hashCode方法会返回不同的hash code。
    returns:a hash code value for this object。

equals

public boolean equals(Object obj)

判断该Object是否“equals to”另一个Object。
equals方法用于判断非空object引用的相等关系:

  • 反转性:a.equals(a)肯定返回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。
  • 一致性:重复调用equals方法,应当始终返回相同的结果。
  • 任意非空的x,x.equals(null)应当返回false。
    Object的equals方法实现了一个最严格的相等关系的判断,当且仅当x和y指向同一个object(x==y为true)
    Parameters:
    obj - the reference object with which to compare.
    Returns:
    true if this object is the same as the obj argument; false otherwise.

clone

protect Object clone() throws CloneNotSupportedException

创建并返回该object的一个副本。这里“副本”的精确定义取决于这个object具体的类。

 x.clone() != x

will be true, and that the expression:

 x.clone().getClass() == x.getClass()

will be true, but these are not absolute requirements. While it is typically the case that:

 x.clone().equals(x)

will be true, this is not an absolute requirement.
按照规定,返回的object应当独立于他克隆的对象。为了实现这种独立性,可能需要改变super.clone()返回的一些值域。通常,在拷贝任何可变的且具有内部深层结构的时候需要改变。如果类只包含基本变量的值域或者引用一不可变的object,那么这样的类就不需要改变任何super.clone()返回的值。
类需要实现Cloneable接口,如不支持,那么程序会抛出CloneNotSupportedException。注意,所有的数组都实现了Cloneable接口。这个方法只会创建一个新的数组,但是会直接用原来数组的内容来赋值新的数组,而不是重新克隆一个内容,因此,这是一种“影子克隆”,并不是“deep clone”操作。
Object对象并没有实现Cloneable接口,所以在Object上调用clone方法会在运行时抛出一个异常。
Returns:
a clone of this instance.
Throws:
CloneNotSupportedException - if the object’s class does not support the Cloneable interface. Subclasses that override the clone method can also throw this exception to indicate that an instance cannot be cloned.

toString

public String toString()

返回一个字符串表达式。一般来说,返回object的一个文本表达。结果应该简单但是有意义,推荐所有的子类都重写这个方法。
Object的tostring方法返回一个包含类名,@符号和无符号的十六进制的哈希值。
Returns:
a string representation of the object.

notify

public final void notify()

唤醒一个该对象监控下的线程。如果任何线程在等待该对象,那么其中一个将会被唤醒。这个选择是随机产生的。一个线程通过调用wait方法来加入对象的监测器。
唤醒的线程需要等到当前线程放弃锁才能执行,唤醒的线程将和所有其他激活了的线程一起竞争对象的同步数据;也就是说唤醒的线程在获取对象锁上没有任何特权,也不会有影响。
这个方法应当只由拥有对象监视器的线程调用,一个线程要拥有监视器有如下三个方法:

  • 执行一个该对象的一个同步实例的方法
  • 执行对象的同步语句块
  • 对于Class类型的对象,可以调用同步的静态类
    在任意时刻只能有一个线程可以拥有对象的监视器。
    Throws:
    IllegalMonitorStateException - if the current thread is not the owner of this object’s monitor.

notifyAll

public final void notifyAll()

唤醒所有等待该对象监视器的线程。
其他效果和notify差不多

wait

public final void wait(long timeout) 
        throws InterruptedException

使当前线程等待,直到另一个线程唤醒或者等待时间结束。
当前线程必须拥有该对象的监视器(monitor).
这个方法会让当前线程进入等待队列,并且放弃该对象所有的同步锁。线程不进入线程调度直到下列某件事发生:

  • 别的线程通过notify方法唤醒该线程
  • 别的线程调用notifyAll唤醒该线程
  • 别的线程中断了该线程
  • 经过了设定的时长。如果设定的时长为0,那么线程一直等待notify。
    线程被移除等待队列,重启线程调度
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值