day13

  1. Object
    变量首字母小写,类名首字母大写 成员变量私有化,不然+set和get白瞎
    instanceof 判断该对象是否由某个类实例化而来
    功能:解决类型转换异常 返回一个boolean类型的值
    Teacher类型,传入时,传teacher类中的对象。
    多态调用的结果是什么? 1,2,3
    1.1 概述
    Object : 是java中提供的一个根类(祖宗),所有类都直接或者间接的继承了Object,如果一个类没有显示继承一个父类的话,那么该类默认继承Object。
    Object中的方法是所有类都有的功能
    Object 变量名 = new 类名(); 是可以发生多态的
    因为多态的原因,如果一个方法需要传递的数据,我们不能确定数据的类型的时候,可以写Object

当有一个方法时:应了解

  • 1 该方法是谁的,
  • 2 是什么方法(成员还是静态)
  • 3 方法功能是什么,入参和出参是什么(能实现什么事,我需要给它什么,它需要给我什么)
  • 4 什么时候可以重写(满足不了我们需求的时候)
    1.2 Equals
  • 关于Object中的equals方法 (内容)
  •  public boolean equals(Object obj){
    
  •  	return (this == obj);
    
  •  }
    

== : 两边如果是 基本类型,则比较值的大小
是 引用类型,则比较内存地址

而Object中的equals方法,默认比较 内存地址,因为 就是 ==( 上面有写(this == obj) )

设计目的 : 比较两个对象是否相等
需要根据自己的需求进行重写,因为使用者一定知道怎么判断相等
为了不比较内存地址,要将两个对象对应的equals方法进行重写,以满足我们的需求
注意:不同类的对象,没有可比性

应用:1、比较地址,地址相等,值一定相等,因为都是同一个对象了。
2、判断是否为当前类型,否则返回false,不同类型没有可比性。
3、(强制转换),比较想要比较的数据

比较字符串是否相等

  •  应该用 equals    因为 == 比较内存地址
    
  •  并且 String类中 已经重写了equals方法,比较的是值,而不是地址
    
  • 任何的引用类型比较,都必须转换为基本类型比较,除非就是想知道他们内存地址是否一致

1.3 toString
设计目的 : 返回该对象的字符串表示形式,可以通过这个方法,把对象的数据展示出来,让外界知道
打印一个输出语句对象(引用类型) 时,如果该对象覆写了toString方法, 直接打印该对象会自动调用该对象的toString方法

  • 输出一个 引用类型 时,会自动调用该对象的toString方法(如果该对象覆写了toString方法)

  • Object中的toString

  • public String toString() {
    return getClass().getName() + “@” + Integer.toHexString(hashCode());
    }

1.4 hashCode
hashCode设计目的 : 是为了给每个对象生成一个唯一的标识符
同一个对象生成多次hash值,值一定是一样的
*另 :不同对象,生成的值,也有可能相同,这样又叫哈希冲突

  • 为保证数据的唯一性:
  •  	1 先比较哈希,(如果哈希不同,对象则不同)		(如学生类)
    
  •  	2 如果哈希值相同,再比较对象是否相同(equals)	(具体到学生个人)
    

在java中 可以通过 hashCode和equals来表示对象的唯一性

  • 覆写hashCode的时候要考虑equals
  • 覆写equals的时候要考虑 hashCode
  • hash算法 : 是一种安全的加密算法,把不定长的值,改为定长的值,并且不能保证其唯一性
    hash算法又叫散列函数

1.5Finalize

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

  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、付费专栏及课程。

余额充值