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