标题:Object 类
介绍:Object类是jdk类库的根类.任何一个类默认继承Object.就算没有直接继承,最终也会间接继承.
接下来我们需要研究下Object这个类.
一. toString () 方法
语法结构:public String toString()
源代码:
默认实现方法是:类名@对象内存地址转换为十六进制的形式
sun公司设计toString () 方法的目的是:通过调用这个方法可以将一个java对象转成成字符串的表示形式
建议所有子类重写此方法,以下是测试结果,没有重写toString () 方法
重写此方法:idea上操作是 alt+f12 点击 @Override
注意:输出引用时会自动调用toString方法
二. equals() 方法
语法结构:public boolean equals (Object obj)
源码:
sun公司写的equals方法有时并不能满足我想要的要求,所大部分情况下需要我们自己重写.
这里还是那上面那个MyTime类来举例子.
重写之前:我创建了两个内容完全一样的对象(但是地址不一样),原来的equals方法是用 " == “来进行判断,结果显而易见是false(因为” == "比较的是两个对象的地址)
重写之后:我按照自己的判定条件 "年月日"相同则两对象相同(你也可以按照你的判定标准来定义两个对象相等的条件).
**第二个if条件和下面那行代码可能没有看懂我稍微解释下😗*我们要比较两个对象的内容相等首先要得到参数 o 的值,但Object类里没有我定义的 "year month day "成员变量,所以首先得进行向下转型(如果这个也不知道的话建议自己补补),如果两对象不是同一类型直接返回false(没有可比性).
总结:
- java中基本数据类型比较用 “==”
- java中所有的引用数据类型统一使用equals方法来进行比较
三.finalize方法
源码:
这个方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法.
执行时机:当一个对象即将被垃圾回收器回收的时候,垃圾回收器负责调用finalize方法
finalize方法实际上上sun公司为java程序员准备额一个时机,垃圾销毁时机.如果希望在对象销毁时执行一段代码的话,之端代码要写到finalize方法中(自己重写这个方法)
类比静态代码块:
static {
…
}
静态代码在类加载时刻执行,并且只执行一次,这是sun公司为程序员准备的类加载时机