Java之Object源码解析
来源:互联网 发布:mac找不到蓝牙硬件 编辑:程序博客网 时间:2024/04/29 03:16
Object类作为所有类层次的根源,有着非常重要的作用,每个类都让Object作为其超类,所有的对象包括数组,都实现了Object里面定义的方法,总之一句话,凡是有对象的地方就一定实现了Object类的方法
首先我们知道,Object类里有如下几种方法:
Class<?> getClass(); //返回当前Object的运行类
int hashCode(); //返回该对象的哈希值
boolea equals(Object obj); // 比较其它对象是否与此对象相等
protected Object clone(); //创建并返回此对象的一个副本
String toString(); //返回该对象的字符串表示
void notify(); //唤醒此对象监听器上等待的单个线程
void notifyAll(); //唤醒此对象监听器上等待的所有线程
void wait(long timeout); //在其他线程调用此对象的notify()方法或notifyAll()方法时,或者超过限定的时间,导致当前线程等待
void wait(long timeout, int nanos); //在其他线程调用此对象的notify()方法或notifyAll()方法时,或者超过限定时间,或者当前线程被其它某个线程中断时,导致当前线程等待
void wait(); ///在其他线程调用此对象的notify()方法或notifyAll()方法时,导致当前线程等待
protected void finalize(); //当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法
Java.lang.Object源码
package java.lang;public class Object { private static native void registerNatives();// 一个本地方法,具体实现由C或C++实现 // 对象初始化时调用,且只调用一次 static { registerNatives(); } public final native Class<?> getClass(); // 针对不同的对象返回不同的整数(一般通过将该对象的内部地址转换成一个整数来实现) public native int hashCode(); public boolean equals(Object obj) { return (this == obj); } protected native Object clone() throws CloneNotSupportedException; public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } public final native void notify(); public final native void notifyAll(); public final native void wait(long timeout) throws InterruptedException; public final void wait(long timeout, int nanos) throws InterruptedException { if (timeout < 0) { throw new IllegalArgumentException("timeout value is negative"); } if (nanos < 0 || nanos > 999999) { throw new IllegalArgumentException( "nanosecond timeout value out of range"); } if (nanos >= 500000 || (nanos != 0 && timeout == 0)) { timeout++; } wait(timeout); } public final void wait() throws InterruptedException { wait(0); } protected void finalize() throws Throwable { }}我们看到Object类里面的许多方法是用native修饰的,说明它是一个本地方法,是由非java代码实现的,值得一提的是Object类中的equals()方法和hashCode()方法,在我们比较两个对象是否相等时,都要用到这两个方法,比较两个对象是否相等,一是用equals方法比较两个对象的引用是否相等,即比较两个引用中存储的对象地址的这个值是否相等,然后用hashCode()方法比较它们的存储的地址(实际上是由hashCode返回的一个int类型的hash值来进行比较的)是否相等,如果引用相等,地址相等,那么这两个对象相等
jdk中的某些类重写了equals方法,使其可以直接比较两个对象是否相等,如集合中的某些类
- Java之Object源码解析
- Java源码之Object
- Java-Object类源码解析
- Java源码分析之Object
- Java sort 源码解析 Object part
- JAVA 1.6源码解析-Object类
- Java源码解析(1) —— Object
- unity源码解析Object
- Object类源码解析
- Object类源码解析
- Object源码解析
- Java源码分析之Object类
- Java 源码解析之 ArrayList
- java之ArrayList源码解析
- java.lang之java.lang.Object源码阅读及分析
- java源码Object
- java object解析
- 虫虫的java之旅(源码篇)---Object
- jdbc:oracle:thin:@192.168.3.98:1521:orcl(详解)
- Dream comes from here
- BZOJ 2037 [Sdoi2008]Sue的小球 DP
- 玩转swift字符串——Advanced
- HDU 5400 Arithmetic Sequence
- Java之Object源码解析
- 移动GPU压缩纹理的使用方法
- Spring MVC 教程,快速入门,深入分析
- Deep Learning 优化方法总结
- 对于framebuffer设备,ioctl有一个FBIOPAN_DISPLAY操作的作用
- Rotate Image------旋转图片(in-place版本)
- [Life]我在HK租房子的经历——写在HK租房之后..
- BZOJ 1694 [Usaco2007 Demo]Grazing on the Run DP
- HTTP 错误 404.17 - Not Found