Java Object method summary

  1. clone(): 如果此对象的类不能实现接口 Cloneable,则会抛出 CloneNotSupportedException。注意:所有的数组都被视为实现接口 Cloneable此方法执行的是该对象的“浅表复制”,而不“深层复制”操作。
  2. equals(Object obj)
  3. hashCode() : 如果根据 equals(Object) 方法,两个对象是相等的,那么在两个对象中的每个对象上调用 hashCode 方法都必须生成相同的整数结果。 如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么在两个对象中的任一对象上调用 hashCode 方法必定会生成不同的整数结果,为不相等的对象生成不同整数结果可以提高哈希表的性能。
  4. finalize(): 对于任何给定对象,Java 虚拟机最多只调用一次 finalize 方法。finalize 的主要目的是在不可撤消地丢弃对象之前执行清除操作。例如,表示输入/输出连接的对象的 finalize 方法可执行显式 I/O 事务,以便在永久丢弃对象之前中断连接。
  5. toString()  : Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成: getClass().getName() + '@' + Integer.toHexString(hashCode()
  6. getClass()
  7. notify(): 此方法只应由作为此对象监视器的所有者的线程来调用。通过以下三种方法之一,线程可以成为此对象监视器的所有者:
    • 通过执行此对象的同步 (Sychronized) 实例方法。
    • 通过执行在此对象上进行同步的 synchronized 语句的正文。
    • 对于 Class 类型的对象,可以通过执行该类的同步静态方法。
    一次只能有一个线程拥有对象的监视器。被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争
  8. notifyAll()
  9. wait()
  10. wait(long timeout): 出于线程调度目的,线程 T 被禁用,且处于休眠状态,直到发生以下四种情况之一:
    • 其他某个线程调用此对象的 notify 方法,并且线程 T 碰巧被任选为被唤醒的线程。
    • 其他某个线程调用此对象的 notifyAll 方法。
    • 其他某个线程中断线程 T
    • 已经到达指定的实际时间。但是,如果 timeout 为零,则不考虑实际时间,该线程将一直等待,直到获得通知。

    在没有被通知、中断或超时的情况下,线程还可以唤醒一个所谓的虚假唤醒 (spurious wakeup)。虽然这种情况在实践中很少发生,但是应用程序必须通过以下方式防止其发生,即对应该导致该线程被提醒的条件进行测试,如果不满足该条件,则继续等待。换句话说,等待应总是发生在循环中,如下面的示例:

    synchronized (obj) {
    while (<condition does not hold>)
    obj.wait(timeout);
    ... // Perform action appropriate to condition
    }
  11. wait(long timeout, int nanos)

posted on 2010-03-01 16:13  北冥有鱼,化而为鸟  阅读(287)  评论(0编辑  收藏  举报

导航