一、 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方法特

别好用,特别是在表示一个对象的时候