前言
equals方法 finalize方法 HashCode方法 toString方法
Object
是所有的类父类,可以说叫祖类,根类。
equals方法
==:
- 用来比较基本数据类型:比较的值
- 比较引用数据类型:比较的内存地址
equals方法:用来比较两个对象
Object类中的equals方法:用来比较两个对象的内存地址和‘==’一样
如果覆写了,那就按照你自己覆写的去比较
finalize方法
垃圾过多或者程序结束时,程序自动调用Object类中的finalize方法,回收垃圾
自己手动调用,没有意义
可以通过System.gc();建议系统进行垃圾回收(虽然不一定回收,但是建议多了就回收了)
for (int i = 0; i < 100; i++) {
System.gc();//建议垃圾回收方法
}
HashCode方法:给对象分配【唯一】hash值
用来获取hash值 十进制的数
1.同一对象调用hashCode方法得到的Hash值一样
2.不同对象调用hashCode方法得到的Hash值不一定不同,相同时在用equals比较
Rabbit rabbit = new Rabbit();//1625635731
System.out.println(Integer.toHexString(rabbit.hashCode()));//60e53b93
System.out.println(rabbit.hashCode());
toHexString方法可以将数字转化为字符串型的十六进制数
toString方法
打印自定义内容
实例化对象,对象的引用就是调用的String类中的toString方法,我们可以重写打印自定义内容
类与类之间的关系
继承,实现
继承关系/泛化关系 继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在Java中继承关系通过关键字 extends明确标识,在设计时一般没有争议性。
实现关系 实现指的是一个class类实现interface接口(可以是多个)的功能,实现是类与接口之间最常见的关系。在Java中此类关系通过关键字 implements明确标识,在设计时一般没有争议性。
依赖,关联
依赖关系 简单的理解,依赖就是一个类A使用到了另一个类B,而这种使用关系是具有偶然性的、临时性的、非常弱的,方法执行完,这个关系就不存在了,就是临时使用了一下功能,但是类B的变化会影响到类A。比如某人要过河,需要借用一条船,此时人与船之间的关系就是依赖。表现在代码层面,为类B作为参数被类A在某个method方法中使用。
关联关系 关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性 的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,
ClassC cc = new ClassC()
ClassC.staticVar
全局变量,就是指他的成员变量,静态变量
也可能是关联类A引用了一个类 型为被关联类B的全局变量。
聚合,组合
聚合关系 聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于 多个整体对象,也可以为多个整体对象共享。比如计算机与CPU、公司与员工的关系等,比如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇 等。表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
组合关系/合成关系 组合也是关联关系的一种特例,它体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。它同样体现整体与部分间的关系,但此 时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束,比如人和人的大脑。表现在代码层面,和关联关系是一致的,只能从语义级别来区 分。
内部类(平常做项目用不到)
成员内部类:成员变量,成员方法,构造方法,常量(不能声明静态)
- 可以直接使用外部类成员变量,静态变量,常量,不管私有还是非私有
- 可以直接使用外部类成员方法,静态方法,构造方法,不管私有还是非私有
静态内部类:(可以声明静态)
在静态内部类中不能直接调用外部类的成员变量,需要先创建外部类的对象
局部内部类
外部是静态方法
- 不能定义静态变量和静态方法
- 在局部内部类中的成员方法中不能直接使用外部类的成员变量,也不能调用外部类的成员方法
外部是成员方法
- 和成员内部类一样