/*
* 所有java类的顶级父类
* 定义了所有类的通用方法
* */
/*创建一个Object对象*/
Object obj = new Object();
/*比较两个引用是否指向同一个对象this == obj,指针是否相等
* 如果需要判断两个对象是否相同时需要重写equals方法
* 重写equals方法的要求:
* 自反性:对于任何非空引用x,x.equals(x)返回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;
* 一致性:如果引用x,y没有任何变化,反复调用x.equals(y)返回结果应该是相同的;
* 非空性:对于任何非空引用x,x.equals(null)返回false;
* 必须重写hashCode()方法,两个对象相等hashCode()返回结果必须相同;
* */
obj.equals(new Object());
/*
* native方法(调用非java语言(c/c++)代码实现)
* 返回一个对象的哈希码,对象的唯一标识
* 两个对象相等哈希码也一定相等
* */
obj.hashCode();
/*打印对象类名字和十六进制的哈希码getClass().getName() + "@" + Integer.toHexString(hashCode()*/
obj.toString();
/*native方法(调用非java语言(c/c++)代码实现)获得对象的类对象*/
obj.getClass();
/*native方法(调用非java语言(c/c++)代码实现)唤醒一个阻塞在该对象上的线程,
如果有多个线程阻塞在这个对象上,则随机唤醒一个*/
obj.notify();
/*native方法(调用非java语言(c/c++)代码实现)唤醒一个阻塞在该对象上的所有线程*/
obj.notifyAll();
/*
* native方法(调用非java语言(c/c++)代码实现)
* 调用wait(0)方法实现,当前线程阻塞在该对象上,
* 直到其他线程调用了该对象的notify()方法或者notifyAll()方法,唤醒当前线程
* 当前线程被其他线程中断抛出InterruptedException异常
* */
try {
obj.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
* native方法(调用非java语言(c/c++)代码实现)
* 当前线程阻塞在该对象上10毫秒,
* 超时或者阻塞期间其他线程调用了该对象的notify()方法或者notifyAll()方法,唤醒当前线程
* 当前线程被其他线程中断抛出InterruptedException异常
* */
try {
obj.wait(10L);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*native方法(调用非java语言(c/c++)代码实现)
* 当前线程阻塞在该对象上10毫秒+10微秒
* 微秒参数的范围0-999999
* 超时或者阻塞期间其他线程调用了该对象的notify()方法或者notifyAll()方法,唤醒当前线程
* 当前线程被其他线程中断抛出InterruptedException异常
* */
try {
obj.wait(10,10);
} catch (InterruptedException e) {
e.printStackTrace();
}
/*
* 子类调用的方法,native方法,获得一个子类对象的副本
* protected native Object clone() throws CloneNotSupportedException;
* */
手撕java顶级父类Object
最新推荐文章于 2024-12-29 15:33:58 发布
