Class Object
- to String()方法
- to String()方法源代码
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); //类名@对象的内存地址转换为十六进制的形式 }
- to String()方法的设计目的:通过调用这个方法可以将一个“Java对象”转换为“字符串表示形式 ”
- 建议所有的子类都去重写to String()方法,to String()方法应该是一个简洁的、详实的、易阅读的
- System.out.println(引用类型),这里会自动调用“引用”的toString()方法
public class Test01 { public static void main(String[] args) { System.out.println(new MyTime(2021,04,02).toString()); System.out.println(new MyTime(2021,04,02)); // 注意:输出引用的时候,会自动调用该引用的toString()方法。 } } class MyTime /*默认继承Object*/ { private int year; private int month; private int day; //老祖宗的toString()方法默认为类名@对象的内存地址转换为十六进制的形式 //建议每个子类都重写toString()方法,向简洁的、详实的、易阅读的方向发展 public String toString() { return year + "/" + month + "/" + day; } //构造方法 public MyTime() { } public MyTime(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } //getter and setter 方法 }
- to String()方法源代码
- equals 方法
- to String()方法源代码
public boolean equals(Object obj) { return (this == obj) ; } //以上这个方法是Object类的默认实现,==比较的是两个对象的内存地址是否相等,并不能比较内容是否相等
- equals方法的设计目的:通过equals方法来判断两个对象是否相等
- 建议所有的子类都去重写 equals方法,因Object中的equals方法比较的是两个对象的内存地址,我们应该比较内容,所以需要重写
- java中基本数据类型比较是否相等,使用 == 比较是否相等
java中引用数据类型比较是否相等,使用 equals 方法比较是否相等
public class Test01 { public static void main(String[] args) { //toString测试 System.out.println(new MyTime1(2001, 1, 1 )); //equals测试 MyTime1 time1 = new MyTime1(1997, 4, 2); MyTime1 time2 = new MyTime1(1997, 4, 2); System.out.println(time1 == time2); System.out.println(time1.equals(time2)); } } class MyTime1 /*默认继承Object*/{ private int year; private int month; private int day; //重写equals方法 public boolean equals(Object obj) { // 空引用和非MyTime1类型,不可能相等,直接排除 if (obj == null || !(obj instanceof MyTime1)) { return false; } // 当类型一样时,判断内存地址是否相等,相等则为同一个对象,内容相等 if (this == obj) { return true; } //判断内容是否相等 return this.year == ((MyTime1) obj).year && this.month == ((MyTime1) obj).month && this.day == ((MyTime1) obj).day; } //重写toString()方法 public String toString() { return year + "/" + month + "/" + day; } //构造方法 public MyTime1() { } public MyTime1(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } //getter and setter 方法
- to String()方法源代码
- finalize()方法
- finalize()方法源代码
protected void finalize() throws Throwable { } //GC:负责调用finalize()方法。 //finalize()方法只有一个方法体,里面没有代码,而且这个方法是protected修饰的。 //这个方法不需要程序员手动调用,JVM的垃圾回收器负责调用这个方法,finalize()只需重写,重写完将来自动会有程序来调用
- finalize()方法的执行时机:当一个java对象即将被垃圾回收器回收时,垃圾回收器负责调用finalize()方法
- finalize()方法实际上是SUN公司为java程序员准备的一个时机,垃圾销毁时机。
如果希望在对象销毁时机执行一段代码的话,这段代码要写到finalize()方法当中。 - 静态代码块在类加载时刻执行,并且只执行一次。这是一个SUN准备的类加载时机。
finalize()方法同样也是SUN为程序员准备的一个时机。这个时机是垃圾回收时机。 - 提示:
——java中垃圾回收器不轻易启动。垃圾太少,或者时间没到,种种条件下,可能不启动(随缘启动)
- finalize()方法源代码
- hashCode()方法
- hashCode方法源代码
public native int hashCode(); //这个方法不是抽象方法,带有native关键字,底层调用C++程序
- hashCode()方法返回的是哈希码:
——实际上就是一个java对象的内存地址,经过哈希算法,得出的一个值
——所以hashCode()方法的执行结果可以等同看做一个java对象的内存地址
- hashCode方法源代码
- clone方法
- clone方法源代码
protected Object clone() throws CloneNotSupportedException //创建并返回此对象的副本
- Java对象克隆——浅克隆和深克隆的区别
- clone方法源代码