1. 面向对象
1.1 Object
1.1.1 概述
Object: 是java 提供的根类,所有的类都要直接或者间接的继承Object
Object中的方法,是所有类都有的
Object xxx = new xxx() 是可以发生多态的
因为多态的原因,如果一个方法需要传递数据,并且无法确定数据类型的时候,就可以使用Object
今天的内容:
1. 谁的方法
2. 什么方法(成员还是静态)
3. 方法的功能是什么,入参和出参是什么
4. 什么时候需要重写(满足不了需求的时候)
1.1.2 Equals
== 比较基本类型的时候 比较的是值的大小,但是比较引用类型的时候 比较的是内存地址
而当我们需要比较两个对象的时候,往往是根据对象的属性的值进行比较,而不比较他们是不是同一
个对象,因为这样没有任何价值
此时 == 就不能解决我们的问题
于是 Object 中提供了一个equals方法,专门用于比较两个对象是否相同,是否为同一个对象
public boolean equals(Object obj){
return this == obj;
}
关于Object中的equals方法
设计目的 : 比较两个对象是否相等
默认比较内存地址,需要根据需求进行重写
1.1.3 toString
toString : 设计目的 , 返回该对象的字符串表示形式
输出一个引用类型的时候,默认输出内存地址
因为当我们输出一个引用类型的时候,会自动调用该对象的toString方法,默认的toString方法,只返
回内存地址
比如我们需要在打印一个对象的时候,展示出对象中的属性信息,就需要覆写toString方法
1.1.4 Finalize
JVM四大特性 :
1 跨平台
2 面向对象
3 多线程
4 自动垃圾回收机制
finalize 是什么
1 finalize每个对象都有
2 不需要程序员手动调用,由系统自动调用
3 垃圾 : 没有更多引用指向这个对象的时候,该对象被视为垃圾数据(创建了一个对象,谁也找
到它),等待被回收
4 当一个垃圾被回收之前,会自动调用该对象的finalize方法
所以 结合finalize的执行时机,适合做一个资源销毁操作
只要是在对象回收前执行的事,都可以放到 finalize 中
5 如果我们手动调用了finalize方法,那么只是一个简单的方法调用而已,并不会被回收
1.1.5 hashCode
1.2 类与类之间的关系
1 继承 使用extends表示
类A extends 类B{}
接口A extends 接口B,接口C{}
类和类之间是单继承,接口和接口之间是多继承
2 实现 implements
类A implements 接口B,接口C
类和接口是多实现
3 依赖
某个类中的方法的局部变量,是另一个类的对象引用
这种关系是临时性的,方法执行结束,关系就不存在了
4 关联
某个类的成员变量是另一个类对象的引用这种关系一般是长期的
5 聚合
整体和局部可以分离,各自具备独立的生命周期
比如公司和员工
假如A需要保存B的引用,这个引用一般是调用处传递过来的,这样的话 调用处和A 都保存B的引
用,此时就算A销毁了,B也不会销毁,因为还有其他引用指向
6 组合
组合的关系要强于聚合,又叫强聚合
同样是整体和局部,但是不可分离,局部没有独立的生命周期
比如A保存B的引用,一般这个引用是A自己创建的,这样的话,A每创建一个对象,都需要创建一个
B的对象,此时A销毁之后,B也就销毁了,因为没有其他指向了