Java源码分析:Object类源代码分析
Object类源代码分析:
package java.lang;
/**
* Class {@code Object} is the root of the class hierarchy.
* Every class has {@code Object} as a superclass. All objects,
* including arrays, implement the methods of this class.
*/
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
public final native Class<?> getClass();
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}
protected native Object clone() throws 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;
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);
}
public final void wait() throws InterruptedException {
wait(0);
}
protected void finalize() throws Throwable { }
}
1.native这个关键字:Native Method就是一个java调用了非java代码的接口,具体实现体是非java实现(但是有实现),不能与abstract连用。
2.equals:底层未直接用双等号判断是否是同一个对象。
3.clone():本地方法,用于对象的复制
4.hashCode 的常规协定是:
1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode方法时,必须一致地返回相同的整数,前提是将对象进行equals比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。
2.如果根据equals(Object)方法,两个对象是相等的,那么对这两个对象中的每个对象调用hashCode方法都必须生成相同的整数结果。
3.如果根据equals(java.lang.Object)方法,两个对象不相等,那么对这两个对象中的任一对象上调用hashCode 方法不要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。
5.toString(): getClass().getName() + "@" + Integer.toHexString(hashCode());未覆toString方法时返回的字符串。
6.与线程有关的三个本地方法:
notify():在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待
notifyAll()
wait(long timeout)
7.finalize() :当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
- 来一波Linux中查看cpu、磁盘、内存、网络的命令
- PXE+kickstart网络安装CentOS7.4系统及过程中各种报错
- [MSDN]通过避免下列 10 个常见 ASP.NET 缺陷使网站平稳运行
- Flask-配置与调试
- PXE+kickstart网络安装CentOS7.4系统及过程中各种报错
- MSDN官方的ASP.Net异步页面的经典示例代码
- Nginx反向代理、负载均衡功能
- 2018即将面临的12个云安全风险
- Flask快速入门,知识整理
- python的reduce()函数
- 企业级memcached缓存数据库结合php使用与web管理memcached
- python中星号的意义(**字典,*列表或元组)
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- Python 实现抽象类的两种方式+邮件提醒+动态导入模块+反射(参考Django中间件源码)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- SSM第五讲 动态SQL与高级查询
- SSM第六讲 MyBatis的高级特性
- SSM第七讲 SpringMVC概述和基础知识详解
- SSM第八讲 SpringMVC高级特性
- SSM第九讲 Spring+SpringMVC+MyBatis框架整合
- 大型项目技术栈第一讲 Vue.js的使用
- springBoot 入门(五)—— 使用 纯注解方式 的springboot+ mybatis+junit4 整合
- 常见加载类错误分析
- 常用的ClassLoader分析
- 如何实现自己的ClassLoader
- Hacking with iOS: SwiftUI Edition - 潜力客户名单项目(三)
- 大型项目技术栈第四讲 SQL语句构建器
- redis 入门(一)——Linux环境安装测试以及基本命令演示
- 大型项目技术栈第五讲 富文本编辑器
- weblogic 11g StuckThreadMaxTime 问题解决 以及 线程池、数据库连接池参数调优