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 接口完成。