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类的更多相关文章

  1. JDK1.8源码学习-Object

    JDK1.8源码学习-Object 目录 一.方法简介 1.一个本地方法,主要作用是将本地方法注册到虚拟机中. private static native void registerNatives() ...

  2. 源码学习-String类

    最近在扫描CodeDex时报了一个不能使用String.intern()的字符串来做锁对象的告警,对这个问题有疑问查了些资料,顺便学习一下String类的源码. 1.类定义 String 被final ...

  3. THINKPHP源码学习--------验证码类

    TP3.2验证码类的理解 今天在学习中用到了THINKPHP验证码,为了了解究竟,就开始阅读TP验证码的源码. 源码位置:./ThinkPHP/Library/Think/Verify.class.p ...

  4. [Android FrameWork 6.0源码学习] LayoutInflater 类分析

    LayoutInflater是用来解析XML布局文件,然后生成对象的ViewTree的工具类.是这个工具类的存在,才能让我们写起Layout来那么省劲. 我们接下来进去刨析,看看里边的奥秘 //调用i ...

  5. muduo网络库源码学习————线程类

    muduo库里面的线程类是使用基于对象的编程思想,源码目录为muduo/base,如下所示: 线程类头文件: // Use of this source code is governed by a B ...

  6. yii2 源码分析 object类分析 (一)

    转载请注明链接http://www.cnblogs.com/liuwanqiu/p/6737327.html yii2基本上所有的类都是继承的object类,下面就来分析一下object类吧 obje ...

  7. code of C/C++(3) - 从 《Accelerated C++》源码学习句柄类

    0  C++中多态的概念 多态是指通过基类的指针或者引用,利用虚函数机制,在运行时确定对象的类型,并且确定程序的编程策略,这是OOP思想的核心之一.多态使得一个对象具有多个对象的属性.class Co ...

  8. muduo网络库源码学习————日志类封装

    muduo库里面的日志使方法如下 这里定义了一个宏 #define LOG_INFO if (muduo::Logger::logLevel() <= muduo::Logger::INFO) ...

  9. muduo网络库源码学习————Exception类

    Exception类是为异常捕获而设计,可以获得异常的信息以及栈的回溯信息 (原来的代码没有demangle成员函数,输出的格式比较难看,加了demangle成员函数,利用demangle成员函数可以 ...

随机推荐

  1. P2479 [SDOI2010]捉迷藏

    传送门 KDtree是个吼东西啊-- 枚举每一个点,然后求出离他距离最远和最近的点的距离,更新答案 然而为什么感觉KDtree只是因为剪枝才能跑得动呢-- //minamoto #include< ...

  2. 洛谷P4315 月下“毛景树”(树剖+线段树)

    传送门 woc这该死的码农题…… 把每一条边转化为它连接的两点中深度较深的那一个,然后就可以用树剖+线段树对路径进行修改了 然后顺便注意在上面这种转化之后,树剖的时候不能搞$LCA$ 然后是几个注意点 ...

  3. Java Genericity

    四.  Java Genericity 1.  Genericity 泛型 泛型 <T> 1. 泛型就是参数化类型 2. 作用:安全,方便 3. 适用于对多种数据类型执行相同功能的代码,主 ...

  4. CAD中的文本编排操作

        AutoCAD中导入超文本实现方法 除了AutoCAD内含的文本输入命令外,向AutoCAD中输入多行文本即超文本的方法还有:通过Windows提供的剪贴板,利用AutoCAD提供的多行文本命 ...

  5. ACM输入外挂

    一.什么是输入挂 scanf的输入速度不cin快得多,那么有没有比scanf更快的东西呢?这就是要用到输入挂了. 二.什么时候使用输入挂 当输入规模达到1x10^6次方的时候,就需要输入挂,否则很可能 ...

  6. 题解报告:hdu 2084 数塔(递推dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 Problem Description 在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这 ...

  7. Optimizing Downloads for Efficient Network Access

    Optimizing Downloads for Efficient Network Access Previous  Next 1.This lesson teaches you to Unders ...

  8. Polynomial Division 数学题

    https://www.hackerrank.com/contests/101hack45/challenges/polynomial-division 询问一个多项式能否整除一个一次函数.a * x ...

  9. String的用法——转换功能

    package cn.itcast_05; /* String类的转换功能: byte[] getByte():把字符串转换成字节数组 复习: public String(byte[] bytes): ...

  10. [BZOJ1005][HNOI2008]明明的烦恼 数学+prufer序列+高精度

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int N; ...