一篇文章带你彻底了解Java Object类

一篇文章带你彻底了解Java Object类

​ 在Java的世界中,有一个神秘的存在,它是所有类的根基,无所不在,无所不知。它就是——Object类。本文将带你深入探索Java中这个神秘之源,解密Object类的奥秘,让你更好地理解和使用Java的核心概念。

基本概念:

Object类是Java中所有类的超类(父类)。无论你创建了哪个类,你都在某种程度上间接地继承了Object类的属性和方法。它是Java中的根基,一切皆对象,一切皆从Object而来。

子类可以使用 Object 的所有方法

img

Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类,那么它就会自动继承 Object,成为 Object 的子类。


Object 类可以显式继承,也可以隐式继承,以下两种方式是一样的:
显式继承:
public class Runoob extends Object{

}
隐式继承:
public class Runoob {

}

类的构造函数

序号构造方法 & 描述
1**Object()**构造一个新对象。

类的方法

序号方法 & 描述
1protected Object clone()创建并返回一个对象的拷贝
2boolean equals(Object obj)比较两个对象是否相等
3protected void finalize()当 GC (垃圾回收器)确定不存在对该对象的有更多引用时,由对象的垃圾回收器调用此方法。
4Class getClass()获取对象的运行时对象的类
5int hashCode()获取对象的 hash 值
6void notify()唤醒在该对象上等待的某个线程
7void notifyAll()唤醒在该对象上等待的所有线程
8String toString()返回对象的字符串表示形式
9void wait()让当前线程进入等待状态。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
10void wait(long timeout)让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过参数设置的timeout超时时间。
11void wait(long timeout, int nanos)与 wait(long timeout) 方法类似,多了一个 nanos 参数,这个参数表示额外时间(以纳秒为单位,范围是 0-999999)。 所以超时的时间还需要加上 nanos 纳秒。。

Object类的重要方法:equals和hashCode

Object类提供了一些重要的方法,其中最常用的是equals()hashCode()方法。equals()方法用于比较两个对象是否相等,而hashCode()方法返回对象的哈希码。这两个方法在Java的集合框架中扮演着重要角色,影响着对象的相等性判断和存储方式。

public class ObjectExample {

    public static void main(String[] args) {
        String str1 = new String("Hello");
        String str2 = new String("Hello");

        System.out.println(str1.equals(str2)); // 输出 true

        System.out.println(str1.hashCode()); // 输出哈希码
        System.out.println(str2.hashCode());
    }
}

输出结果:

true
69609650
69609650

上面的示例演示了如何使用equals()方法比较两个对象的相等性,并使用hashCode()方法获取对象的哈希码。

Object类的常用方法:toString和getClass

除了equals()hashCode()方法外,Object类还提供了其他常用的方法。其中,toString()方法返回对象的字符串表示,通常用于调试和日志记录。getClass()方法返回对象的类类型。

public class ObjectExample {

    public static void main(String[] args) {
        String str = "Hello, Object!";
        System.out.println(str.toString()); // 输出字符串表示

        System.out.println(str.getClass()); // 输出类类型
    }
}

输出结果:

Hello, Object!
class java.lang.String

上述示例演示了如何使用toString()方法获取对象的字符串表示,以及如何使用getClass()方法获取对象的类类型。

自定义类与Object类

每个Java类都直接或间接地继承了Object类。如果你没有明确指定一个类的父类,那么它默认继承自Object类。这意味着,你可以在自定义的类中使用Object类的方法,或者覆盖这些方法以满足特定需求。

public class Person {
    private String name;

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

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

    public static void main(String[] args) {
        Person person = new Person("Alice");
        System.out.println(person); // 输出对象的字符串表示
    }
}

输出结果:

Person{name='Alice'}

在上述示例中,我们自定义了一个Person类,并覆盖了Object类的toString()方法,以自定义的方式返回对象的字符串表示。

Object类的多态性

Object类的存在赋予了Java类的多态性。由于每个类都继承自Object类,所以你可以将任何类的对象视为Object类型,从而实现通用的操作和存储。

public class ObjectPolymorphism {

    public static void printClassName(Object obj) {
        System.out.println("对象的类名:" + obj.getClass());
    }

    public static void main(String[] args) {
        String str = "Hello, Object!";
        printClassName(str);

        Integer num = 42;
        printClassName(num);
    }
}

输出结果:

对象的类名:class java.lang.String
对象的类名:class java.lang.Integer

上述示例展示了Object类的多态性,通过传递不同类型的对象给通用方法,实现了通用的操作。

总结

Object类是Java中的根基,它为所有类提供了共同的属性和方法。通过掌握equals()hashCode()toString()等方法,你能够更好地理解和操作对象。Object类的存在让Java的世界变得更加统一、灵活,为你的编程之旅赋予了更多可能性。

作者:Stevedash

发表于:2023年8月9日00点31分

注:本文内容基于个人对Java Object 类 | 菜鸟教程 (runoob.com)学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stevedash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值