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. react-router详细解释

    react-router的理解 react的一个插件库,专门用来实现一个SPA应用(单页Web应用(single page web application,SPA)整个应用只有一个完整的页面,点击页面 ...

  2. 【STM32H7教程】第2章 STM32H7的开发环境搭建

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第2章    STM32H7的开发环境搭建 本章主要为大 ...

  3. T5大牛带你解析:如何实现分布式技术

    1.分布式事务 2. 分布式锁 Java 原生 API 虽然有并发锁,但并没有提供分布式锁的能力,所以针对分布式场景中的锁需要解决的方案. 分布式锁的解决方案大致有以下几种: 基于数据库实现 基于缓存 ...

  4. C#Npoi

    https://download.csdn.net/download/youhmcq/7725559http://www.cnblogs.com/downmoon/archive/2012/04/11 ...

  5. Java集合详解2:LinkedList和Queue

    今天我们来探索一下HashMap和HashTable机制与比较器的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下哈 ...

  6. Java~类,抽象类和接口

    最近有空就着迷于java的世界,希望可以把自己的lind重构一个java版本出来,虽然遇到一些小问题,但也都解决了,还是那句话,知识需要积累,程序员需要一个追求! 类 抽象类 接口 泛型类 泛型接口 ...

  7. 【Python3爬虫】用Python发送天气预报邮件

    此次的目标是爬取指定城市的天气预报信息,然后再用Python发送邮件到指定的邮箱. 一.爬取天气预报 1.首先是爬取天气预报的信息,用的网站是中国天气网,网址是http://www.weather.c ...

  8. 深入解析ThreadLocal 详解、实现原理、使用场景方法以及内存泄漏防范 多线程中篇(十七)

    简介 从名称看,ThreadLocal 也就是thread和local的组合,也就是一个thread有一个local的变量副本 ThreadLocal提供了线程的本地副本,也就是说每个线程将会拥有一个 ...

  9. 分享基于 websocket 网页端聊天室

    博客地址:https://ainyi.com/67 有一个月没有写博客了,也是因为年前需求多.回家过春节的原因,现在返回北京的第二天,想想,应该也要分享技术专题的博客了!! 主题 基于 websock ...

  10. Vue 无限滚动加载指令

    也不存在什么加载咯, 就是一个判断滚动条是否到达浏览器底部了. 如果到了就触发事件,米到就不处理. 计算公式提简单的   底部等于(0) =  滚动条高度 - 滚动条顶部距离 - 可视高度.  反正结 ...