Java的Object类学习

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容