Java基础系列--07_Object类的学习及源码分析
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类的学习及源码分析的更多相关文章
- java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)
我们以ByteArrayInputStream,拉开对字节类型的“输入流”的学习序幕.本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的 ...
- java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)
前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会 ...
- Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
概要 前面,我们已经学习了ArrayList,并了解了fail-fast机制.这一章我们接着学习List的实现类——LinkedList.和学习ArrayList一样,接下来呢,我们先对Linked ...
- Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要 这一章,我们对HashMap进行学习.我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap.内容包括:第1部分 HashMap介绍第2部分 HashMa ...
- Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...
- 【转】Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
概要 前一章,我们学习了HashMap.这一章,我们对Hashtable进行学习.我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable.第1部分 Ha ...
- Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...
- 【转】 Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
概要 学完Vector了之后,接下来我们开始学习Stack.Stack很简单,它继承于Vector.学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码:最后再通过实例来学会使用它. ...
- DotNetty网络通信框架学习之源码分析
DotNetty网络通信框架学习之源码分析 有关DotNetty框架,网上的详细资料不是很多,有不多的几个博友做了简单的介绍,也没有做深入的探究,我也根据源码中提供的demo做一下记录,方便后期查阅. ...
随机推荐
- Android SQLite 数据库学习
SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...
- 微信小程序后端开发(Java语言)笔记
前言: 因为是第一次真正接触后端开发,从编码到部署服务器到上线,所以做个笔记,也供和我一样的开发小白一些参考. 一.前期工作:开发环境与工具: 1. 编程语言:Java #笔者还没学PHP,只想 ...
- 2、自动化运维之SaltStack远程执行详解
SaltStack远程执行详解 ●目标(Targeting) ●模块(Module) ●返回(Returnners) 混合模式-C 选项 主机名设置参照: redis-node1-redis03-id ...
- FPGA高速ADC接口实战——250MSPS采样率ADC9481
一.前言 最近忙于硕士毕业设计和论文,没有太多时间编写博客,现总结下之前在某个项目中用到的一个高速ADC接口设计部分.ADC这一器件经常用于无线通信.传感.测试测量等领域.目前数字系统对高速数据采集的 ...
- Storm入门(八)Storm实战常见问题总结(持续更新)
一.本地环境log级别设置问题 storm-core-1.1.0.jar下面有个log4j2.xml文件,默认log级别是info. <configuration monitorInterval ...
- Linux2:Linux目录结构
Linux目录图 进入根目录,使用ll命令看一下Linux整个根目录图: 这里面所有的目录都是买完服务器之后最初始的目录,没有进过任何加工.Linux以树的结构组织所有目录,用一张图表示一下Linux ...
- nginx反向代理配置
最近在项目中使用nginx反向代理,根据不同的请求路径,将请求分发到不同服务.下面的示例主要完成如下功能 /prod/路径的请求分发到prod服务 /test/路径的请求分发到test服务 创建文件夹 ...
- Hadoop系列007-HDFS客户端操作
title: Hadoop系列007-HDFS客户端操作 date: 2018-12-6 15:52:55 updated: 2018-12-6 15:52:55 categories: Hadoop ...
- 网络协议 21 - RPC 协议(中)- 基于 JSON 的 RESTful 接口协议
上一节我们了解了基于 XML 的 SOAP 协议,SOAP 的 S 是啥意思来着?是 Simple,但是好像一点儿都不简单啊! 传输协议问题 对于 SOAP 来讲,比如我创建一个订单, ...
- LindDotNetCore~Scheduling任务调度模块的介绍
回到目录 任务调度组件 位于Scheduling目录 基类JobBase,所有JOB都派生自它,重写Cron属性可以修改调度周期 支持单次JOB,即执行完成后马上停止 支持对外API接口,以便获取和修 ...