1、Object对象简介
我们学Java的知道,Java是一门面向对象的语言。无论在Java中出现什么,都可以认为它是对象(除了八大基本数据类型。当然了,八大基本数据类型也能装箱成为对象):
而Object就是这些对象的最高级别的,所有的Java对象都隐式地继承了Object对象(不用显示写extends继承)
所有的Java对象都拥有Object默认的方法。
那么我们看看Object有什么方法:

其实就可以归纳成几个:
registerNatives()【底层实现、不研究】
hashCode()
equals(Object obj)
clone()
toString()
notify()
notifyAll()
wait(long timeout)【还有重载了两个】
finalize()
1 registerNatives() //私有方法
2 getClass() //返回此 Object 的运行类。
3 hashCode() //用于获取对象的哈希值。
4 equals(Object obj) //用于确认两个对象是否“相同”。
5 clone() //创建并返回此对象的一个副本。
6 toString() //返回该对象的字符串表示。
7 notify() //唤醒在此对象监视器上等待的单个线程。
8 notifyAll() //唤醒在此对象监视器上等待的所有线程。
9 wait(long timeout) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或 者超过指定的时间量前,导致当前线程等待。
10 wait(long timeout, int nanos) //在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。
11 wait() //用于让当前线程失去操作权限,当前线程进入等待序列
12 finalize() //当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
2.Object类中的常见的方法,为什么wait notify会放在Object里边?
从一开始我们就说了:wait()和notify()是Java给我们提供线程之间通信的API,既然是线程的东西,那什么是在Object类上定义,而不是在Thread类上定义呢?
因为我们的锁是对象锁【要是忘记的同学可回顾:Java锁机制了解一下】,每个对象都可以成为锁。让当前线程等待某个对象的锁,当然应该通过这个对象来操作了。
锁对象是任意的,所以这些方法必须定义在Object类中
3.浅拷贝与深拷贝的区别
深拷贝:引用对象的值等信息,复制一份一样的
浅拷贝:只复制引用,另一处修改,你当下的对象也会修改。
4.sleep和wait有什么区别?
Thread.sleep()与Object.wait()二者都可以暂停当前线程,释放CPU控制权。
主要的区别在于Object.wait()在释放CPU同时,释放了对象锁的控制。
而Thread.sleep()没有对锁释放
6355

被折叠的 条评论
为什么被折叠?



