day_13_Object、类关系、内部类、设计模式

Day13

  1. Object
    1.1 概述
  • Object : 是java中 提供的一个根类(祖宗)
  • 所有类都直接或者间接的继承了Object
  • 如果一个类没有显示继承一个父类的话,那么该类默认继承Object
  • 既然Object是所有类的祖类,也就意味着 Object中的方法是所有类都有的功能
  • Object xxx = new xxxx() ; 是可以发生多态的
  • 因为多态的原因,如果一个方法需要传递的数据,我们不能确定数据的类型的时候,可以写Object
    Day13
  1. Object
    1.1 概述
  • Object : 是java中 提供的一个根类(祖宗)
  • 所有类都直接或者间接的继承了Object
  • 如果一个类没有显示继承一个父类的话,那么该类默认继承Object
  • 既然Object是所有类的祖类,也就意味着 Object中的方法是所有类都有的功能
  • Object xxx = new xxxx() ; 是可以发生多态的
  • 因为多态的原因,如果一个方法需要传递的数据,我们不能确定数据的类型的时候,可以写Object

今天我们只讲解 : equals() toString() hashCode() finalize()

  • 1 该方法是谁的
  • 2 是什么方法(成员还是静态)
  • 3 方法功能是什么,入参和出参是什么(能实现什么事,我需要给它什么,它需要给我什么)
  • 4 什么时候可以重写(满足不了我们需求的时候)

1.2 Equals

  • 关于Object中的equals方法
  •  public boolean equals(Object obj){
    
  •  	return (this == obj);
    
  •  }
    
  • == : 两边如果是基本类型,则比较值的大小,但是两边如果是引用类型,则比较内存地址
  • 而Object中的equals方法,默认比较 内存地址,因为 就是 ==
  • 设计目的 : 比较两个对象是否相等
  •  但是 它没有实现该功能,因为不知道怎么实现,不知道你要比较什么属性,所以没法实现
    
  •  需要根据自己的需求进行重写,因为使用者一定知道怎么判断相等
    
  • 两个对象可以是任何东西,但是我们肯定要拿两个对象的有意义属性进行比较
  • 而不是比较内存地址,所以 这个时候要将两个对象对应的equals方法进行重写,以满足我们的需求
  • 但是不同类的对象,没有可比性

覆写的三步 主要修改强制转换这里

  • 比较字符串是否相等
  •  	应该用 equals    因为 == 比较内存地址
    
  •  并且 String类中 已经重写了equals方法,比较的是值,而不是地址
    
  • 任何的引用类型比较,都必须转换为基本类型比较,除非就是想知道他们内存地址是否一致
  • 因为 == , != 这些 只能比较基本数据类型,当两个对象比较的时候,会比较内存地址
  • 而我们比较的时候应该拿某一个相同的属性的值去比较,所以这样最终还是会变成基本数据类型
  • 所以说,面向对象就是一种基本数据封装的形式,所以我们比较的时候最终都要转换为基本类型比较

1.3 toString

  • toString :
  • 设计目的 : 返回该对象的字符串表示形式,可以通过这个方法,把每个对象的数据展示出来,让外界知道
  • 输出一个引用类型的时候,会自动调用该对象的toString方法
  • Object中的toString
  • public String toString() {
    return getClass().getName() + “@” + Integer.toHexString(hashCode());
    }

1.4 hashCode

  • hashCode设计目的 : 是为了给每个对象生成一个唯一的标识符
  • 同一个对象生成多次hash值,值一定是一样的
  • 但是 不同对象,生成的值,也有可能相同,这样又叫哈希冲突
  • 既然有哈希冲突的情况,所以 hash就不能保证数据的唯一性 , 怎么办?
  •  1 先比较哈希,如果哈希不同,对象则不同
    
  •  2 如果哈希值相同,再比较对象是否相同(equals)
    
  • 覆写hashCode的时候,还需要考虑什么? equals
  • 覆写equals的时候,还需要考虑什么? hashCode
  • 因为 在java中 可以通过 hashCode和equals来表示对象的唯一性
  • hash算法 : 是一种安全的加密算法,把不定长的值,改为定长的值,并且不能保证其唯一性

1.5 Finalize

  • finalize 方法 功能
  •  垃圾被回收之前 自动调用该方法,想做什么,自己覆写  Object
    
  • 1 finalize是每个对都有的方法
  • 2 不需要程序员去调用,由系统自动调用
  • 3 java中如果每个更多引用指向这个对象,那么该对象被视为垃圾数据,等待被回收,被回收之前,自动调用finalize方法
  • 4 finalize方法 没有垃圾回收功能,只是用于被回收之前做的一些事而已,回收是JVM去做的,所以程序员就算手动调用这个方法,也只是一个普通的成员方法调用而已,和对象回收没有任何关系
  • 5 一般用于做一些对象回收前的数据销毁操作
  1. 类关系
    参考类与类之间的关系文档
  2. 内部类
    3.1 概述

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内 部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使 用内部类

在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者 称为外部类。
Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完 整的名称

3.2 分类
Static成员内部类
非static成员内部类
局部内部类
匿名内部类
3.3 成员内部类

  • 变量 :
  •  成员变量 : 成员内部类
    
  •  静态变量 : 静态内部类
    
  •  局部变量 : 局部内部类
    
  •  形参和实参变量 : 匿名内部类
    
  • 成员内部类 :
  •  1 可以等同看做成员变量
    
  •  2 成员内部类中不能有静态声明
    
  •  3 成员内部类中可以直接访问外部类所有的属性
    

