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类型可以存储任何对象。
作为参数,可接受任何对象。
作为返回值,可返回任何对象。
常用方法
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("-------------");//手动GCSystem.gc();}
}