Object: 超类
 (1)Object是类层次结构的顶层类,是所有类的根类,超类
   所有的类都直接或者间接的继承自Object类
   所有对象(包括数组)都实现这个类的方法
 (2)Object类的常用方法:
   A:toString()
     public String toString():返回对象的字符串表示形式。
     组成:包名...类名@内存地址值的十六进制

 //toString源码:
public String toString() {
return getClass().getName() + "@"+Integer.toHexString(hashCode());
   //默认返回的是:类名@+16进制的哈希值
  }

 B:equals()   //只能用于引用类型,指示一些其他对象是否等于此对象
  public boolean equals(Object obj):
  默认比较的是对象的地址值是否相同。底层使用的是 ==
  一般,会重写该方法。按照自己的需求进行比较。

 //equals()底层源码:
public boolean equals(Object obj) {
return (this == obj);
}

 C:hashCode()
  public int hashCode():返回该对象的哈希码值。
  哈希值是通过将该对象的内部地址转换成一个整数来实现的
  hashCode的应用场景:
   在HashSet、HashMap以及HashTable这几个集合中要添加新的对象时,就会调用这个对象的hashCode方法,得到对应的hashcode值,实际上在HashMap(元素唯一)的具体实现中有一个table,保存已经存进去的对象的hashcode值,如果table中没有该hashcode值,该对象就可以直接添加进去,不用再进行任何比较了;如果存在该hashcode值,就调用它的equals方法与新元素进行比较,进一步判断两个对象是否相同。相同的话就不添加,不相同就添加,并重新转换该对象的hashCode。
   也就是说,hashCode相同,不代表是同一个对象,但是同一个对象一定具有相同的hashCode
 拓展认识:
  hashCode源码中有native关键字
  native所修饰的方法表示这个方法是Java的本地接口(Java Native Interface)
  作用:在JavaCode中调用C/C++Code
 D:getClass​()   //返回此对象的运行时类
  public final Class<?> getClass​():这里说明该方法不可重写,并且是一个泛型方法(可以接受所有类型包括自定义的类的类型)

     //在main函数中测试
Object obj = new Object();
Object s = new Student(); //自定义好的学生类
System.out.println(obj.getClass());
//结果:class java.lang.Object
System.out.println(s.getClass());
//结果:class Student

 E:finalize(不使用,在jdk9中已经过时了)
  protected void finalize()throws Throwable
  当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
  子类重写 finalize 方法,以配置系统资源或执行其他清除。但是可能导致性能问题,死锁和挂起
 多线程可能需要用到的方法:
  F:void wait​() //线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法
  G:void notify​() //唤醒正在等待对象监视器的单个线程。

 注意事项:
  ==和equals()的区别
  ==:
   比较基本类型:比较的是基本类型的是否相同。
   比较引用类型:比较的是引用类型的地址值是否相同。
  equals():
   比较引用类型,默认比较的是引用类型的地址值是否相同。
   但此方法可以通过重写,去实现不同方式的比较。

Java基础系列--07_Object类的学习及源码分析的更多相关文章

  1. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)

    我们以ByteArrayInputStream,拉开对字节类型的“输入流”的学习序幕.本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的 ...

  2. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

    前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会 ...

  3. Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例

    概要  前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...

  4. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例

    概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...

  5. Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

    概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...

  6. 【转】Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例

    概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...

  7. Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

    概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...

  8. 【转】 Java 集合系列07之 Stack详细介绍(源码解析)和使用示例

    概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...

  9. DotNetty网络通信框架学习之源码分析

    DotNetty网络通信框架学习之源码分析 有关DotNetty框架,网上的详细资料不是很多,有不多的几个博友做了简单的介绍,也没有做深入的探究,我也根据源码中提供的demo做一下记录,方便后期查阅. ...

随机推荐

  1. Linux 操作系统基础

    list : ls 目录: 文件,路径映射. ls : -l : lang 长格式, 显示完整信息. 文件类型: -: 普通文件(f) d: 目录文件 b: 块设备文件(block) c: 字块设备文 ...

  2. 关于inet_addr() 函数

    inet_addr() 将一个字符串格式的ip地址转换成一个uint32_t数字格式 但是需要注意的是, 这个函数的返回值在大小端机器上是不同的 例如输入一个"192.168.0.1&quo ...

  3. 基于HTTP协议的几种实时数据获取技术

    原文链接https://www.cnblogs.com/xrq730/p/9280404.html,作者博客园----五月的仓颉,转载请注明出处,谢谢 HTTP协议 HTTP协议大家都很熟悉了,开始本 ...

  4. Linux下Zookeeper安装使用

    1. 下载 下载地址,选择稳定的版本,比如3.4.13,beta为在测版本 2. 复制到任意的目录,解压 3. 修改配置文件 配置文件位于conf目录下,原配置文件为zoo_sample.cfg,更改 ...

  5. 吴恩达机器学习笔记58-协同过滤算法(Collaborative Filtering Algorithm)

    在之前的基于内容的推荐系统中,对于每一部电影,我们都掌握了可用的特征,使用这些特征训练出了每一个用户的参数.相反地,如果我们拥有用户的参数,我们可以学习得出电影的特征. 但是如果我们既没有用户的参数, ...

  6. ReentrantLock是如何基于AQS实现的

    ReentrantLock是一个可重入的互斥锁,基于AQS实现,它具有与使用 synchronized 方法和语句相同的一些基本行为和语义,但功能更强大. lock和unlock ReentrantL ...

  7. 基于mapreduce实现图的三角形计数

    源代码放在我的github上,想细致了解的可以访问:TriangleCount on github 一.实验要求 1.1 实验背景         图的三角形计数问题是一个基本的图计算问题,是很多复杂 ...

  8. SQL优化 MySQL版 -分析explain SQL执行计划与Extra

    Extra 作者 : Stanley 罗昊 [转载请注明出处和署名,谢谢!] 注:此文章必须有一定的Mysql基础,或观看执行计划入门篇传送门: https:.html 终于总结到哦SQK执行计划的最 ...

  9. kubernetes系列11—PV和PVC详解

    本文收录在容器技术学习系列文章总目录 1.认识PV/PVC/StorageClass 1.1 介绍 管理存储是管理计算的一个明显问题.该PersistentVolume子系统为用户和管理员提供了一个A ...

  10. cocos creator主程入门教程(七)—— MVC架构

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇将介绍在游戏客户端常用的架构MVC架构.一个游戏的MVC如下划分: M:1)单例全局的数据中心Wo ...