3.4 静态内部类

  • 静态内部类
  •  1 可以看做静态变量
    
  •  2 静态内部类中,不能直接访问成员数据,需要有对象才行
    
  •  3 静态内部类中可以声明所有东西
    

今天我们只讲解 : equals() toString() hashCode() finalize()

  • 1 该方法是谁的
  • 2 是什么方法(成员还是静态)
  • 3 方法功能是什么,入参和出参是什么(能实现什么事,我需要给它什么,它需要给我什么)
  • 4 什么时候可以重写(满足不了我们需求的时候)

1.2 Equals

  • 关于Object中的equals方法
  •  public boolean equals(Object obj){
    
  •  	return (this == obj);
    
  •  }
    
  • == : 两边如果是基本类型,则比较值的大小,但是两边如果是引用类型,则比较内存地址
  • 而Object中的equals方法,默认比较 内存地址,因为 就是 ==
  • 设计目的 : 比较两个对象是否相等
  •  但是 它没有实现该功能,因为不知道怎么实现,不知道你要比较什么属性,所以没法实现
    
  •  需要根据自己的需求进行重写,因为使用者一定知道怎么判断相等
    
  • 两个对象可以是任何东西,但是我们肯定要拿两个对象的有意义属性进行比较
  • 而不是比较内存地址,所以 这个时候要将两个对象对应的equals方法进行重写,以满足我们的需求
  • 但是不同类的对象,没有可比性
    在这里插入图片描述

覆写的三步 主要修改强制转换这里

  • 比较字符串是否相等
  •  	应该用 equals    因为 == 比较内存地址
    
  •  并且 String类中 已经重写了equals方法,比较的是值,而不是地址
    

*在这里插入图片描述

  • 任何的引用类型比较,都必须转换为基本类型比较,除非就是想知道他们内存地址是否一致
  • 因为 == , != 这些 只能比较基本数据类型,当两个对象比较的时候,会比较内存地址
  • 而我们比较的时候应该拿某一个相同的属性的值去比较,所以这样最终还是会变成基本数据类型
  • 所以说,面向对象就是一种基本数据封装的形式,所以我们比较的时候最终都要转换为基本类型比较

在这里插入图片描述

在这里插入图片描述

1.3 toString

  • toString :
  • 设计目的 : 返回该对象的字符串表示形式,可以通过这个方法,把每个对象的数据展示出来,让外界知道
  • 输出一个引用类型的时候,会自动调用该对象的toString方法
  • Object中的toString
  • public String toString() {
    return getClass().getName() + “@” + Integer.toHexString(hashCode());
    }

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1.4 hashCode

在这里插入图片描述

  • hashCode设计目的 : 是为了给每个对象生成一个唯一的标识符
  • 同一个对象生成多次hash值,值一定是一样的
  • 但是 不同对象,生成的值,也有可能相同,这样又叫哈希冲突
  • 既然有哈希冲突的情况,所以 hash就不能保证数据的唯一性 , 怎么办?
  •  1 先比较哈希,如果哈希不同,对象则不同
    
  •  2 如果哈希值相同,再比较对象是否相同(equals)
    
  • 覆写hashCode的时候,还需要考虑什么? equals
  • 覆写equals的时候,还需要考虑什么? hashCode
  • 因为 在java中 可以通过 hashCode和equals来表示对象的唯一性
  • hash算法 : 是一种安全的加密算法,把不定长的值,改为定长的值,并且不能保证其唯一性

在这里插入图片描述

1.5 Finalize

  • finalize 方法 功能
  •  垃圾被回收之前 自动调用该方法,想做什么,自己覆写  Object
    
  • 1 finalize是每个对都有的方法
  • 2 不需要程序员去调用,由系统自动调用
  • 3 java中如果每个更多引用指向这个对象,那么该对象被视为垃圾数据,等待被回收,被回收之前,自动调用finalize方法
  • 4 finalize方法 没有垃圾回收功能,只是用于被回收之前做的一些事而已,回收是JVM去做的,所以程序员就算手动调用这个方法,也只是一个普通的成员方法调用而已,和对象回收没有任何关系
  • 5 一般用于做一些对象回收前的数据销毁操作
    在这里插入图片描述
  1. 类关系
    参考类与类之间的关系文档
  2. 内部类
    3.1 概述

当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内 部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使 用内部类

在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者 称为外部类。
Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完 整的名称

3.2 分类
Static成员内部类
非static成员内部类
局部内部类
匿名内部类
3.3 成员内部类

  • 变量 :
  •  成员变量 : 成员内部类
    
  •  静态变量 : 静态内部类
    
  •  局部变量 : 局部内部类
    
  •  形参和实参变量 : 匿名内部类
    
  • 成员内部类 :
  •  1 可以等同看做成员变量
    
  •  2 成员内部类中不能有静态声明
    
  •  3 成员内部类中可以直接访问外部类所有的属性
    

在这里插入图片描述

3.4 静态内部类

  • 静态内部类
  •  1 可以看做静态变量
    
  •  2 静态内部类中,不能直接访问成员数据,需要有对象才行
    
  •  3 静态内部类中可以声明所有东西
    

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值