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 源码阅读的更多相关文章

  1. Object源码阅读

    native修饰符:所修饰的方法的实现是由非java代码实现的 /** * 一个java程序如果想调用本地方法,需要执行两个步骤 * 1.通过system.loadLibrary()将包含本地方法实现 ...

  2. JDK源码阅读(一):Object源码分析

    最近经过某大佬的建议准备阅读一下JDK的源码来提升一下自己 所以开始写JDK源码分析的文章 阅读JDK版本为1.8 目录 Object结构图 构造器 equals 方法 getClass 方法 has ...

  3. JDK源码阅读-------自学笔记(一)(java.lang.Object重写toString源码)

    一.前景提要 Object类中定义有public String toString()方法,其返回值是 String 类型. 二.默认返回组成 类名+@+16进制的hashcode,当使用打印方法打印的 ...

  4. JDK1.8源码阅读笔记(1)Object类

    JDK1.8源码阅读笔记(1)Object类 ​ Object 类属于 java.lang 包,此包下的所有类在使⽤时⽆需⼿动导⼊,系统会在程序编译期间⾃动 导⼊.Object 类是所有类的基类,当⼀ ...

  5. 【原】FMDB源码阅读(二)

    [原]FMDB源码阅读(二) 本文转载请注明出处 -- polobymulberry-博客园 1. 前言 上一篇只是简单地过了一下FMDB一个简单例子的基本流程,并没有涉及到FMDB的所有方方面面,比 ...

  6. 【原】AFNetworking源码阅读(六)

    [原]AFNetworking源码阅读(六) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 这一篇的想讲的,一个就是分析一下AFSecurityPolicy文件,看看AF ...

  7. 【原】AFNetworking源码阅读(四)

    [原]AFNetworking源码阅读(四) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇还遗留了很多问题,包括AFURLSessionManagerTaskDe ...

  8. 【原】AFNetworking源码阅读(三)

    [原]AFNetworking源码阅读(三) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 上一篇的话,主要是讲了如何通过构建一个request来生成一个data tas ...

  9. 【原】SDWebImage源码阅读(五)

    [原]SDWebImage源码阅读(五) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 前面的代码并没有特意去讲SDWebImage的缓存机制,主要是想单独开一章节专门讲 ...

随机推荐

  1. leetcode297. 二叉树的序列化与反序列化

    代码 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * ...

  2. 前端开发 | 尝试用Markdown写一下近几个月的总结

    近期总结 回顾 半年前 半年前,接触了前端一年多(工作半年)的我了解的东西只有下面这些.因为在公司里的工作就是切静态页,捣鼓CMS. HTML (比较简洁的编写HTML) CSS/CSS3 (PC兼容 ...

  3. SSD学习笔记

    目标检测算法——SSD:Single Shot MultiBox Detector,是一篇非常经典的目标检测算法,十分值得阅读和进行代码复现,其论文地址是:https://arxiv.org/abs/ ...

  4. SpringBoot核心特性之组件自动装配

    写在前面 spring boot能够根据依赖的jar包自动配置spring boot的应用,例如: 如果类路径中存在DispatcherServlet类,就会自动配置springMvc相关的Bean. ...

  5. Tableau 分群

    对数据的特征进行分析,分群. 数据选用的是Iris data 下载地址:http://archive.ics.uci.edu/ml/machine-learning-databases/iris/ 1 ...

  6. 利用pipework为docker容器设置固定IP

    今天介绍如何在redhat/centos7系列机器上使用pipework为docker启动的容器指定一个固定ip,我们知道默认情况下,docker会使用 bridge网络模式为每一个启动的容器动态分配 ...

  7. Katalon Studio入门学习之三种获取元素方式

    Katalon Studio中元素属性定位有三种方式,分别是XPath.Attributes(元素).CSS(样式),KS的界面展示如右图 打开网站,按F12或进入浏览器设置->更多工具-> ...

  8. 查看Spring MVC 父容器和子容器的对象的实例

    话不多说,直接上案例 package com.oukele.web; import org.springframework.beans.factory.annotation.Autowired; im ...

  9. hiho #1032: 最长回文子串

    #1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...

  10. hiho #1144 : 01串(模拟)

    #1144 : 01串 时间限制:7000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个整数n和m,求是否存在恰好包含n个0和m个1的01串S,使得S中不存在子串"001 ...