zoukankan      html  css  js  c++  java
  • 根父类:Object 类

    一、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 方法,一般都是由开发工具自动生成的。

  • 相关阅读:
    JUC高并发编程(三)之模拟接口压力测试
    JUC高并发编程(二)之多线程下载支付宝对账文件
    JUC高并发编程(一)之请求合并案例
    《Head First设计模式》读书笔记
    图文详解23种设计模式
    Laravel路由匹配
    深夜debug:一个不常遇到的HbuilderX自动化测试运行问题
    高德地图API中折线polyline不能跨越180度经度线的解决方案
    sublime配置java运行环境
    Docker技术入门
  • 原文地址:https://www.cnblogs.com/niujifei/p/11931485.html
Copyright © 2011-2022 走看看