Object类

92 阅读3分钟

定义

  1. 超类、基类,所有类的直接或者间接父类,位于继承树的最顶层
  2. 任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承
  3. Object类中所定义的方法,是所有对象都具备的方法。
  4. Object类型可以存储任何对象。
    • 作为参数,可以接受任何对象。
    • 作为返回值,可以返回任何对象。

Object类中的方法

  1. getClass():返回引用中存储的实际对象类型,通常用于判断两个引用中实际存储对象类型是否一致。
package com.Class.objClass;

public class getClassMethod {
    private String name;
    private int age;

    public getClassMethod(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) {
        getClassMethod g1 = new getClassMethod("111",20);
        getClassMethod g2 = new getClassMethod("222",30);

        if (g1.getClass()==g2.getClass()){
            System.out.println("g1"+"和"+"g2"+"的类型相同");
        }
    }
    //最后结果:输出  g1和g2类型相同
}
  1. hasCode():返回该对象的哈希码值,一般情况下相同对象返回相同的哈希码。
package com.Class.objClass;

public class hasCodeMethod {
    private String name;
    private int age;

    public hasCodeMethod(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) {
        hasCodeMethod h1 = new hasCodeMethod("111",20);
        hasCodeMethod h2 = new hasCodeMethod("222",25);

        System.out.println(h1.hashCode());//460141958
        System.out.println(h2.hashCode());//1163157884	
    }
}
  1. toString():返回对象的字符串表现形式
package com.Class.objClass;

public class toStringMethod {
    private String name;
    private int age;

    public toStringMethod(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //重写toString方法
    @Override
    public String toString() {
        return "toStringMethod{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }



    public static void main(String[] args) {

        toStringMethod t1 = new toStringMethod("111",20);
        toStringMethod t2 = new toStringMethod("222",21);

        System.out.println(t1.toString());//toStringMethod{name='111', age=20}
        System.out.println(t2.toString());//toStringMethod{name='222', age=21}
	//如果没有重写toString方法
        System.out.println(t1.toString());//com.Class.objClass.toStringMethod@1b6d3586
        System.out.println(t2.toString());//com.Class.objClass.toStringMethod@4554617c
    }
}

4.equals():默认实现为(this==obj),比较两个对象地址是否相同

package com.Class.objClass;

public class equalsMethod {
    private String name;
    private int age;

    public equalsMethod(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    //重写equals方法
    @Override
    public boolean equals(Object obj) {
        //1.判断两个对象是否为同一引用
        if (this==obj){
            return true;
        }
        //2.判断 obj是否为空
        if (obj == null){
            return false;
        }
        //3.判断是否为同一个类型
        if (obj instanceof equalsMethod){
            //4.强制类型转换
            equalsMethod e = (equalsMethod) obj;
            //5.比较属性
            if (this.name.equals(((equalsMethod) obj).name) && this.age==((equalsMethod) obj).age){
                return true;
            }
        }

        return false;
    }

    public static void main(String[] args) {
        equalsMethod e1 = new equalsMethod("111",21);
        equalsMethod e2 = new equalsMethod("111",21);

        System.out.println(e1.equals(e2));//true
		//如果没有重写equals方法
        System.out.println(e1.equals(e2));//false
    }
}
  1. finalize():回收垃圾,手动回收,程序员正常很少使用
package com.Class.objClass;

public class finalizeMethod {
    private String name;
    private int age;

    public finalizeMethod(String name,int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }


    //重写finalize方法
    @Override
    protected void finalize() throws Throwable {
        System.out.println(this.name+"被回收了");
    }

    public static void main(String[] args) {

        //不是垃圾
        finalizeMethod f1 = new finalizeMethod("aa", 11);
        finalizeMethod f2 = new finalizeMethod("bb", 11);
        finalizeMethod f3 = new finalizeMethod("cc", 11);
        finalizeMethod f4 = new finalizeMethod("dd", 11);
        finalizeMethod f5 = new finalizeMethod("ee", 11);
        finalizeMethod f6 = new finalizeMethod("ff", 11);


        //在Java中,如果对象实体没有引用指向的话,存储该实体的内存便成为垃圾。
        //是垃圾
        new finalizeMethod("aaa",11);
        new finalizeMethod("bbb",11);
        new finalizeMethod("ccc",11);
        new finalizeMethod("ddd",11);
        new finalizeMethod("eee",11);


        System.gc();
        System.out.println("垃圾被回收了");

    }
}

输出结果: