一、Object类

  Java中规定: 如果一个类没有显式声明它的父类(即没有写extends xx),那么默认这个类的父类就是java.lang.Object。

  类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。

  如何理解根父类?

    (1)所有对象(包括数组)都实现这个类的方法,即Object类中声明的方法,所有引用数据类型(包括数组)中都有。

    (2)所有类的对象的实例化过程,都会调用 Object 的实例初始化方法。

    (3)所有的对象都可以赋值给 Object 的变量,或者说 Object 类型的变量,形参,数组可以接受任意类型的对象。

二、常用方法

  1、toString() 方法

public String toString()

    用于返回对象的信息,建议所有的子类都重写。如果没有重写:返回的字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。

    如果直接打印一个对象,或者用对象与字符串进行拼接,默认情况下自动调用这个对象的 toString() 方法。

  2、getClass() 方法

public final Class getClass()

      该方法返回此 Object 的运行时类。(分为编译时类型与运行时类型)

  3、finalize() 方法

protected void finalize()

      当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器(GC)调用此方法。

    子类重写 finalize() 方法,以配置系统资源或执行其他清除。

    什么情况下调用该方法?

    (1)某个对象确定要被回收了,类似于“留遗言”;

    (2)Java程序员是否无法确定具体哪个时间点会调用;

    (3)它是由 GC 调用的;

    (4)每一个对象,finalize() 只能被调用一次;

    注意:如果某个对象在被 GC 回收之前复活了,那么再死的时候,就不会调用 finalize() 方法。当在 finalize() 方法中又让一个引用指向了当前对象 this,那么这个对象就复活了。

  4、hashCode() 与 equal() 方法

public int hashCode():返回该对象的哈希码值。支持此方法是为了提高哈希表的性能。

     哈希码值是用这个对象的信息(属性值),通过某种算法,计算出一个 int 值。

      理想状态下:每一个对象都应该有一个唯一的哈希码值。

      现实中:两个不同的对象,可能它们的哈希码值相同。(如:“Aa”与“BB”,“通话”与“重地”)

      认为:

      (1)如果两个对象的哈希码值不同,就可以认为这个两个对象一定不“相等”。

      (2)如果两个对象的哈希码相同,不能认为这两个对象就一定“相等”,可能相同,也可能不同。

     这时,就需要引入 equal() 方法。

public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

       如果最终要确定两个对象是否“相等”要依据 equals 方法。

     Object 类中实现的 equals() 方法,即如果是我们自己写的类,没有重写 equals 方法的话,那么它的比较是等价于“==”。

     对于基本数据类型来说,比较的是“值”;对于引用数据类型来说,比较的是对象的“地址值”。

     可以选择进行重写:

     (1)当此方法 equals 被重写时,通常有必要重写 hasCode() 方法

         为什么要重写 hasCode() 方法?

         原因:

Java中规定:

  ① 如果两个对象调用  equals 方法返回 true,那么这两个对象的 hasCode 值必须相同;

  ② 如果两个对象的 hasCode 值不同,那么调用  equals 方法必须是 false;

  ③ 如果两个对象的  hasCode 值相同,那么调用 equals 方法可能为 true 也可能为 false;

     (2)重写 equals() 方法时,要遵循几个原则:

  ① 自反性:x.equals(x) 一定为 true;

  ② 对称性:x.equals(y) 和 y.equals(x) 结果一样;

  ③ 传递性:x.equals(y) 是 true,y.equals(z) 也是 true,那么 x.equals(z) 一定是 true;

  ④ 一致性:只要参与 equals 比较的属性值没有修改过,那么无论何时调用,结果都是一样的。

  ⑤ 对于任何非空引用值 x,x.equals(null) 都应该返回 false。

    注意:重写 hasCode 方法与 equals 方法,一般都是由开发工具自动生成的。

