JDK源码阅读--Object
在java.lang包下
Object类:是所有类的基类(父类)
public final native Class<?> getClass();
返回这个Object所代表的的运行时类 public native int hashCode();//返回对象hash code 值
如果是两个相同(指用=比较都为true的)的对象调用这个方法,会返回相同的Integer类型的hash码;
如果是两个不相同(指用=比较都为false的)的对象调用这个方法,会返回不同的Integer类型的hash码; /**
* The {@code equals} method for class {@code Object} implements
* the most discriminating possible equivalence relation on objects;
* that is, for any non-null reference values {@code x} and
* {@code y}, this method returns {@code true} if and only
* if {@code x} and {@code y} refer to the same object
* ({@code x == y} has the value {@code true}).
* <p>
*/
public boolean equals(Object obj) {
return (this == obj);
}
返回值表示两个对象是否"相同".true表示"相同",false表示"不相同"。
x.equals(x) 返回true。
非空引用x,y:
如果x.equals(y) 返回true,那么y.equals(x) 也返回true。
具有传递性:
非空引用x,y,z:
如果 x.equals(y) 返回true, y.equals(z) 返回true,那么x.equals(z) 也返回true
如果x非空:
x.equals(null) 返回false。
参数obj代表要与之比较的对象,也就是要被比较de对象。
当equals方法被重写的时候,必须也要重写hashCode方法,确保拥有相同的hash码。 protected native Object clone() throws CloneNotSupportedException;
返回一个复制的对象(注意浅复制、深复制)。
调用这个方法的对象所在的类需要实现Cloneable接口才能使用到此方法,否则会抛出CloneNotSupportedException异常。 public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
返回对象字符串的表现形式 public final native void notify();
唤醒单个线程,但是唤醒的线程不会立马继续执行,直到持有锁的线程释放这个锁,被唤醒的线程将和其他线程一同竞争去获得这个锁。 public final native void notifyAll();
唤醒所有线程,但是唤醒的线程不会立马继续执行,直到持有锁的线程释放这个锁,被唤醒的线程将和其他线程一同竞争去获得这个锁。 public final native void wait(long timeout) throws InterruptedException;
timeout的单位为 毫秒。
让线程进入等待,直到另一个线程调用notify()或notifyAll()方法或者超过了设置的时间timeout 才会停止等待。
当前线程必须拥有对象的监视器(锁)。
如果当前线程在等待之前或等待期间被任何线程中断,则会抛出InterruptedException异常。
如果当前线程不是对象监视器所拥有的,则抛出IllegalMonitorStateException异常。
如果timeout是负数,则抛出IllegalArgumentException异常。 /*@param timeout the maximum time to wait in milliseconds.
* @param nanos additional time, in nanoseconds range
* 0-999999.
* @throws IllegalArgumentException if the value of timeout is
* negative or the value of nanos is
* not in the range 0-999999.
* @throws IllegalMonitorStateException if the current thread is not
* the owner of this object's monitor.
* @throws InterruptedException if any thread interrupted the
* current thread before or while the current thread
* was waiting for a notification. The <i>interrupted
* status</i> of the current thread is cleared when
* this exception is thrown.
*/
public final void wait(long timeout, int nanos) throws InterruptedException {
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);
}
nanos:额外的时间,以纳秒为单位,范围在0-999999.
让线程进入等待,直到另一个线程调用notify()或notifyAll()方法或者超过了设置的时间timeout 才会停止等待。
timeout的单位为 毫秒。
让线程进入等待,直到另一个线程调用notify()或notifyAll()方法或者超过了设置的时间timeout 才会停止等待。
当前线程必须拥有对象的监视器(锁)。
如果当前线程在等待之前或等待期间被任何线程中断,则会抛出InterruptedException异常。
如果当前线程不是对象监视器所拥有的,则抛出IllegalMonitorStateException异常。
如果timeout是负数,则抛出IllegalArgumentException异常。
如果nanos范围越界,则抛出IllegalArgumentException异常。 public final void wait() throws InterruptedException {
wait(0);
}
这个方法就像在调用wait(0);
让线程进入等待,直到另一个线程调用notify()或notifyAll()方法或者超过了设置的时间timeout 才会停止等待。 让线程进入等待,直到另一个线程调用notify()或notifyAll()方法或者超过了设置的时间timeout 才会停止等待。
当前线程必须拥有对象的监视器(锁)。
如果当前线程在等待之前或等待期间被任何线程中断,则会抛出InterruptedException异常。
如果当前线程不是对象监视器所拥有的,则抛出IllegalMonitorStateException异常。 protected void finalize() throws Throwable { }
当确定不再有对该对象的引用时,垃圾回收时由对象上的垃圾回收器调用
JDK源码阅读--Object的更多相关文章
- jdk源码阅读-Object类
native 关键字 private static native void registerNatives(); static { registerNatives(); } public final ...
- JDK源码阅读(一):Object源码分析
最近经过某大佬的建议准备阅读一下JDK的源码来提升一下自己 所以开始写JDK源码分析的文章 阅读JDK版本为1.8 目录 Object结构图 构造器 equals 方法 getClass 方法 has ...
- JDK源码阅读(三):ArraryList源码解析
今天来看一下ArrayList的源码 目录 介绍 继承结构 属性 构造方法 add方法 remove方法 修改方法 获取元素 size()方法 isEmpty方法 clear方法 循环数组 1.介绍 ...
- JDK源码阅读-Reference
本文转载自JDK源码阅读-Reference 导语 Java最初只有普通的强引用,只有对象存在引用,则对象就不会被回收,即使内存不足,也是如此,JVM会爆出OOME,也不会去回收存在引用的对象. 如果 ...
- 利用IDEA搭建JDK源码阅读环境
利用IDEA搭建JDK源码阅读环境 首先新建一个java基础项目 基础目录 source 源码 test 测试源码和入口 准备JDK源码 下图框起来的路径就是jdk的储存位置 打开jdk目录,找到sr ...
- JDK源码阅读-FileOutputStream
本文转载自JDK源码阅读-FileOutputStream 导语 FileOutputStream用户打开文件并获取输出流. 打开文件 public FileOutputStream(File fil ...
- JDK源码阅读-FileInputStream
本文转载自JDK源码阅读-FileInputStream 导语 FileIntputStream用于打开一个文件并获取输入流. 打开文件 我们来看看FileIntputStream打开文件时,做了什么 ...
- JDK源码阅读-ByteBuffer
本文转载自JDK源码阅读-ByteBuffer 导语 Buffer是Java NIO中对于缓冲区的封装.在Java BIO中,所有的读写API,都是直接使用byte数组作为缓冲区的,简单直接.但是在J ...
- JDK源码阅读-RandomAccessFile
本文转载自JDK源码阅读-RandomAccessFile 导语 FileInputStream只能用于读取文件,FileOutputStream只能用于写入文件,而对于同时读取文件,并且需要随意移动 ...
随机推荐
- Activiti学习笔记目录
1.Activiti学习笔记1 — 下载与开发环境的配置: 2.Activiti学习笔记2 — HelloWorld: 3.Activiti学习笔记3 — 流程定义: 4.Activiti学习笔记4 ...
- OC中Nil nil NULL 和 [NSNULL null]的区别
关于这个问题看过两三次了,但是每次过两个月脑袋里又会不清晰,索性记录一下加深一下印象. 一.nil 当一个对象置为nil时,这个对象的内存地址就会被系统收回.置空之后是不能进行retain,copy等 ...
- 2018-12-25-C#-7.2-通过-in-和-readonly-struct-减少方法值复制提高性能
title author date CreateTime categories C# 7.2 通过 in 和 readonly struct 减少方法值复制提高性能 lindexi 2018-12-2 ...
- ASP.NET 页面的生命周期
本文转载自清风飘过的博客,地址:http://www.cnblogs.com/couhujia/archive/2010/04/23/1718405.html 页面生命期分三个阶段:建立阶段,回发阶段 ...
- vue-router如何参数传递
1.我们用<router-link>标签中的to属性进行传参,需要您注意的是这里的to要进行一个绑定,写成:to 先来看一下这种传参方法的基本语法: <router-link :to ...
- 微服务配置中心实战:Spring + MyBatis + Druid + Nacos
在结合场景谈服务发现和配置中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置中心将数据库连接信息管控起来,而在“原生”的 Spring ...
- duilib教程之duilib入门简明教程7.XML基础类
现在大家应该对XML描述界面不那么陌生了,那么我们做进一步介绍. 前面的教程我们写了很多代码,为的是让大家了解下基本流程,其实duilib已经对常用的操作做了很好的包装,正式使用时无需像前面的教程那样 ...
- 利用bu命令下延迟断点
bu可以针对符号下断点.这里是用bu下延迟断点的意义在于即使目标驱动没有被加载,windbg也允许我们针对符号设置断点.当新加载驱动程序后,windbg就会检查驱动程序中是否包含了设置了延迟断点的函数 ...
- 第五周课堂笔记1th
可迭代对象 Isinstance 判断一个对象是否属于某种类型 接受两个参数 迭代器 以下数据类型都没迭代器: 把没有迭代器的类型更改为有迭代器类型 用迭代器进行取值: 判断迭代器的方法: 3. ...
- <每日一题>题目11:以文件夹名称作为参数,返回该文件夹下所有文件的路径
''' 分析: 1.知道文件夹名称(假设是形如:E:\\software\\Notepad++),很显然可以通过OS模块去求 2.OS.listdir(sPath),列出文件夹内所有的文件和文件夹,以 ...