一、 hashcode()方法是个native方法,返回该对象的哈希码,涉及到计算哈希码的数据结构都会用到此方法,如HashMap,HashSet,HashTable
hashcode方法设计的三个协定:
1、同一个对象(“不变”)多次hashcode的值是一样的
2、不同的对象,hashcode的值不一样
3、equals为false的两个对象的hashcode返回值可能相等,我们重写hashcode的时候,尽量要使这两个对象的hashcode值不等
二、 equals()方法的原始实现是比较两个对象的地址,equals方法的协定:
1、任何非空对象x满足x.equals(x)返回true
2、对称性
3、传递性
4、一致性:参与equals计算的信息没有更改,那么每次equals返回的结果不变
5、非空的x,x.equals(null)返回false
重写hashcode和equals的时候特別注意它们的协定
三、getClass()方法返回的是类运行时的对象
如:class A extend class B
B b = new B();
b.super().getClass()返回的也是B类对象
四、wait和notify
else:获取锁和拥有锁对象的监视器是一个概念
/**wait()方法是Object的成员方法,在调用wait方法后,持有对象锁的当前线程将释放锁,并挂起, *直到下次被notify()或者notifyAll,它才会重新尝试获取锁,
*那么当它没有获取到锁的时候,它还是会阻塞在当前位置。
*注意:1、wait方法的调用要在同步方法或者代码块中
2、调用wait方法的一定是锁对象
3、判断条件要用while语法,因为当线程被唤醒后,它会重新走while循环,如果用if就会有问题(多个线程等待被唤醒后,都会从等待处往下执行)
4、notify的调用同wait调用方式一样,但是notify调用后它不会立式释放锁,要等同步方法或代码块执行完才会释放锁
5、notify会随机唤醒等待的线程(同一个对象锁调用的wait
*/
五、finalize()方法是一个protect修饰的普通方法,当JVM在进行垃圾回收拾时,被回收的对象,就是调用该对象集成自Object的finalize方法,可以通过重写该方法来打印一些对项目有意义的日志,或者其它的操作
六、wait(Long timeout)
用法同wait()方法,当在timeout之前没有被唤醒,则自动唤醒,然后在等待出继续执行
七、wait(long timeout,int nanos)
nanos为一个毫微妙时间,看下源码吧
八、registerNatives()是个静态方法
就是对几个本地方法进行注册(也就是初始化java方法映射到C的方法)
九、toString(),上源码(全类名+@+对象的哈希码取16进制)
一般建议子类重写toString方法,这样可以打印一些有意义的东西,个人觉得toString方法特
别好用,特别是在表示一个对象的时候