原文:http://www.cogu.cn/archives/187
OBJECT对象的方法
getClass()
原文的翻译是获取运行时对象的类,这个类对象就是被这个类用静态同步方法锁定的对象。实际上返回的类型是Class<? extends |X|,其中|X|也就是类本身。例如:Number n = 0;
Class<? extends Number> c = n.getClass();
toString()
默认返回当前对象的String方式的展现。格式为getClass().getName() + ‘@’ + Integer.toHexString(hashCode())。为了能够让结果更容易阅读理解,javadoc建议所有子类都重写这个方法。所以我们一般将这个对象的方法重写后在日志输出的时候打印出来。
equal()
用来判断一个对象和这个对象是否相等。对于非空对象来说,它满足一下5中关系:
1、自反性:x.equals(x)==true,每个非空引用都和自己相等。
2、传递性:x.equals(y)==true;y.equals(z)==ture;那么x.equal(z)==true.
3、一致性:x.equals(y)==true或false多次比较结果都是不变的,只要equals方法没有被修改。
4、非空性:x!=null;x.equals(null)==false任何非空的对象和null比较都返回false。
5、对称性:x.equals(y)==true;y.equals(x)==true
类对象的equals方法是实现了最挑剔的等价关系,即非空的x和y,只有x==y为true时,x.equals(y)==true,也就是x、y为同一个对象的引用。值得注意的是,重写equal方法时,一般都要重写hashCode方法,以保证相等的对象有相等的hashcode。
hashCode()
返回对象的hashCode值。这个方法利用了java.util.Hashtable实现了hashCode。有几个要点要注意一下:
1、同一个对象的hashCode值一定是一样的integer。
2、如果两个对象通过equal方法是相等的, 那么他们打hashcode值也是一样的。
3、java里没有要求如果两个对象通过equal判断不相等,他们的hashcode值也必须不相等,但是程序员应该尽量让他们不等,这样系统更合理。(通过将对象的内部地址转换成hashcode的整数)
clone()
返回对象的一个复制版本…
wait()/wait(long millis)/wait(long millis,int nanos)
用户在线程获取当前对象的同步锁以后,进入阻塞状态操作,直到它被其他线程通过notify()或者notifyAll唤醒。含有参数的wait()方法值线程进入等待状态直到它被通知或者经过指定参数的时间。millis是毫秒,nanos是毫微秒。
notify()
唤醒等待中的对象,进入待运行状态。随机选择一个在该对象上调用wait方法的线程,解除其阻塞状态。
notifyAll()
解除所有那些在该对象上调用wait方法的线程的阻塞状态。
wait、notify和notifyAll方法是Object类的final native方法。所以这些方法不能被子类重写,Object类是所有类的超类,以上线程操作方法只能在同步方法或同步块内部调用。如果当前线程不是锁的持有者,该方法抛出一个IllegalMonitorStateException异常。
这部分内容可以同时参考JAVA多线程相关总结。