JavaSE基础(24) Object类

概述

所有的类,都是以继承结构存在的。如果没有显示的父类,默认继承Object类。

class Person{}

相当于

        class Person extends Object{}

        class Student extends Person{}//学生类继承Person类,

 class Animal{}

相当于

        class Animal extends Object{}

        class Cat extends Animal{}

超类、基类,所有类的直接或间接父类,位于继承树的最顶层。

任何类,如没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。

Object类中所定义的方法,是所有对象都具备的方法。

Object类型可以存储任何对象。

作为参数,可接受任何对象。

作为返回值,可返回任何对象。

常用方法

getClass()

public final Class getClass(){...}
返回引用中存储的实际对象类型。
应用:通常用于判断两个引用中实际存储对象类型是否一致。

hashCode()方法

public int hashCode(){...}
返回该对象的十进制的哈希码值。
哈希算法根据对象的地址或字符串或数字计算出来的int类型的数值。

toString()方法

public String toString(){...}
返回该对象的字符串表示(表现形式)。
可以根据程序需求覆盖该方法,如:展示对象各个属性值。

equals()方法

        public boolean equals(Object obj){...}

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

        可进行覆盖,比较两个对象的内容是否相同。

equals重写步骤:

        比较两个引用是否指向同一个对象。

        判断obj是否为null。

        判断两个引用指向的实际对象类型是否一致。

        强制类型转换。

        依次比较各个属性值是否相同。

示例:

public class Cat {
    private String name;
    private int 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) {//在这里的时候,会发生向上转型
//       if(this==obj){//step1:如果两个内存地址一样,那么我们认为内容是一样的。内存地址一样,
//           return true;
//       }
//       if(obj instanceof Cat){//step2:先判断obj是否是Cat类型,为向下转型准备
//           Cat cat = (Cat)obj;//step3:强制转换,向下转型,
//           if(this.getAge()==cat.getAge()&&this.getName().equals(cat.getName())){
//               return true;
//           }
//       }
//       return false;
//    }

//    @Override
//    public String toString() {
//        return "Cat{" +"name='" + name + '\'' +", age=" + age + '}';
//    }
}
public static void main(String[] args) {
    Cat cat = new Cat();
    cat.setAge(20);
    cat.setName("机器猫");
    int hashCode = cat.hashCode();
    System.out.println("hashCode:" + hashCode);

    Cat cat2 = new Cat();
    cat2.setAge(20);
    cat2.setName("机器猫");
    int hashCode2 = cat2.hashCode();
    System.out.println("hashCode2:"+hashCode2);
    Class c1 = cat2.getClass();//获取对象运行时所属的类
    System.out.println(c1);//

    //toString()方法
    System.out.println(cat.toString());
    System.out.println(cat2.toString());//调用默认的toString方法

    int i = 12;
    System.out.println(Integer.toBinaryString(i));//10进制转二进制
    System.out.println(Integer.toOctalString(i));//10进制转8进制
    System.out.println(Integer.toHexString(i));//10进制转16进制
}

finalize()方法

当对象被判定为垃圾对象时,由JVM自动调用此方法,用以标记垃圾对象,进入回收队列。

垃圾对象:没有有效引用指向此对象时,为垃圾对象。

垃圾回收: 由GC销毁垃圾对象,释放数据存储空间。

自动回收机制:JVM的内存耗尽,一次性回收所有垃圾对象。

手动回收机制:使用System.gc(); 通知JVM执行垃圾回收。

示例:

public class TestFinalize {
    public static void main(String[] args) {

        new Student();
        new Student();
        new Student();

        System.out.println("-------------");

        //手动GC
        System.gc();

    }
}

你可能感兴趣的:(JavaSE基础,java,开发语言)