Java常用API_Object——常用方法和代码演示

本文详细介绍了Java中Object类的基础知识,包括其无参构造,以及常用的方法toString(),equals(),和clone()的功能、用法和在子类中的重写示例。
摘要由CSDN通过智能技术生成

        Object类是java中的顶级父类,所有的类都直接或间接的继承Object类,Object类中的方法可以被所有子类访问,所以学习Object类和其中的方法还是很有必要的。

        因为Object类中没有成员变量,所以它只定义了无参构造。

接下来开始介绍常用方法及代码演示

1.toString:

返回对象的字符串表示形式(System.out.println也调用这个方法)

代码演示:
public class Test {
    public static void main(String[] args) {
        //toString()   返回对象的字符串表示形式
        Object o = new Object();
        String str = o.toString();
        System.out.println(str);
    }
}

输出结果为对象o的包名和地址值

扩展:

        这个方法更常用的情况是在子类中改写toString方法,使子类对象调用这个方法后可以输出属性值

        我们先定义子类Student并改写toString方法

Student类代码如下:
public class Student {
    private String name;
    private int age;


    public Student() {
    }

    public Student(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 String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}
编写测试类Test调用重写后的toString方法,代码如下:
public class Test {
    public static void main(String[] args) {
        Student stu1 = new Student("xiaowang", 21);
        Student stu2 = new Student("xiaozhang", 22);

        System.out.println(stu1.toString());
        System.out.println(stu2.toString());
    }
}
运行结果:

2.equals:

比较两个对象是否相等(Object类中比较的是两者的地址值),它返回一个布尔类型的数据

代码演示:
public class Test {
    public static void main(String[] args) {
        Student stu1 = new Student("xiaowang", 21);
        Student stu2 = new Student("xiaozhang", 22);

        boolean result = stu1.equals(stu2);
        System.out.println(result);
    }
}
运行结果:

扩展:
        这个方法更常用的情况是在子类中改写equals方法,比较子类对象中的属性值,并返回布尔类型true或false。

我们在Student子类中改写equal方法

点进Student类中,摁快捷键 Alt + insert 或 Alt + Fn + insert ,弹出这个窗口

选择第五个equals()和hashCode(),然后一直点确定即可,我们不用管hashCode(),代码中会多一段改写后的equals方法如下:

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age && Objects.equals(name, student.name);
    }

我们就可以用这个方法比较对象的属性值是否相等了

接下来编写测试类Test验证一下:
代码:
public class Test {
    public static void main(String[] args) {
        //属性值相等情况
        Student stu1 = new Student("xiaowang", 21);
        Student stu2 = new Student("xiaowang", 21);

        boolean result1 = stu1.equals(stu2);
        System.out.println("第一组结果:" + result1);

        //属性值不相等情况
        Student stu3 = new Student("xiaohan", 21);
        Student stu4 = new Student("xiaoyang", 22);

        boolean result2 = stu3.equals(stu4);
        System.out.println("第二组结果:" + result2);
    }
}
运行结果:

3.clone:

方法会帮我们创建一个对象,并帮我们把原对象的数据拷贝过去

代码演示:

先修改一下上文中的Student类的内容,添加了一个数组成员变量,修改了toString来更完善的展示信息便于我们演示,不可少的步骤是:实现接口Cloneable来确保可以正常拷贝,并且因为Object类中的clone方法是用protected修饰的,我们还需要重写clone方法。

Student类代码:
public class Student implements Cloneable{
    private String name;
    private int age;
    private int[] arr;


    public Student() {
    }

    public Student(String name, int age, int[] arr) {
        this.name = name;
        this.age = age;
        this.arr = arr;
    }

    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 int[] getArr() {
        return arr;
    }

    public void setArr(int[] arr) {
        this.arr = arr;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + ", arr = " + arrTOString() + "}";
    }

    //将数组转换成字符串形式
    public String arrTOString() {
        StringJoiner sj = new StringJoiner(", ", "[", "]");
        for (int i = 0; i < arr.length; i++) {
            sj.add(arr[i] + "");
        }

        return sj.toString();
    }

    //由于Object类中clone方法使用protected修饰的,所以我们还要重写clone方法
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
测试类代码Test:

注:使用clone方法创建的对象默认为Object类,这里我把它强转成了Student类

public class Test {
    public static void main(String[] args) throws CloneNotSupportedException {
        Student s1 = new Student("1", 21, new int[]{1, 2, 3});
        Student s2 = (Student) s1.clone();
        //输出s1和s2的信息
        System.out.println(s1.toString());
        System.out.println(s2.toString());
    }
}
运行结果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值