常见类---Object类

一.Object类的概述

  1. Object类的概述:类 Object 是类层次结构的根类
    每个类都使用 Object 作为超类(父类).所有对象(包括数组)都实现这个类的方法

二.Object类常见的成员方法

hashCode()

  1. public int hashCode():返回的是该对象的哈希码值,哈希码值是通过哈希表(Hashtable)里面的哈希算法算出来的,可以理解为逻辑地址值(整数)
  2. 举例:
//创建一个学生类
class Student{

}
//测试类
public class Demo1 {
    public static void main(String[] args){
        //创建学生类的对象
        Student s1 = new Student();
        Student s2 = new Student();

        //把第一个对象赋值给第三个对象
        Student s3 = s1;

        //使用hashCode()方法
        System.out.println(s1.hashCode());
        System.out.println(s2.hashCode());
        System.out.println(s3.hashCode());  
    }
}

结果:
366712642
1829164700
366712642

getClass()

  1. public final Class getClass():返回此 Object 的运行时类
    可以通过Class类中的一个方法,获取对象的真实类的全名称public String getName()
  2. 举例:
//创建一个学生类
class Student{

}
//测试类
public class Demo1 {
    public static void main(String[] args){
        //创建学生类的对象
        Student s = new Student();
        Class c = s.getClass();

        //返回该对象的运行时类
        System.out.println(c);

        //获取对象的真实类的全名称
        String a = c.getName();
        System.out.println(a);
    }
}

结果:
class Object类.Student
Object类.Student

toString()

  1. public String toString():返回该对象的字符串表示,它的值等于:getClass().getName() +@ + Integer.toHexString(hashCode())
    Integer.toHexString(hashCode():返回一个整数的16进制数据
    默认情况下,该方法返回值我们来说没有意义,一般重写该方法.
  2. 举例:
//创建一个学生类
class Student{
    private String name;
    private int age;
    public Student() {

    }
    public Student(String name, int age) {
        super();
        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()方法
    public String toString() {
        return "Student [name=" + name + ", age=" + age + "]";
    }
}
//测试类
public class Demo1 {
    public static void main(String[] args){
        //创建学生类的对象
        Student s = new Student("王一",20);

        System.out.println(s.toString());
    }
}

结果:
Student [name=王一, age=20]

equals(Object obj)

  1. public boolean equals(Object obj):判断其他某个对象是否与此对象相等(默认比较地址值),由于比较对象的引用没有意义,一般建议重写该方法.
  2. 举例:
//创建一个学生类
class Student{
    private String name;
    private int age;
    public Student() {

    }
    public Student(String name, int age) {
        super();
        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()方法
    public boolean equals(Object obj) {
        //this:Student当前类对象
        if (this == obj)
            return true;

        ///如果obj对象是空对象,Student类具体对和空对象比较,没有意义
        if (obj == null)
            return false;

        ////getClass().equals(obj.getClass)
        if (!(obj instanceof Student))  
            return false;

        //将父类引用强制转换子类对象
        Student other = (Student) obj;
        if (age != other.age)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
}
//测试类
public class Demo1 {
    public static void main(String[] args){
        //创建学生类的对象
        Student s1 = new Student("王一",20);
        Student s2 = new Student("王二",20);
        Student s3 = new Student("王一",20);

        System.out.println(s1.equals(s2));
        System.out.println(s1.equals(s3));
    }
}

结果:
false
true

obj instanceof Student:该obj的对象是否是Student类的实例化

finalize()

  1. protected void finalize():当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法(主要针对堆内存)

clone()

  1. protected Object clone():创建并返回此对象的一个副本
  2. 自定义类实现克隆步骤:
    • 自定义类实现Cloneable接口
    • 自定义类中重写Object类的clone()方法
    • 重写clone()方法时通过super.clone()调用Object类的clone()方法来得到该对象的副本,并返回该副本
  3. 举例:
//创建一个学生类
class Student implements Cloneable{
    private String name;
    private int age;
    public Student() {

    }
    public Student(String name, int age) {
        super();
        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;
    }

    //重写了clone,但前提是该类必须实现Cloneable接口!
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
//测试类
public class Demo1 {
    public static void main(String[] args) throws CloneNotSupportedException{
        //创建学生类的对象
        Student s1 = new Student("王一",20);
        Object o = s1.clone();

        //将父类的引用强制转换成子类对象
        Student s2 = (Student) o;

        System.out.println(s2.getName()+","+s2.getAge());
    }
}

结果:
王一,20
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值