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的缓存机制,主要是想单独开一章节专门讲 ...
随机推荐
- TableView 键盘弹起冲突
1.TableView 上cell 带有 TextField,如果 是Plain 形式的TableView ,并且设置SectionHeader的 取消粘滞效果 会导致键盘弹起,页面不能正常 上移 问 ...
- zabbix磁盘的自动发现与磁盘指标监控
由于最近项目上需要对服务器监控进行规范化监控,再磁盘这块有几种方式 1.如果每台设备的磁盘是一样的 比如都有vda,vdb两块磁盘那么可以采用 1.1 每台客户端写脚本,服务端每台设备去加上监控项(- ...
- dedecms 调用全部导航+二级导航
{dede:channelartlist row=5 typeid='top'} <li><a class="hide" href="{dede:fie ...
- QT 给工程添加图片
先打开如图的打开方式 然后我们看到以下的画面,选择下面的 然后我们选择如下:,这里我们要注意我们的图片资源有一定要和QRC资源在同一个文件夹中 之后我们通过在stylesheet里面设置来使用我们添加 ...
- 【AGC005 F】Many Easy Problems
神他吗一天考一道码农题两道 FFT(其实还是我推式子一窍不通) 题意 给你一棵 \(n\) 个点的树,再给你一个常数 \(k\). 设 \(S\) 为树上某些点的集合,定义 \(f(S)\) 为最小的 ...
- python基础(while、运算符、编码初始)
------------恢复内容开始------------ <!doctype html> while循环 while循环 循环:不断重复着某件事就是循环 while 关键字 死循环:w ...
- Python&R:警告信息管理
计算机程序有时很人性化,比如给你警告提示信息: 计算机程序有时又非常不人性化,比如动不动就给你警告提示...... 如果你的程序是要给客户使用,有运行美化要求: 再尤其是比如警告出现在循环里的情况,那 ...
- cdh本地源安装-自用
yum 安装cm 参考官网 主机名 /etc/hosts hostnamectl set-hostname foo-1.data.com hostnamectl set-hostname foo-2. ...
- ASE高级软件工程 第一次结对作业
黄金点游戏Bot Bot8前来报道 1.问题定义 a) 问题描述 N个玩家,每人写一个0~100之间的有理数 (不包括0或100),提交给服务器,服务器在当前回合结束时算出所有数字的平均值,然后乘以0 ...
- 3.决策树ID3算法原理
1.决策树的作用 主要用于解决分类问题的一种算法 2.建立决策树的3中常用算法 1).ID3--->信息增益 2).c4.5--> 信息增益率 4).CART Gini系数 3.提出问题: ...