Object 源码阅读
Object 源码阅读
/**
* Object 类是类继承结构的根类,每一个类型都以 Object 作为其父类,包括数组。
*/
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
/**
* 创建一个新的对象
*/
@HotSpotIntrinsicCandidate
public Object() {}
/**
* 返回此对象的目标 Class 对象
*/
@Override
@HotSpotIntrinsicCandidate
public final native Class<?> getClass();
/**
* 返回此对象的哈希值
* 如果两个对象的 equals(Object) 方法返回 true,则它们的哈希值必须相等。
*/
@Override
@HotSpotIntrinsicCandidate
public native int hashCode();
/**
* 此对象是否和目标对象 obj 相等
* 1)反射性:对于任何非空引用 x,x.equals(x) 应该返回 true。
* 2)对称性:对于任何非空引用 x、y,如果 x.equals(y) 返回 true,则 y.equals(x) 也应该返回 true。
* 3)传递性:对于任何非空引用 x、y、z,如果 x.equals(y) 和 y.equals(z) 返回 true,则 x.equals(z) 也应该返回 true。
* 4)一致性:对于任何非空引用 x、y,则多次调用 x.equals(y) 应该一致地返回 true 或 false。
* 5)对于任何非空引用,x.equals(null) 应该返回 false。
* 如果重写了 equals 方法,则必须重写 hashcode 方法。
*/
public boolean equals(Object obj) {
return this == obj;
}
/**
* 克隆此对象
*
* 1)x.clone() != x 应该返回 true
* 2)x.clone().getClass() == x.getClass() 应该返回 true
* 3)x.clone().equals(x) 应该返回 true
*/
@Override
@HotSpotIntrinsicCandidate
protected native Object clone() throws CloneNotSupportedException;
/**
* 返回此对象的字符串表示。
* 默认值 getClass().getName() + '@' + Integer.toHexString(hashCode())
*/
@Override
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
/**
* 随机唤醒一个在此对象监视器上阻塞等待的线程。
* 1)只有当目标线程放弃此对象的监视器时,被唤醒的线程才能正常执行。
* 2)此方法调用之前,目标线程必须先获得此对象的监视器,
* 调用此对象的同步方法
* 通过 synchronized(obj){} 同步代码块获取此对象的监视器
* 如果是 Class 类型,则可以调用此类型的静态同步方法
* 3)任何时刻,只能有一个线程拥有此对象的监视器
*/
@Override
@HotSpotIntrinsicCandidate
public final native void notify();
/**
* 唤醒所有在此对象的监视器上阻塞等待的线程
* 1)只有当目标线程放弃此对象的监视器时,被唤醒的线程才能正常执行。
* 2)此方法调用之前,目标线程必须先获得此对象的监视器,
* 调用此对象的同步方法
* 通过 synchronized(obj){} 同步代码块获取此对象的监视器
* 如果是 Class 类型,则可以调用此类型的静态同步方法
* 3)任何时刻,只能有一个线程拥有此对象的监视器
*/
@Override
@HotSpotIntrinsicCandidate
public final native void notifyAll();
/**
* 让当前线程在此对象的监视器上阻塞等待,直到被唤醒或被中断。
* 1)此方法调用之前,目标线程必须先获得此对象的监视器,
* 调用此对象的同步方法
* 通过 synchronized(obj){} 同步代码块获取此对象的监视器
* 如果是 Class 类型,则可以调用此类型的静态同步方法
*/
@Override
public final void wait() throws InterruptedException {
wait(0L);
}
/**
* 让当前线程在此对象的监视器上阻塞等待,直到被唤醒、被中断、阻塞等待超时。
* 1)此方法调用之前,目标线程必须先获得此对象的监视器,
* 调用此对象的同步方法
* 通过 synchronized(obj){} 同步代码块获取此对象的监视器
* 如果是 Class 类型,则可以调用此类型的静态同步方法
*
* @param timeout 阻塞等待的毫秒数
*/
@Override
public final native void wait(long timeout) throws InterruptedException;
/**
* 让当前线程在此对象的监视器上阻塞等待,直到被唤醒、被中断、阻塞等待超时。
* 1)此方法调用之前,目标线程必须先获得此对象的监视器,
* 调用此对象的同步方法
* 通过 synchronized(obj){} 同步代码块获取此对象的监视器
* 如果是 Class 类型,则可以调用此类型的静态同步方法
*
* @param timeout 阻塞等待的毫秒数
* @param nanos 纳秒增量
*/
@Override
public final void wait(long timeout, int nanos) throws InterruptedException {
// 1)超时时间为负数
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 > 0) {
timeout++;
}
wait(timeout);
}
/**
* 垃圾回收器将调用此方法执行此对象的垃圾回收,
* 1)调用时机不确定
* 2)只能调用一次
* 3)不建议覆盖此方法执行资源释放
* 4)如果此方法抛出异常,则该异常将被忽略,如果在此方法中执行资源释放,则可能导致资源泄漏
* <p>
*/
@Override
@Deprecated(since="9")
protected void finalize() throws Throwable { }
}
Object 源码阅读的更多相关文章
- Object源码阅读
native修饰符:所修饰的方法的实现是由非java代码实现的 /** * 一个java程序如果想调用本地方法,需要执行两个步骤 * 1.通过system.loadLibrary()将包含本地方法实现 ...
- JDK源码阅读(一):Object源码分析
最近经过某大佬的建议准备阅读一下JDK的源码来提升一下自己 所以开始写JDK源码分析的文章 阅读JDK版本为1.8 目录 Object结构图 构造器 equals 方法 getClass 方法 has ...
- JDK源码阅读-------自学笔记(一)(java.lang.Object重写toString源码)
一.前景提要 Object类中定义有public String toString()方法,其返回值是 String 类型. 二.默认返回组成 类名+@+16进制的hashcode,当使用打印方法打印的 ...
- JDK1.8源码阅读笔记(1)Object类
JDK1.8源码阅读笔记(1)Object类 Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...
- 【原】FMDB源码阅读(二)
[原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...
- 【原】AFNetworking源码阅读(六)
[原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...
- 【原】AFNetworking源码阅读(四)
[原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...
- 【原】AFNetworking源码阅读(三)
[原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...
- 【原】SDWebImage源码阅读(五)
[原]SDWebImage源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 前面的代码并没有特意去讲SDWebImage的缓存机制,主要是想单独开一章节专门讲 ...
随机推荐
- golang time json mongodb 时间处理
golang 中解决前端time 输出,后端mongodb中时间存储. package mask import ( "fmt" "time" "go. ...
- dumpe2fs Linux支持的文件系统
dumpe2fs (-bh)装置文件名 选项与参数: -b : 列出保留为坏轨的部分 -h : 仅列出superblock的数据,不会列出其他的区段内容 查看Linux支持的文件系统哪些支持: ls ...
- Python time、datetime、os、random、sys、hashlib、json、shutil、logging、paramiko、subprocess、ConfigParser、xml、shelve模块的使用
文章目录: 1. time & datetime模块 2. os模块 3. random模块 4. sys模块 5. hashlib模块 6. json模块 7. shutil模块 8. lo ...
- primer看完了
放假这将近十天吧,终于把C++ Primer中文版第五版大致看完了,然而第四部分(高级主题)还是没有看,感觉那是需要有足够的项目经验再看. 另外,看一遍肯定不够,忘得也会很快,我十分确认今后还会很多次 ...
- java8学习之内部迭代与外部迭代本质剖析及流本源分析
关于Stream在Java8中是占非常主要的地位的,所以这次对它进行进一步探讨[这次基本上都是偏理论的东东,但是理解它很重要~],其实流跟咱们数据库学习当中的sql语句的特点是非常非常之像的,为什么这 ...
- 谈谈对MVC的认识?
核心思想是:视图和用户交互通过事件导致控制器改变 控制器改变导致模型改变 或者控制器同时改变两者 模型改变 导致视图改变 或者视图改变 潜在的从模型里面获得参数 来改变自己.他的好处是可以将界面和业务 ...
- Java异常try里面有return,finally代码会执行吗
try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候被执行,在return前还是后? 肯定会执行.finally{}块的代码只有在try{} ...
- SpringBoot 在IDEA中实现热部署(实用版)(引入)
SpringBoot 在IDEA中实现热部署(实用版) 引用:https://www.jianshu.com/p/f658fed35786 好的热部署让开发调试事半功倍,这样的“神技能”怎么能错过呢, ...
- 如何使用git回退部分修改(转)
如何使用git回退部分修改(转) 很多时候,git新手容易误操作,比如,在levelIISZ-1.4.dev分支下,运行了git pull idc cpp-1.0的结果,这样做麻烦很大,经常导 ...
- 动软代码生成器生成model
model <#@ template language="c#" HostSpecific="True" #> <#@ output exte ...