书成

再这样堕落下去就给我去死啊你这混蛋!!!

0%

Java Object类

Object类

getClass 方法

1
public final native Class<?> getClass();

 这个方法是 Native 方法,返回的是一个对象的实际类型,返回的type是Class<? extends |X|>,例如,如下代码输出的结果是 Integer。

1
2
Number n = 0;
System.out.println(n.getClass());

hashCode方法

1
public native int hashCode();

 在Object类的文档中,对 hashCode() 方法做了详细的要求:

  • 如果对象的信息没有被修改,对同一个对象的多次调用应该返回同一个结果。
  • 如果两个对象 equals() 方法调用结果为 true,那么这两个对象应该返回相同的 hashCode ,故覆盖 equals 方法必须覆盖 hashCode 方法。
  • 并不强制要求不相等的两个对象的 hashCode 必须不相同,但是不同的 hashCode 对 hash 表的使用更友好。

equals 方法

1
2
3
public boolean equals(Object obj){
return (this == obj);
}

 在 Object 类的文档中,对 equals 方法做了详细的要求:

  • 该方法可以返回非空对象引用的等价关系。
  • 该方法应该具备自反性,即 x.equals(x) 应该返回 true 。
  • 该方法应该具备对称性,即 x.equals(y) 返回 true 时,y.equals(x) 也应该返回 true 。
  • 该方法应该具备传递性,即 x.equals(y) 返回 true ,y.equals(z) 也返回 true 时, x.equals(z) 也应该返回 true 。
  • 该方法应该具备一致性,即在对象未被修改的情况下,多次调用x.equals(y) 返回值也一样。
  • 对于任意非空引用 x ,x.equals(null) 的结果应该是 false 。

clone 方法

1
protected native Object clone() throws CloneNotSupportedException;

  clone方法返回一个对象的复制,一般要求满足 x.clone() != x 成立,并且 x.clone().getClass() == x.getClass() 成立。这个方法返回的对象应该与原对象独立,使用原对象的字段对返回的对象进行初始化。
 类在实现这个方法时,必须先实现 Cloneable 接口。如果没有实现接口 Cloneable ,则抛出 CloneNotSupportedException 。注意,所有数组都被认为实现了Cloneable接口,数组类型T[]的克隆方法的返回类型是T[],其中T是任何引用或基本类型。

toString 方法

1
2
3
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

  这个方法返回对象的字符串表示形式。

线程相关方法

1
2
3
4
5
6
7
8
9
10
// 会唤醒等待在当前对象监视器的线程,被唤起的线程重新加入监视器锁的竞争中
public final native void notify();
public final native void notifyAll();

// 只有获得当前对象监视器锁的线程才能调用,线程放弃当前监视器锁,转入等待队列
public final void wait() throws InterruptedException {
wait(0L);
}
public final native void wait(long timeoutMillis) throws InterruptedException;
public final void wait(long timeoutMillis, int nanos) throws InterruptedException

 线程在执行 synchronized 标识的方法,代码块,静态方法时会获得当前对象监视器的锁。

finalize 方法

1
2
@Deprecated(since="9")
protected void finalize() throws Throwable { }

 这个方法并不被推荐使用,因为它的执行时间,执行顺序,是否执行完成都不能确定。在需要释放资源的场合,推荐使用 AutoCloseable 接口完成。