`
异步获取爱
  • 浏览: 78219 次
  • 性别: Icon_minigender_1
  • 来自: 大男子主义世界
社区版块
存档分类
最新评论
阅读更多
     工作了一年,觉得自己是时候总结总结,不足的地方要补充补充。一下子没想到别的方法,给自己规划了这么一个任务。每周上班上午早点到公司(8点左右,能早则早),从api基础开始写自己的学习体会。一点点把粗的东西细化,我想这样1-2个月可以夯实我的基础,也希望自己能够坚持。言归正传今天的内容,object。

Object类,是所有类的父类,所有类都隐式的继承了该类。

方法:object方法里有很多native的方法,表示是从本地方法中调用的,跟实际的api无关。这些native方法可以返回任何java类型,甚至包括非基本类型,可以抛出异常。这些native的细节都是由jvm控制,虽然看过一些jvm的内容,但是我还是没有深接触本地方法调用的内容,所以这点现在这//TODO 下。

object的方法包括getClass(),clone(),toString(),equals(),hashcode(),nodify(),nodifyAll(),三个wait()方法。

clone():方法返回的是对象的一个副本。可以注意到在api上就有一行代码:
X.clone()!=X

就是表示副本与原来的对象不是相同的,属于浅复制。这里又可以提到如何深复制的问题,这个以后可以展开写,这里主要还是介绍Object类,就不展开了。

getClass():方法返回对象的运行时类,也就是获得类的一些信息。
X.clone().getClass()==X.getClass()

所以其实就是返回了X的运行时类。

toString():方法返回String类型的字符串,一般都是对象的信息,而大多数情况下toString()都会被重写,所以也就没有多大的意义。

equals():返回是否相等。
源码里object的euqals方法只有一行代码
return (this == obj);

比较两个对象是否指向相同的地址。

hashcode():实际上返回的就是对象存储的物理地址(实际可能并不是)。 它是用哈希算法(哈希算法也称为散列算法,是将数据依特定算法直接指定到一个地址上。),将对象的物理地址散列排在内存中,如果出现地址冲突,就重排(这里又涉及各种可以选择的方式,有时间可以自己研究研究),要保证每个地址只有一个对象。
Java对于eqauls方法和hashCode方法是这样规定的:
1、如果两个对象相同,那么它们的hashCode值一定要相同;
2、如果两个对象的hashCode相同,它们并不一定相同

这里还有一个经典的hashcode冲突的解决方法(equals被重写后,hashcode也要相应的进行重写,否则会有冲突),在这个blog里有文章来描述如何解决的。

nodifty()和nodifyAll():通知线程,和wait()相对,表示唤醒线程,all的话,是对所有处于wait状态的线程进行唤醒,但是一般只能随机(具体怎么实现不知道)唤醒一个。

wait():表示线程暂停处于休眠状态。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics