1.clone
由于 Object 本身没有实现 Cloneable 接口,所以不重写 clone 方法并且进行调用的话会发生 CloneNotSupportedException 异常。
一般用于深copy,浅copy
先implements Cloneable,再重写clone()方法
2.equals
目的:判断两个对象是否相等
Object里equals()默认用的==;
建议重写该方法
== :基础类型:比对值;引用类型:比对引用的地址
equals:没有重写:与==相同
equals:重写:基础类型:比对值;引用类型:比对引用所指向的对象的内容
拓展:基础类型用 ==,引用类型用重写后的equals
3.hashCode
实际上就是一个Java对象的内存地址,经过哈希算法, 得出的一个数字。
所以该方法的执行结果可以等同看作一个Java对象的内存地址。
4.finalize
JVM负责调用该方法,不用手动调用。
可重写
比如:所有对象在JVM中被释放的时候,记录一下释放时间----负责记录时间点的代码写在finalize中。
5.toString
目的:将一个Java对象转换成字符串表示形式
Object里toString()默认返回 类名@16进制地址;
输出引用的时候,会默认调用toString方法。
建议重写该方法
由于 wait() 与 notify/notifyAll() 是放在同步代码块中的,因此线程在执行它们时,肯定是进入了临界区中的,即该线程肯定是获得了锁的。
如果在执行wait() 与 notify/notifyAll()之前没有获得相应的对象锁,就会抛出:java.lang.IllegalMonitorStateException异常。
6.notify
当执行notify方法时,会唤醒任意一个
处于等待该 对象锁 的线程,然后继续往下执行,直到执行完退出对象锁锁住的区域(synchronized修饰的代码块)后再释放锁。
lock.notify()
7.notifyAll
当执行notifyAll方法时,会唤醒所有
处于等待该 对象锁 的线程,然后继续往下执行,直到执行完退出对象锁锁住的区域(synchronized修饰的代码块)后再释放锁。
lock.notifyall()
notify/notifyAll()执行后,并不立即释放锁,而是要等到执行完临界区中代码后,再释放。
故,在实际编程中,我们应该尽量在线程调用notify/notifyAll()后,立即退出临界区。即不要在notify/notifyAll()后面再写一些耗时的代码。
8.wait
当线程执行wait()时,会把当前的锁释放
,然后让出CPU,进入等待状态。
lock.wait()
9.getClass
返回Class类型
的对象,常用于反射
//c : class类型的对象
//p : 某类的对象
Class c = p.getClass();