Java Object类(一)

1.Object源码:

 

Java Object类(一)

2.Object源码解析:

native关键字修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
2.1、getClass()方法
getClass()方法返回Object对象的运行时类对象Class<?>,效果与Object.class相同,主要在反射中应用。

2.2、equals()方法
equals()方法为判断两个对象是否相等,Objec中与==具有相同含义,具体应用时引用数据类型变量比较时需要重写equals()方法。
注意:重写equals()方法必须重写hasCode()方法。


2.3、hashCode()方法
hashCode()方法返回对象的哈希码值。
注意:hashCode()相同的两个对象,不一定相等,换言之,不相等的两个对象,hashCode()返回的哈希码可能相同。
①两个对象相等 < = > equals()相等 = > hashCode()相等;
②hasCode()不相等 = > equals()不相等 < = > 两个对象不相等。


2.4、clone()方法
clone()方法返回的是一个引用,指向的是新clone出来的对象,此对象与原对象分别占用不同的堆空间。
注意:clone为浅拷贝,即拷贝对象时仅仅拷贝对象本身(包括对象中的基本变量),而不拷贝对象包含的引用指向的对象。


2.5、toString()方法
toString()方法返回对象的字符串表示。
注意:它是由对象的类型和其哈希码唯一确定,同一类型但不相等的两个对象分别调用toString()方法返回的结果可能相同。


2.6、notify()方法
notify()方法用于控制线程状态,调用某对象的notify()方法能够唤醒一个正在等待这个对象的monitor(监视锁)的线程,如果有多个线程都在等待这个对象的monitor,则只能唤醒其中一个线程。
注意:notify()只是唤醒等待该对象的monitor的线程,并不决定哪个线程能够获取到monitor。


2.7、notifyAll()方法
notifyAll()方法用于控制线程状态,调用notifyAll()方法能够唤醒所有正在等待这个对象的monitor的线程。
注意:notifyAll()只是唤醒等待该对象的monitor的线程,并不决定哪个线程能够获取到monitor,具体的依赖于JVM的线程调度。


2.8、wait()方法
wait()方法用于控制线程状态,调用某对象的wait()方法能让当前线程阻塞,并且当前线程必须拥有此对象的monitor。


2.9、finalize()方法
finalize()方法主要与Java垃圾回收机制有关。