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. 必看!如何让你的LBS服务性能提升十倍!

    本文由云+社区发表 作者:腾讯云数据库团队 随着国内服务共享化的热潮普及,共享单车,共享雨伞,共享充电宝等各种服务如雨后春笋,随之而来的LBS服务定位问题成为了后端服务的一个挑战.MongoDB对LB ...

  2. ASP.NET Core 身份验证(一)

    前言 这篇文章我想带领大家了解一下 ASP.NET Core 中如何进行的身份验证,在开始之前强烈建议还没看过我写的 Identity 系列文章的同学先看一下. Identity 入门系列文章: Id ...

  3. MySQL性能优化总结___本文乃《MySQL性能调优与架构设计》读书笔记!

    一.MySQL的主要适用场景 1.Web网站系统 2.日志记录系统 3.数据仓库系统 4.嵌入式系统 二.MySQL架构图: 三.MySQL存储引擎概述 1)MyISAM存储引擎 MyISAM存储引擎 ...

  4. 经典排序算法 — C# 版(上)

    提起排序,与我们的息息相关,平时开发的代码少不了排序. 经典的排序算法又非常多,我们怎么评价一个排序算法的好坏呢? 其实可以这样想,要细致的比较排序算法好坏,那我们就从多方面尽可能详细的对比 一.效率 ...

  5. 9. VIM 系列 - YouCompleteMe 实现代码补全

    目录 环境准备 插件安装 环境准备 $ sudo apt install build-essential cmake python3-dev python-dev $ sudo apt install ...

  6. Exceptionless邮箱设置

    在web.config中配置邮箱: <system.net> <mailSettings> <smtp from="xxx@163.com"> ...

  7. 『练手』004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件

    004 Laura.SqlForever如何扩展 导航栏 工具栏 右键菜单 插件 导航栏 插件扩展 比如下图的    窗口 > 关闭所有文档    这个导航栏: 在 任何程序集,任何命名空间,任 ...

  8. 全文检索-Elasticsearch (四) elasticsearch.net 客户端

    本篇摘自elasticsearch.net search入门使用指南中文版(翻译) 原文:http://edu.dmeiyang.com/book/nestusing.html elasticsear ...

  9. Lumen框架-错误&日志

    介绍 当你开始一个新的Lumen项目的时候,错误和异常功能,已经在框架中注入了.此外,Lumen还集成了Monolog日志函数,支持和提供多种强大的日志处理功能. 配置 错误详情 大量的错误信息在你的 ...

  10. C#写一个简单爬虫

    最近研究C#的爬虫写法,搞了半天,才在网上很多的写法中整理出了一个简单的demo(本人菜鸟,大神勿喷).一是为了自己记录一下以免日后用到,二是为了供需要朋友参考. 废话不多说,上代码 using Ht ...