第十六节(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);
    }
    

}
原文地址:https://www.cnblogs.com/Deng1185246160/p/4230545.html