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. Android SQLite 数据库学习

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...

  2. 微信小程序后端开发(Java语言)笔记

    前言: 因为是第一次真正接触后端开发,从编码到部署服务器到上线,所以做个笔记,也供和我一样的开发小白一些参考. 一.前期工作:开发环境与工具: 1. 编程语言:Java    #笔者还没学PHP,只想 ...

  3. 2、自动化运维之SaltStack远程执行详解

    SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...

  4. FPGA高速ADC接口实战——250MSPS采样率ADC9481

    一.前言 最近忙于硕士毕业设计和论文,没有太多时间编写博客,现总结下之前在某个项目中用到的一个高速ADC接口设计部分.ADC这一器件经常用于无线通信.传感.测试测量等领域.目前数字系统对高速数据采集的 ...

  5. Storm入门(八)Storm实战常见问题总结(持续更新)

    一.本地环境log级别设置问题 storm-core-1.1.0.jar下面有个log4j2.xml文件,默认log级别是info. <configuration monitorInterval ...

  6. Linux2:Linux目录结构

    Linux目录图 进入根目录,使用ll命令看一下Linux整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Linux以树的结构组织所有目录,用一张图表示一下Linux ...

  7. nginx反向代理配置

    最近在项目中使用nginx反向代理,根据不同的请求路径,将请求分发到不同服务.下面的示例主要完成如下功能 /prod/路径的请求分发到prod服务 /test/路径的请求分发到test服务 创建文件夹 ...

  8. Hadoop系列007-HDFS客户端操作

    title: Hadoop系列007-HDFS客户端操作 date: 2018-12-6 15:52:55 updated: 2018-12-6 15:52:55 categories: Hadoop ...

  9. 网络协议 21 - RPC 协议(中)- 基于 JSON 的 RESTful 接口协议

        上一节我们了解了基于 XML 的 SOAP 协议,SOAP 的 S 是啥意思来着?是 Simple,但是好像一点儿都不简单啊! 传输协议问题     对于 SOAP 来讲,比如我创建一个订单, ...

  10. LindDotNetCore~Scheduling任务调度模块的介绍

    回到目录 任务调度组件 位于Scheduling目录 基类JobBase,所有JOB都派生自它,重写Cron属性可以修改调度周期 支持单次JOB,即执行完成后马上停止 支持对外API接口,以便获取和修 ...