根父类:Object 类的更多相关文章

  1. 面向对象之包装类与Object类

    一.包装类(Wrapper) 1.包装类出现原因 为了使8种基本数据类型的变量具有类的特征,引入包装类 2.类型间转化 ① 基本数据类型---->对应的包装类:自动装箱 包装类---->对 ...

  2. Java Object类中toString方法的重写

    Object类中的tostring方法的: 当我们输出一个对象时,实际是输出的是这个类中的tostring方法,是一个地址值,而不是类中的属性. 1 一:子类没有重写Object类中的toStrinn ...

  3. 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍

    面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...

  4. 包装类、Object类——Java笔记(八)

    包装类:     基本数据类型的包装类     基本数据类型 包装类 byte Byte short Short int Integer long Long char Character float ...

  5. 浅析Java的Object类

    前言:   最近在回顾Java基础,在此过程中,查看源码是少不了的   这里以JDK8以基准,记录一些自己查看源码的观感 Object类,翻阅源码,看看这个类的所在位置,是在 java.lang 包下 ...

  6. 最终父类【根类】:Object类&Objects类

    一.java.lang.Object类 1.Object类介绍 Object类是所有类的父类.一个类都会直接或间接继承自该类: ​ 该类中提供了一些非常常用的方法! 2.toString()方法 A: ...

  7. 为什么说在js当中所有类的父类是Object类

    代码如下所示: function Parent(add,net,no,teacher) { this.add = add; this.net = net; this.no = no; this.tea ...

  8. Object类(根类)

    Object中的方法是所有类都有的方法,每个类默认继承了Object类. boolean  equals(Object obj) : Object中默认是比较地址,可以重写equals(Object ...

  9. Object类和常用方法

    Object类是java语言的根类,要么是一个类的直接父类,要么就是一个类的间接父类.所有对象(包括数组)都实现这个类的方法. 引用数据类型:类/接口/数组,引用数据类型又称之位对象类,所谓的数组变量 ...

随机推荐

  1. 06-cmake语法-include

    用来载入CMakeLists.txt文件,也用于载入预定义的cmake模块. include(cmake/OpenCVMinDepVersions.cmake) .cmake 是一个文本,定义了一个模 ...

  2. opacity兼容性问题

    用来设定元素透明度的 Opacity 是CSS 3里的一个属性.当然现在还只有少部分浏览器支持. 不过各个浏览器都有自己的私有属性来支持,其中包括老版本的Mozilla和Safari: IE: fil ...

  3. 小学四则运算口算练习app---No.3

    今天主要是实现按照指定的题目出题数目出题.在昨天设置页面的基础上,今天首先要学习的是接收不同页面间的参数问题.详解如下: 然后就开始我的传参和接收参数的问题! 在当前的Activity上进行跳转, 代 ...

  4. python yield实现协程(生产者-消费者)

    def customer(): r="" while True: n=yield r#,接收生产者的消息,并向消费者发送r print("customer receive ...

  5. 深入js系列-类型(数字)

    开头 js数字没有明确区分浮点数和整数类型,统一用number类型表示. number 基于IEEE 754标准实现 js采用的是双精度(64位二进制) 我们看一个基于IEEE 754标准实现都有会有 ...

  6. VS Code 安装与配置(使用MSYS2环境与mingw-w64 编译环境)

     更正了顺序,之前不知道怎么回事,内容顺序乱了 力求完美.详细,所以希望懂的人留言指点一下. 目前已经开始添加原理解释,希望大家能分享一些gcc gdb C语言等方面优秀链接 后续会慢慢增添内容,修正 ...

  7. vb.net 对字符串中的括号匹配进行判断,容许嵌套

    '   括号检查 '     括号共有四种:  1(英文圆括号),2(中文圆括号),3[方括号],4{花括号} '      要左右匹配(可以嵌套) Private Shared Function i ...

  8. 疯了!同事又问我为什么不能用 isXXX

    最近在做Code Review,写下了这篇文章:代码写成这样,老夫无可奈何!,说多了都是泪啊.. 最近又有人同事跑过来质疑我: 为什么变量名取名不能用 isXXX 这种方式,这样有什么问题?! 醉了, ...

  9. 简单说说JavaScript的Generator 实现(ES6)

    Generator 是 ES6 中新增的语法,和 Promise 一样,都可以用来异步编程 // 使用 * 表示这是一个 Generator 函数 // 内部可以通过 yield 暂停代码 // 通过 ...

  10. Java一个对象占用多少字节

    虚拟机:Java HotSpot(TM) 64-Bit Server VM (25.221-b11, mixed mode) 对象的内存以字节为单位,且必须是8的倍数,它的构成由3部分组成:对象头+实 ...