源码阅读笔记1————从Object开始
来源:互联网 发布:法国交友软件 编辑:程序博客网 时间:2024/06/06 23:55
源码阅读笔记一————从Object开始
一.前言
经过一个暑假对java的学习和零零散散的练习以及一些小项目。感觉对于java的掌握还是有些薄弱,有些地方不是很清晰,加上对java的源码的好奇,和在学长建议下,我决定阅读源码和API文档结合起来了解,来加深对java的了解,尽量做到对知其然以及知其所以然。首先从Object开始。
二.Object的概述
- 类OBject是所以类层次的根类,即所有类的父类
- 所在包:java.lang
- 构造方法:Object() 无参构造
三. native修饰符
在阅读过程中,发现一个陌生的修饰符,然后经过查看资料,得到以下信息
* 简单而言,native所修饰的方法,其对应实现不在当前文件,而是在其他语言(如c/c++)所实现的文件中。
四.源码和方法
public class Object { /*一个本地方法,具体实现是用c(c++)在DLL中*/ private static native void registerNatives(); /*静态代码块,在Object类初始化是加载*/ static { registerNatives(); } /*返回次Object的运行类。返回的class对象是由所表示类的static synchronized方法锁定的对象 /*具体实现也不再Object中 */ public final native Class<?> getClass(); /*返回该对象的哈希码值。支持此方法是为了提高哈希表的性能 *hashCode的常规协定是: * 1.在java应用程序执行期间,在堆同一对象多次调用hashCode方法时,必须一致的返回相同的整数,前提是将对象的 * 进行equls比较是所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无须保持一致 * 2.如果根据equls(Object)方法,两个对象是相等的,那么对这两个对象的每个对象调用hashCodre方法都必须生成形同的整数结果 * 3.如果根据equals(java.long.Object)方法,两个对象不相等,那么对这两个对象中的任意一个对象调用hashCode方法 * 不一定要求一定生成不同的整数结果 * / public native int hashCode(); /*作用:比较两个对象是否相等 *可以清楚的看出来。在Object中,equals就是= * 注意:1.当此方法被重写时,通常有必要重写 hashCode 方法, * 以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。 * 2.重写时,注意要满足,自反性,对称性,传递性,一致性,对于任何非空引用都要返回false */ public boolean equals(java.lang.Object obj) { return (this == obj); } /*作用:创建并返回此对象的一个副本。副本的准确含义可能依赖对象的类 *抛出CloneNotSupportedException - 如果对象的类不支持 Cloneable 接口, * 则重写 clone 方法的子类也会抛出此异常,以指示无法复制某个实例。 * */ protected native java.lang.Object clone() throws CloneNotSupportedException; /*作用:返回该对象的字符串 *在Object中返回的字符串为:类名+@+该对象的哈希值 * 直接打印一个对象,其实相当于调用该方法 * */ public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } /*作用:唤醒此对象监视器上等待的单个线程。如果所有线程都在此线程等待,则会选择唤醒其中一个线程,选择是任意的。*/ public final native void notify(); /*作用:唤醒此对象监视器上等待的所有线程*/ public final native void notifyAll(); /*作用:在其他方法调用此对象的notify()方法或者notifyAll()方法前,或者超过指定的时间量前,导致当前线程等待 *参数: timeout 要等待的最长时间(以毫秒为单位)。 *抛出:IllegalMonitorStateException - 如果当前线程不是此对象监视器的所有者。 * InterruptedException - 如果在当前线程等待通知之前或者正在等待通知时, * 任何线程中断了当前线程。在抛出此异常时,当前线程的中断状态 被清除。 * */ public final native void wait(long timeout) throws InterruptedException; /*作用:在其他线程调用此对象的 notify() 方法或 notifyAll() 方法, * 或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。 *参数:timeout - 要等待的最长时间(以毫秒为单位)。 * nanos - 额外时间(以毫微秒为单位,范围是 0-999999 * 抛出:IllegalArgumentException - 如果超时值是负数,或者毫微秒值不在 0-999999 范围内。 * IllegalMonitorStateException - 如果当前线程不是此对象监视器的所有者。 * InterruptedException - 如果在当前线程等待通知之前或者正在等待通知时, * 任何线程中断了当前线程。在抛出此异常时,当前线程的中断状态 被清除。 * */ 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); } /*作用:在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待 *很明显在Object中 wait() = wait(0) * */ public final void wait() throws InterruptedException { wait(0); } /*作用:当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。 * */ protected void finalize() throws Throwable { }}
阅读全文
0 0
- 源码阅读笔记1————从Object开始
- 立志篇——开始阅读源码
- 从今天开始阅读Java源码吧——Java.io.File.java
- java源码阅读笔记(1)- Object
- Redis源码阅读笔记—adlist
- Redis源码阅读笔记—sds
- 源码阅读1-Object
- 阅读Selenium源码——从FirefoxDriver类实现说起
- Swift on Linux —— 从源码开始安装
- Android阅读源码从工具开始
- 从setContentView开始的源码阅读
- 从今天开始阅读Java源码吧!
- EasyUI学习笔记(五)——学习读源码--parser源码阅读分析1
- Discuz!NT代码阅读笔记(1)--从HttpModule开始 (转)
- Discuz!NT代码阅读笔记(1)--从HttpModule开始
- 源码阅读笔记:java.lang.Object
- Java源代码阅读——Object类
- JDK源码阅读笔记之——HashMap
- 指定仿函数
- 练习题之数列和神奇数
- Java 线程池
- js引入乱码
- 2017.09.08工作日记
- 源码阅读笔记1————从Object开始
- C语言strcat()库函数的实现
- PhpStorm+XMAPP创建我的第一个PHP程序
- [TFRecord格式数据]利用TFRecords存储与读取带标签的图片
- 国家编号缩写时区
- 飞机官方教程讲解
- 【c++】memset定义极值在竞赛中的应用
- C语言之strstr函数类似Java字符串的contain函数
- 2017腾讯校招在线编程----编码