JAVA Object类
Object类是JAVA中所有对象的基类。
/**
* 返回运行时类
*/
public final native Class<?> getClass();
/**
* 返回对象hash值
* <1> 不改变对象属性的前提下。
* 程序的一次执行,同一对象先后获取的hashcode必须一致;
* 而另一次执行时,可以与当前执行时对象的hashcode值不一致
* <2> equals方法返回true,则两个对象的hashcode必须一致
* <3> equals方法返回false,并不能保证两个对象的hashcode值不一致
*/
public native int hashCode();
/**
* 用于判断一个对象与另一个对象是否相等(默认就是用==判断,当且仅当x,y表示同一对象时才为true)
* equals方法需要满足条件:
* <1> 对于非空对象,自身对自身的equals方法恒true
* <2> 对称性;X.equals(Y)为true,则Y.equals(X)也为true
* <3> 传递性;X.equals(Y)为true,且Y.equals(Z)为true,那么X.equals(Z)也为true
* <4> 永久性:不改变两对象属性前提下,多次判断X.equals(Y)结果始终一致
* <5> 任何对象,equals(null)永为false
* 注意点:
* 重写本方法时,必须要同时重写hashcode方法,以保证特性:俩对象相等时,它们的hashcode值必定一致
*/
public boolean equals(Object obj) {
return (this == obj);
}
/**
* 创建对象的副本。
* 不提供默认实现。如果没有实现Cloneable接口,会抛运行时异常 CloneNotSupportedException
* 所有数组都实现了Cloneable接口,数组的元素都是新的实例值,但是对对象元素来说,得注意“浅拷贝”问题
*/
protected native Object clone() throws CloneNotSupportedException;
/**
* 返回对象的字符串表示。
* 默认表现形式: 完整类名@十六进制hashcode
*/
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
线程唤醒
/**
* 放弃对象锁,并随机唤醒一个等待该对象的线程(可能有多个等待,只随机唤醒一个)
* 只能被有锁的线程调用,否则抛异常 IllegalMonitorStateException
*/
public final native void notify();
/**
* 放弃对象锁,并唤醒所有等待该对象的线程
* 只能被有锁的线程调用,否则抛异常 IllegalMonitorStateException
*/
public final native void notifyAll();
wait线程等待
/**
* 当前线程等待,直到别的线程通过notify或notifyAll唤醒,或者经过特定的时效
* 前提: 当前线程必须得先有本对象的锁
* 线程一直处于等待状态,直到满足以下四点中任一条件:
* 1)别的线程调用了本对象的notify,恰好唤醒了本线程;
* 2)别的线程调用了本对象的notifyAll;
* 3)别的线程中断了本线程;
* 4)达到预设时间,##设为0时表示不考虑时间因素,只等唤醒##
*
* 注意点:
* 1)虚假唤醒问题。应该将if -> while循环
* 2)本方法调用,会将当前线程放进等待集合,并只释放#本对象锁#,其它的对象锁仍然会被保持;可能会出现死锁
*
* 只能被有锁的线程调用,否则抛异常 IllegalMonitorStateException
*/
public final native void wait(long timeout) throws InterruptedException;
/**
* wait(long timeout)的纳秒时间配置
* 纳秒并没实际设置,采用四舍五入的方式到秒
*/
public final void wait(long timeout, int nanos) throws InterruptedException
/**
* wait(0)永不过期的配置
*/
public final void wait() throws InterruptedException
finalize终结方法
/**
* 在垃圾回收算法判定本对象已无引用时,由垃圾回收器调用,具体回收时间未知
* 注意点:
* 官方不建议使用finalize方法,
*/
protected void finalize() throws Throwable { }