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. Linux安装Redis、PHP安装Redis扩展模块

    Redis的官方下载: http://redis.io/download   步骤一:下载安装包  步骤二:编译源程序  步骤三:移动文件.便于管理  步骤四:启动 Redis服务  查看是否启动成功 ...

  2. 设置VMware 以及指定 虚拟机 ,开机自启动

    进入开机自启动目录 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 重命名为 start.bat 编辑 这个文件,编辑之后Ct ...

  3. 仿造email后缀搜索功能(2)

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  4. iperf和iperf3详解

    一.iperf server端: iperf -s -p 25001 -B 192.168.33.103 (-u) -s  指定server端 -p 指定端口(要和客户端一致) -B 绑定ip地址 - ...

  5. zabbix 4 自带 php、httpd漏洞升级

    Zabbix 自带的 PHP 5.4.apache httpd 2.4.6扫描出安全漏洞,需要进行升级. PHP # php -v PHP 5.4.16 (cli) (built: Apr 12 20 ...

  6. composer问题集锦

    问题一:composer遇到Your configuration does not allow connection to 解决方案: 设置一个本地或全局的composer配置: composer c ...

  7. MSSQL日期分组排序

    等于今天日期的排上面,大于今天的排中间,小于今天的排下面,带分页.

  8. 标准C语言(13)

    函数指针可以作为形式参数使用,会作为实际参数使用的函数叫回调函数 /* * 回调函数演示 * */ #include <stdio.h> void print_cb(int *p_num) ...

  9. 页面内置函数${fn:}

    引入头文件<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions " %&g ...

  10. noi.ac NA535 【生成树】

    因为太蠢一直写T1也没仔细想,赛后发现是个真小清新思维题,本质构造??? 首先显然不会无解,这个随随便便证一下就有了 另外给的式子没啥意义,也就能说明颜色随机???害人不浅 然后就从\(1\)开始,钦 ...