- 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 一般用于做一些对象回收前的数据销毁操作
-
类关系
参考类与类之间的关系文档
类与类之间6种关系
继承、实现、 依赖(局部)、关联(成员)、 聚合(可拆解)、组合(不可拆解,一拆全凉) -
内部类
3.1概述
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者 称为外部类。
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内 部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使 用内部类(心脏,人)
Inner class一般用在定义它的类或语句块之内,在外部引用它时必须给出完 整的名称
3.2 分类
Static成员内部类
非static成员内部类
局部内部类
匿名内部类
3.3 成员内部类
- 变量 :
-
成员变量 : 成员内部类
-
静态变量 : 静态内部类
-
局部变量 : 局部内部类
-
形参和实参变量 : 匿名内部类
- 成员内部类 :
-
1 可以等同看做成员变量 (通过外部类对象.去创建成员内部类对象)
-
2 成员内部类中不能有静态声明
-
3 成员内部类中可以直接访问外部类所有的属性
3.4 静态内部类
- 静态内部类
-
1 可以看做静态变量
-
2 静态内部类中可以声明所有东西
-
3 静态内部类中,不能直接访问成员数据,需要有对象才行
外部类.内部类.静态; //访问静态时:
访问当前类的静态属性的时候,类名可以省略(外部类);