今天是来到天亮的第14天,今天主要学习了Object方法、类关系。
object方法:
object类是所有类的根类,他的方法是所有类都有得。object xxx =new xxx()也是多态。
具体方法:equals()
== 比较基本类型的时候 比较的是值的大小,但是比较引用类型的时候 比较的是内存地址 而当我们需要比较两个对象的时候,往往是根据对象的属性的值进行比较,而不比较他们是不是同一个对象,因为这样没有任何价值
于是 Object 中提供了一个equals方法,专门用于比较两个对象是否相同,是否为同一个对象。
看一下Object对象的equals方法是如何实现的:
boolean equals(Object o){
return this==o;
}
Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。
tostring():
toString : 设计目的 , 返回该对象的字符串表示形式
输出一个引用类型的时候,默认输出内存地址因为当我们输出一个引用类型的时候,会自动调用该对象的toString方法,默认的toString方法,只返回内存地址比如我们需要在打印一个对象的时候,展示出对象中的属性信息,就需要覆写toString方法。
输出对象名时自动调用,覆写直接输出。
public String toString() {}
Finalize():
jvm四大特性:
面向对象,自动垃圾处理,跨平台,多线程。
finalize就是跟自动垃圾处理。
finalize 是什么
1 finalize每个对象都有
2 不需要程序员手动调用,由系统自动调用
3 垃圾 : 没有更多引用指向这个对象的时候,该对象被视为垃圾数据(创建了一个对象,谁也找到它),等待被回收
4 当一个垃圾被回收之前,会自动调用该对象的finalize方法 所以 结合finalize的执行时机,适合做一个资源销毁操作,只要是在对象回收前执行的事,都可以放到 finalize 中
5 如果我们手动调用了finalize方法,那么只是一个简单的方法调用而已,并不会被回收 。
// 程序员可以建议回收,但是它可以不接受建议
System.gc();
hashCode():
hashCode 方法的设计目的 是为了给给对象生成hash值
同一个对象生成多次hash值,值一定 相同,但是 多个对象 也有可能生成相同的hash值,叫哈希冲突
在java中hashcode方法是Object类的native方法,返回值为int类型,根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。
类与类之间的关系:
继承:
用extends表示,java单继承
实现:
implements,类与接口是多继承。
依赖:
某个类中的方法的局部变量,是另一个类的对象引用,这种关系是临时性的,方法执行结束,关系就不存在了
关联:
某个类的成员变量是另一个类对象的引用,这种关系一般是长期的
聚合:
整体和局部可以分离,各自具备独立的生命周期。假如A需要保存B的引用,这个引用一般是调用处传递过来的,这样的话 调用处和A 都保存B的引用,此时就算A销毁了,B也不会销毁,因为还有其他引用指向
组合:
同样是整体和局部,但是不可分离,局部没有独立的生命周期
比如A保存B的引用,一般这个引用是A自己创建的,这样的话,A每创建一个对象,都需要创建一个B的对象,此时A销毁之后,B也就销毁了,因为没有其他指向了。