Object类

Object类

1、Object类介绍

在Java中,所有的类都直接的或间接的继承了Object类,Object类是所有类型的父类,是类结构中的根。全限定名为:java.lang.Object。如果一个类没有明确指定继承哪个类,那么它就默认的继承Object类。下面是jdk的api文档中的定义:
在这里插入图片描述
Object类中提供的所有方法如下:
在这里插入图片描述
如果不算方法重载的话,一共9种:

  • clone():创建并返回此对象的副本。
  • equals(Object obj) :指示一些其他对象是否等于此。
  • finalize() :当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。
  • getClass() :返回此 Object的运行时类。
  • hashCode() :返回对象的哈希码值。
  • notify() :唤醒正在等待对象监视器的单个线程。
  • notifyAll() :唤醒正在等待对象监视器的所有线程。
  • toString() :返回对象的字符串表示形式。
  • wait重载的3种:当前线程等待。

下面对常用的几种方法进行说明:getClass方法、hashCode方法、equals方法、toString方法。

2、getClass方法

此方法返回对象执行时的Class实例,此实例调用getName方法可以获取类的名称。以下是源码:
在这里插入图片描述
api文档说明如下:
在这里插入图片描述
以下进行测试,先创建一个Person类:

public class Person {

    private String name;

    private String sex;

    private int age;

    public Person() {

    }

    public Person(String name, String sex, int age) {
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

测试方法:

    public static void main(String[] args) {

        Person per = new Person("云过梦无痕", "男", 25);
        System.out.println(per.getClass());
        System.out.println(per.getClass().getName());
    }

控制台:
在这里插入图片描述
记住一点即可,getClass方法返回的是运行时类,然后通过getName方法可以获取完全限定类名。

3、hashCode方法

此方法返回对象的哈希码值。源码如下:
在这里插入图片描述
api文档说明:
在这里插入图片描述
测试:

    public static void main(String[] args) {

        Person per = new Person("云过梦无痕", "男", 25);
        Person per2 = new Person("老云", "男", 25);
        Person per3 = per;
        System.out.println(per.hashCode());
        System.out.println(per2.hashCode());
        System.out.println(per3.hashCode());
    }

执行,控制台:
在这里插入图片描述
不难发现,hashCode方法是与对象的引用地址相关的,如果是new出来的,那么它们的哈希码值一定不同。

4、equals方法

比较两个对象是否相等,比较的是对象的内容,注意区分equals和==。源码如下:
在这里插入图片描述
api文档:
在这里插入图片描述
测试:

    public static void main(String[] args) {

        Person per = new Person("云过梦无痕", "男", 25);
        Person per2 = new Person("老云", "男", 25);
        Person per3 = per;
        System.out.println(per.equals(per2));
        System.out.println(per == per2);
        System.out.println(per.equals(per3));
        System.out.println(per == per3);
        String s1 = "yanchengzhi";
        String s2 = "yanchengzhi";
        System.out.println(s1.equals(s2));
        System.out.println(s1 == s2);
    }

执行,控制台:
在这里插入图片描述
注意区分equals与==的区别,equals是比较对象内容是否相同, == 是比较引用地址是否相同,String类型的话涉及到了常量池,这里略过。

5、toString方法

此方法会将一个对象返回为字符串形式,通常会重写toString方法。源码如下:
在这里插入图片描述
如果不重写此方法,那么返回的是:

对象的全限定名 + @ + 此对象的哈希码值的十六进制表示

api文档:
在这里插入图片描述

下面进行测试一下:

    public static void main(String[] args) {

        Person per = new Person("云过梦无痕", "男", 25);
        System.out.println(per.toString());
    }

执行,控制台:
在这里插入图片描述
然后我在Person类中覆盖toString方法:

    @Override
    public String toString() {
        return "【name:" + this.getName() + "," + "sex:" + this.getSex()
               + "," + "age:" + this.getAge() + "】";
    }

再执行,控制台:
在这里插入图片描述
api文档给我们的建议是:建议所有子类覆盖toString方法。

6、总结

Object中的有些方法是不能够重写的,方法前面加了final修饰符,而有些方法却可以覆盖,这也是出于安全考虑吧,注意即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值