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();
}

这是一个本地方法,中我们知道一个类定义了本地方法后,想要调用操作系统的实现,必须还要装载本地库.

看到上面的代码,这就明白了吧。静态代码块就是一个类在初始化过程中必定会执行的内容,所以在类加载的时候是会执行该方法的,通过该方法来注册本地方法。

参考链接

https://www.cnblogs.com/ysocean/p/8419559.html

https://www.zhihu.com/question/21574535

Object-源码的更多相关文章

  1. jdk之object源码理解

    Java所有类都继承与Object,本文谈谈我对object源码的理解,如果有错的,请看官多多批评指正. 1.registerNatives() private static native void ...

  2. Object 源码阅读

    Object 源码阅读 /** * Object 类是类继承结构的根类,每一个类型都以 Object 作为其父类,包括数组. */ public class Object { private stat ...

  3. Object源码

    1.Object是所有类的父类,默认会继承Object. 2.Object类中常用的方法有:getClass().hashCode().equals().clone().toString().fina ...

  4. Object源码分析(二)

    第五个方法:protected native Object clone() throws CloneNotSupportedException; 源码简介: clone方法首先会判对象是否实现了Clo ...

  5. Object源码分析(一)

    刚注册博客,准备学习一下java源码,当然首先从Object看起. 介绍一下Object: Object是所有类层次结构的根,所有的类都将Object作为超类.所有的对象,包括数组,都实现了Objec ...

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

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

  7. 你真的了解Object源码吗

    欢迎点赞阅读,一同学习交流,有疑问请留言 . GitHub上也有开源 JavaHouse 欢迎star 引入 Object 应该是比较简单的源码了.现在我们来分析一下他.Object 是类层次结构的根 ...

  8. java中Object源码理解

    java阅读笔记 1.object getClass() 返回是的此object运行时的类,返回的对象是被object锁定的对象,调用这个方法不需要进行强转 public static void ma ...

  9. Object源码解析(JDK1.8)

    package java.lang; public class Object { /** * 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用 */ private static ...

  10. Object源码阅读

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

随机推荐

  1. springmvc学习指南 之---第24篇 国际化问题

    writedby 张艳涛,今天一天就搞了一个这个问题,主要是下路,遇到springmvc-config.web的配置和拦截器的使用问题, 看了几天的spring发现都没讲拦截器,之前看了两天sprin ...

  2. Tom_No_01 IDEA tomcat 源码环境搭建

    1.下载源码 apache-tomcat-8.5.50-src 2.下载源码 放D盘,解压后根目录新建pom.xml和catalina-home pom.xml文件中内容为 <?xml vers ...

  3. Winform中生成自动控件

    场景: 前几天项目需要模拟数据,但是实际设备还没有接上,就自己用Winform搭建了一个数据模拟器,生成数据给平台.这里又一个需求,就是从数据库中找出设备,然后自动生成控件,勾选就表示开启该设备,能上 ...

  4. 在阿里云上单机部署k8s1.18

    系统:CentOS Linux release 8.1.1911 配置主机名 [root@iZwz9e3t4tj14jzewdtvj8Z ~]# hostnamectl set-hostname la ...

  5. Netty基础招式——ChannelHandler的最佳实践

    本文是Netty系列第7篇 上一篇文章我们深入学习了Netty逻辑架构中的核心组件EventLoop和EventLoopGroup,掌握了Netty的线程模型,并且介绍了Netty4线程模型中的无锁串 ...

  6. 剑指 Offer 32 - II. 从上到下打印二叉树 II

    剑指 Offer 32 - II. 从上到下打印二叉树 II 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,1 ...

  7. 一键部署lamp脚本

    #!/bin/bash systemctl stop firewalld systemctl disable firewalld setenforce 0 #-------Apache------ # ...

  8. 一张图说明 iaas paas saas的区别

    图片来源:https://www.bilibili.com/video/BV1QJ411S7c4  P2 云服务的三种模式 1laaS(基础设施即服务) laas(Infrastructure as ...

  9. awk-07-IO和printf语句

    IO语句 1.getline 2.getline var 把a文件的行,追加到b文件的结尾 把 a 文件的行替换 b 文件的指定字段 把 a 文件的行替换 b 文件的对应字段 3.command | ...

  10. Java调用Zookeeper

    watch机制 Zookeeper watch是一种监听通知机制,可以随时监听一些数据的变化,从而实现数据的及时性. Zookeeper所有的读操作getData(), getChildren()和 ...