源码学习-Object类
1.Object类是Java所有类的超类
2.查看Object的属性和方法,发现Object类没有属性,只有13个方法,其中7个本地方法。

3.接下来看具体的方法
3.1 Object() 默认的构造方法
3.2 registerNatives() 注册所有的本地方法
方法签名:
private static native void registerNatives()
这个方法是一个本地方法,用来注册本类中所有的本地方法。权限为私有,在类中有一个静态代码块调用
static {
registerNatives();
}
3.3 getClass() 返回一个对象的运行时类对象,本地方法
方法签名:
public final native Class<?> getClass();
3.4 hashCode() 返回对象的HashCode,本地方法
方法签名:
public native int hashCode();
3.4.1 HashCode用于散列存储结构(如Hashtable,HashMap)中确定对象存储地址,利于查找快捷性
3.5 equals(Object obj) 判断两个对象是否相等
public boolean equals(Object obj) {
return (this == obj);
}
3.5.1 如果两个对象的equals为true,那么这两个对象的hashCode一定相等,反之,如果两个对象的hashCode相同,两个对象的equals不一定为true,只能说明他们存放在散列存储结构中的地址相同。
3.5.2 重写类的equals方法要同时重写hashCode方法,并遵守3.5.1的原则
重写例子:假设有一个User类,有String username,和String id,只要id相等就代表是同一个User
public boolean equals(Object obj) {
if(this == obj) return true;
if(obj instanceof User){
if(this.id.equals(((User)obj).getId()){
return true;
}
}
return false;
}
重写User类的HashCode方法例子
public int hashCode(){
int result = 29;
return this.id.hashCode()*result;
}
3.6 clone() 克隆对象,可以克隆的对象的类必须要实现Cloneable接口
方法签名:
protected native Object clone() throws CloneNotSupportedException;
3.7 toString() 返回能代表一个对象的字符串(类名+16进制的HashCode)
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
3.8 notify()
public final native void notify();
3.9 notifyAll()
public final native void notifyAll();
3.10 wait(long timeout)
public final native void wait(long timeout) throws InterruptedException;
3.11 wait(long timeout, int nanos) 本质上调用的是本地方法wait(long timeout)
public final void wait(long timeout, int nanos) throws InterruptedException
3.12 wait()
public final void wait() throws InterruptedException {
wait(0);
}
3.8到3.12都是多线程相关的,调用对象的wait时会挂起调用这个方法的线程,直到调用对象的notify或者notifyAll的同步块执行完毕,然而同步块执行完毕之后运行的是哪个线程决定于JVM的调度策略,而不是说之前调用wait挂起的线程一定会执行。
3.13 finalize() 空方法,与JVM垃圾回收机制有关,JVM准备对此对象所占用的内存空间进行垃圾回收前,将被调用。主动调用此方法并不会有什么效果。
protected void finalize() throws Throwable { }
源码学习-Object类的更多相关文章
- JDK1.8源码学习-Object
JDK1.8源码学习-Object 目录 一.方法简介 1.一个本地方法,主要作用是将本地方法注册到虚拟机中. private static native void registerNatives() ...
- 源码学习-String类
最近在扫描CodeDex时报了一个不能使用String.intern()的字符串来做锁对象的告警,对这个问题有疑问查了些资料,顺便学习一下String类的源码. 1.类定义 String 被final ...
- THINKPHP源码学习--------验证码类
TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.p ...
- [Android FrameWork 6.0源码学习] LayoutInflater 类分析
LayoutInflater是用来解析XML布局文件,然后生成对象的ViewTree的工具类.是这个工具类的存在,才能让我们写起Layout来那么省劲. 我们接下来进去刨析,看看里边的奥秘 //调用i ...
- muduo网络库源码学习————线程类
muduo库里面的线程类是使用基于对象的编程思想,源码目录为muduo/base,如下所示: 线程类头文件: // Use of this source code is governed by a B ...
- yii2 源码分析 object类分析 (一)
转载请注明链接http://www.cnblogs.com/liuwanqiu/p/6737327.html yii2基本上所有的类都是继承的object类,下面就来分析一下object类吧 obje ...
- code of C/C++(3) - 从 《Accelerated C++》源码学习句柄类
0 C++中多态的概念 多态是指通过基类的指针或者引用,利用虚函数机制,在运行时确定对象的类型,并且确定程序的编程策略,这是OOP思想的核心之一.多态使得一个对象具有多个对象的属性.class Co ...
- muduo网络库源码学习————日志类封装
muduo库里面的日志使方法如下 这里定义了一个宏 #define LOG_INFO if (muduo::Logger::logLevel() <= muduo::Logger::INFO) ...
- muduo网络库源码学习————Exception类
Exception类是为异常捕获而设计,可以获得异常的信息以及栈的回溯信息 (原来的代码没有demangle成员函数,输出的格式比较难看,加了demangle成员函数,利用demangle成员函数可以 ...
随机推荐
- P2479 [SDOI2010]捉迷藏
传送门 KDtree是个吼东西啊-- 枚举每一个点,然后求出离他距离最远和最近的点的距离,更新答案 然而为什么感觉KDtree只是因为剪枝才能跑得动呢-- //minamoto #include< ...
- 洛谷P4315 月下“毛景树”(树剖+线段树)
传送门 woc这该死的码农题…… 把每一条边转化为它连接的两点中深度较深的那一个,然后就可以用树剖+线段树对路径进行修改了 然后顺便注意在上面这种转化之后,树剖的时候不能搞$LCA$ 然后是几个注意点 ...
- Java Genericity
四. Java Genericity 1. Genericity 泛型 泛型 <T> 1. 泛型就是参数化类型 2. 作用:安全,方便 3. 适用于对多种数据类型执行相同功能的代码,主 ...
- CAD中的文本编排操作
AutoCAD中导入超文本实现方法 除了AutoCAD内含的文本输入命令外,向AutoCAD中输入多行文本即超文本的方法还有:通过Windows提供的剪贴板,利用AutoCAD提供的多行文本命 ...
- ACM输入外挂
一.什么是输入挂 scanf的输入速度不cin快得多,那么有没有比scanf更快的东西呢?这就是要用到输入挂了. 二.什么时候使用输入挂 当输入规模达到1x10^6次方的时候,就需要输入挂,否则很可能 ...
- 题解报告:hdu 2084 数塔(递推dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...
- Optimizing Downloads for Efficient Network Access
Optimizing Downloads for Efficient Network Access Previous Next 1.This lesson teaches you to Unders ...
- Polynomial Division 数学题
https://www.hackerrank.com/contests/101hack45/challenges/polynomial-division 询问一个多项式能否整除一个一次函数.a * x ...
- String的用法——转换功能
package cn.itcast_05; /* String类的转换功能: byte[] getByte():把字符串转换成字节数组 复习: public String(byte[] bytes): ...
- [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int N; ...