java.lang.Object
Posted 1185937986-jili
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.Object相关的知识,希望对你有一定的参考价值。
java.lang.Object
类Object是类层次结构的根类。每个类都使用Object作为超类。
所有对象(包括数组)都实现这个类的方法。
Object是根父类,如何理解?
(一)从继承
(1)所有类都继承它
如果一个类没有显式声明它的父类,那么它的父类就是Object。
(2)说明所有类,所有对象都拥有Object类中的方法
(3)每一个类的构造器,往上追踪都会调用Object类中的无参构造。
super()
(二)从多态
(1)Object的变量(包括形参)可以接收任意类型的对象
(2)Object的数组,可以存储任意类型的对象
数组也是引用数据类型,数组对象也拥有Object类的方法。
Object的方法:
(1)Class getClass():返回此Object的运行时类
Class:类型
(2)String toString():建议所有子类都重写这个方法。
注意:
》》当你打印一个对象时,默认调用这个对象的toString()方法。
》》当用一个对象与String的值进行“+”拼接操作,也会自动调用这个对象的toString()方法。
(3)双胞胎
int hashCode()
返回该对象的哈希码值。支持此方法是为了提高哈希表(例如java.util.Hashtable提供的哈希表)的性能。
前期时:知道它是把对象的信息,通过某种算法来计算出来的一个int值。
设计这个int值,理想状态下,是希望每一个对象都有一个唯一的hash码,但是现实中,可能两个不同的对象他们的hash码是相同的。
》如果两个对象的hash码不一样,这两个对象一定不同。
》如果两个对象的hash码是一样的,这两个对象不一定相同。
》如果两个对象相同,则两者的hash码相同。
boolean equals(Object obj)(String这个类重写了equals方法 )
(1)如果一个类没有重写Object的equals方法,那么效果和“==”是一样,比较的是两个对象的地址。
(2)如果这个类不想用equals来比较地址,而是比较属性的内容,那么需要重写这个方法。
如果不用IDE工具生成equals方法,那么可以自己重写,自己重写时,要遵循几个原则:
》自反性:x.equals(x)自己与自己一定相同
》对称性:x.equals(y)是true,y.equals(x)也是true
》传递性:x.equals(y),y.equals(z)是true,---》x.equals(z)也要为true。
》一致性:如果参与equals比较的属性的值都没有修改,那么前后两次调用应该相同x.equals(y)是true。
》对于任何非空引用值x,x.equals(null)都应返回false
(4)protected void finalize():当垃圾回收器确定不存在堆该对象的更多引用时,由对象的垃圾回收器调用此方法。
比喻为:对象被回收之前,留临终遗言的方法
实际中,这个方法用于彻底释放资源
以上是关于java.lang.Object的主要内容,如果未能解决你的问题,请参考以下文章