第十六节(Object类(toString() 、finalize、equals方法)
Object 类类 a) Object 类是所有 Java 类的根基类 b) 如果在类的声明中未使用 extends 关键字指明其基类,则默认基类为 Object 类 toString() 返回该对象的字符串表示。 通常 toString 方法会返回一个 “以文本方式表示” 此对象的 字符串,Object 类的 toString 方法返回一个字符串,该字符串由类名加标记 @和此对象哈 希码的无符号十六进制表示组成 /* 关于Object 中的 toString 方法: sun在Object类中设计toString方法的目的:返回java对象的字符串的表示形式 在现实开发中,Object里边的toString 方法已经不够用了 Object的toString方法实现的结果 不满意 Object中的toString方法就是要重写的 sun是这样子实现toString方法的 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } Object中的toString方法返回: 类名@Java对象的内存地址经过哈希算法得出的int类型值 再转换成十六进制 这个输出结果可以等同看做Java对象在堆中的内存地址 */ public class ObjectTest01{ public static void main(String[] args){ // 创建一个Object类型的对象 Object o1= new Object(); System.out.println(o1); // java.lang.Object@6af62373 // 调用一个toString方法 String oStr = o1.toString(); System.out.println(oStr); // java.lang.Object@6af62373 // 创建一个Person类型的对象 Person p1 = new Person("Ming",18); // 调用toString方法 String pStr = p1.toString(); System.out.println("p1 = "+p1.toString()); } } class Person{ String name; int age; // Person(){} 默认的空构造 Person(String name,int age){ this.name = name; this.age = age; } // 重写toString方法 // 根据项目的需求而定 // 需要显示格式:Person[name=Mingage=18] public String toString(){ return "Person[name="+name+",age="+age+"]"; } }
finalize
垃圾回收器(Garbage Collection) ,也叫 GC,垃圾回收器主要有以下特点:
� 当对象不再被程序使用时,垃圾回收器将会将其回收
� 垃圾回收是在后台运行的, 我们无法命令垃圾回收器马上回收资源, 但是我们可以
告诉他,尽快回收资源(System.gc 和 Runtime.getRuntime().gc())
� 垃圾回收器在回收某个对象的时候,首先会调用该对象的 finalize 方法
� GC 主要针对堆内存
� 单例模式的缺点
/* 关于Object中的finalize方法 finalize 方法什么时候调用 1. finalize 方法每一个Java对象都有 2. finalize 方法不需要程序员去调用,有系统自动调用 3. Java对象如果没有更多的引用指向它,则该Java对象称为 垃圾数据 等待垃圾回收器回收,垃圾回收器在回收这个Java对象之前 会自动调用该对象的 finalize方法 finalize 方法是该对象马上就要被回收了,例如:需要释放资源,则可以在该方法中释放 */ public class FinalizeTest01{ public static void main(String[] args){ People p = new People(); // 没有引用再指向他,等待回收 p = null; // 开发者只能”建议“垃圾回收器回收垃圾 System.gc(); } } class People{ public void finalize() throws Throwable{ System.out.println(this+"马上就要被回收了 !"); // 让引用再次重新指向该对象,该对象不是垃圾数据,不会被垃圾回收器回收 ! People p = this; } }
/* 关于Object中的equals方法 public boolean equals(Object obj){ return (this == obj); } Object中的equals方法比较的是两个引用的内存地址 Java对象中的equals方法的设计目的: 判断两个对象是否一样 */ public class EqualsTest{ public static void main(String[] args){ Object o1 = new Object(); Object o2 = new Object(); boolean b1 = o1.equals(o2); System.out.println(b1); } }