28 Object类

28 Object类

含义

任何类的直接父类或间接父类

常用操作(被子类重写的方法)

1.toString方法

对于引用数据类型,打印变量名的时候自动调用toString方法,默认打印的是地址,

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
        //默认打印的是地址
}

如果不想打印地址,那么就在相应的子类里面重写该方法

public class Student {
    private  String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }
}
public class TestStudent {
    public static void main(String[] args) {
        Student student=new Student("张三");
        System.out.println(student);
    }
}

没有重写toString方法时,默认打印的是地址


重写toString方法时,打印的是里面的内容

2.equals方法

本质

调用(如果是基本数据类型,则比较内容,不是则默认比较地址,例如bject的equals源码如下:)

 public boolean equals(Object obj) {
        return (this == obj);
}

但String类(final数组)中的equals方法是重写了Object的equals方法,比较是其中每个字符的内容

  public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

3.clone方法(浅拷贝---只会拷贝引用地址)

用途:使一个新对象中有已经建立对象的数据内容(克隆)

在object类中,clone方法的访问权限是protectd

  protected native Object clone() throws CloneNotSupportedException;

子类要想调用clone方法,必须要有以下步骤

1.extends Object

2.且实现Cloneable接口

3.重写(override)clone方法(Alt+Enter快捷键)

4.调用处处理重写clone方法的throws抛出的CloneNotSupportedException异常

public class Student extends Object implements Cloneable{
    private  String name;

    public Student(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class TestStudent {
    public static void main(String[] args) {
        Student student=new Student("张三");
        System.out.println("student学生的信息为: "+student);
        //try...catch用来接收调用clone()方法时,通过throws抛过来的异常
        try {
              Student student1=(Student) student.clone();//想把student对象里面的信息赋值给student1
            System.out.println("student1学生的信息为: "+student1);
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();//打印异常处理的信息
        } finally {

        }
    }
}

posted @ 2020-12-01 19:01  SSS翱翔万里  阅读(172)  评论(2编辑  收藏  举报