Object-源码
2021-08-08 14:27
1946 查看
Object的结构
类构造器
一个类必须要有一个构造器的存在 , Object类源码中,是看不到构造器的,系统会自动添加一个无参构造器。
Object obj = new Object();
equals()
/** * 判断两个对象是否相等 * 主要比较的是内存地址,如果我们要比较两个对象里面的内容是否相等,那么我们就会重写这个方法。 * 注意:重写equals()方法的时候,也一定要重写hashcode()方法。 * 因为java规定:两个对象相等,那么它们的hashcode也一定要相等。 */ public boolean equals(Object obj) { return (this == obj); }
getClass()
/** * 这个方法被final修饰,不能被子类重写,返回的是这个对象运行的类 */ public final native Class<?> getClass();
hashCode()
/** * 主要用来判断两个对象是否相等 * 1:如果两个对象相等,那么它们的hashcode一定相等 * 2:hashcode相等的,这两个对象不一定相等 * 3:hashcode不相等,那么这两个对象一定相等 */ public native int hashCode();
toString()
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
getClass().getName()是返回对象的全类名(包含包名),
Integer.toHexString(hashCode()) 是以16进制无符号整数形式返回此哈希码的字符串表示形式。
打印某个对象时,默认是调用 toString 方法。
notify()
/** * final修饰,不能被重写,唤醒一个正在等待对象锁的线程,该方法只能用于同步方法。 */ public final native void notify();
notifyAll()
/** * final修饰,不能被重写,唤醒所有正在等待对象锁的线程,该方法只能用于同步方法。 */ public final native void notifyAll();
wait()
/** * 在其他线程调用此对象的notify()方法或notifyAll()方法前,导致当前线程等待。 * 当前线程必须拥有此对象监视器。 * 该线程发布对此监视器的所有权并等待,直到其他线程通过调用notify方法或notifyAll方法通知在此对象的监视器上等待的线程醒来, * 然后该线程将等到重新获得对监视器的所有权后才能继续执行。 */ public final void wait() throws InterruptedException { wait(0); }
finalize()
/** * 用于对象被回收的时候这个由JVM支持,Object的finalize方法默认是什么都没有做, * 如果子类需要在对象被回收时执行一些逻辑处理,则可以重写finalize方法。 */ protected void finalize() throws Throwable { }
registerNatives()
private static native void registerNatives(); static { registerNatives(); }
这是一个本地方法,中我们知道一个类定义了本地方法后,想要调用操作系统的实现,必须还要装载本地库.
看到上面的代码,这就明白了吧。静态代码块就是一个类在初始化过程中必定会执行的内容,所以在类加载的时候是会执行该方法的,通过该方法来注册本地方法。
参考链接
相关文章推荐
- Java基础-----基类Object源码分析
- 【MyBatis源码分析】objectFactory解析属性配置元素详述
- SerializationUtils&RandomUtils&RandomStringUtils&ObjectUtils 源码研究
- Object-C为什么使用.m作为源码的扩展名?
- AQS(AbstractQueuedSynchronizer)源码解析(ConditionObject)
- ArrayList源码中c.toArray might (incorrectly) not return Object[] (see 6260652)
- java API——引用类型对象对Object的继承及源码分析
- Java源码之Object
- jdk之object源码理解
- Intent传递List和Object和List<Object>(附源码)(转)
- Object源码分析(一)-- clone方法
- 理解ConditionObject源码
- 初窥Tensorflow Object Detection API 源码之(2.5)target_assigner
- JDK核心JAVA源码解析(1) - Object
- Vue.js 源码学习笔记 -- 分析前准备2 -- Object.defineProperty
- Tensorflow Object Detection API 源码分析之 utils/label_map_util.py
- Tensorflow Object Detection API 源码分析之 inputs.py
- jdk1.8 J.U.C并发源码阅读------AQS之conditionObject内部类分析
- OpenStack_Swift源码分析——Object-auditor源码分析(1)
- JVM源码分析之Object.wait/notify(All)完全解读