Java的对象中的方法解析

来源:互联网 发布:mysql存储过程写法格式 编辑:程序博客网 时间:2024/06/03 05:08

原文: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)==truefalse多次比较结果都是不变的,只要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多线程相关总结。

 

原创粉丝点击