java中所有类的父类Object类介绍

知识点-- Object类概述

目标:

  • 了解Object的概述和常用方法

路径:

  • Object类的概述
  • Object类中常用的2个方法

讲解:

Object类的概述
  • java.lang.Object类是Java语言中的根类,即所有类的父类。

    如果一个类没有特别指定父类, 那么默认则继承自Object类。例如:

public class Fu /*extends Object*/ {
  	// ...
}
public class Zi extends Fu{
    
}
  • 根据JDK源代码及Object类的API文档,Object类当中包含的方法有11个。今天我们主要学习其中的2个:

  • public String toString():返回该对象的字符串表示。

  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。

小结

  • Object类是java中的根类,即所有类的父类
  • java中所有的类都是直接或者间接继承Object类,也就意味着,java中所有的类都拥有Object类中的那11个方法

知识点-- toString方法

目标:

  • 能够正确使用toString方法

路径:

  • toString方法的概述
  • 重写toString方法

讲解:

toString方法的概述
  • public String toString():返回该对象的字符串表示,其实该字符串内容就是:对象的类型名+@+内存地址值。

由于toString方法返回的结果是内存地址,而在开发中,经常需要按照对象的属性得到相应的字符串表现形式,因此也需要重写它。

重写toString方法

如果不希望使用toString方法的默认行为,则可以对它进行覆盖重写。例如自定义的Person类:

public class Person {
    public String name;
    public int age;

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

    public Person() {
    }

   // 快捷键:alt+insert===>toString
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

在IntelliJ IDEA中,可以点击Code菜单中的Generate...,也可以使用快捷键alt+insert,点击toString()选项。选择需要包含的成员变量并确定。

小贴士: 在我们直接使用输出语句输出对象名的时候,其实通过该对象调用了其toString()方法。

小结

  • toString方法默认返回的字符串内容格式: 对象的类型+@+十六进制数的地址值
  • 打印对象的时候,其实就是打印该对象调用toString方法返回的字符串内容
  • 如果打印对象的时候不希望打印的是地址值的形式,那么就可以去重写toString方法,指定返回的字符串内容格式 ---->一般开发中,重写toString方法—alt+insert—>toString() 回车

知识点-- equals方法

目标:

  • 掌握equals方法的使用

路径:

  • equals方法的概述
  • equals方法的使用

讲解:

equals方法的概述
  • public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
equals方法的使用
默认地址比较

Object类的equals()方法默是==比较,也就是比较2个对象的地址值,对于我们来说没有用

对象内容比较

如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。例如:

public class Person {
    public String name;
    public int age;

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

   // 快捷键:alt+insert===>toString
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    /*@Override
    public boolean equals(Object obj) {
        // 自定义比较规则
        Person p = (Person)obj;
        return this.age == p.age && this.name.equals(p.name);
    }*/

    // 快捷键:alt+insert-->选择equals and hashCode

    @Override
    public boolean equals(Object o) {
        // 如果2个对象的地址值相同,就直接返回true,结束方法
        if (this == o) return true;
        // 如果参数为null或者2个对象所属的类不相同,就直接返回false,结束方法
        if (o == null || getClass() != o.getClass()) return false;
        // 来到这里,说明要比较的2个对象,地址值一定不同,并且都是Person类型的对象
        Person person = (Person) o;
        // 比较所有属性是否完全相同
        return age == person.age &&
                Objects.equals(name, person.name);
    }

}

public class Test {
    public static void main(String[] args) {
        /*
            Object类的equals方法:
                public boolean equals(Object obj):指示其他某个对象是否与此对象“相等”。
                默认地址比较
                    Object类的equals()方法默是==比较,也就是比较2个对象的地址值,对于我们来说没有用

                对象内容比较
                    如果希望进行对象的内容比较,即所有或指定的部分成员变量相同就判定两个对象相同,则可以覆盖重写equals方法。
         */
        // 创建Person对象
        Person p1 = new Person("张三",18);
        Person p2 = new Person("李四",19);
        Person p3 = new Person("张三",18);
        // ==比较
        System.out.println(p1 == p2);// false
        System.out.println(p1 == p3);// false
        // 没有重写equals方法,使用的就是Object类的equals方法
        // equals方法比较
        //System.out.println(p1.equals(p2));// false  相当于p1==p2
        //System.out.println(p1.equals(p3));// false  相当于p1==p3

        // 重写equals方法,使用的就是Person类重写的equals方法
        System.out.println(p1.equals(p2));// false
        System.out.println(p1.equals(p3));// true

    }
}

这段代码充分考虑了对象为空、类型一致等问题,但方法内容并不唯一。大多数IDE都可以自动生成equals方法的代码内容。在IntelliJ IDEA中,可以使用Code菜单中的Generate…选项,也可以使用快捷键alt+insert,并选择equals() and hashCode()进行自动代码生成。

tips:Object类当中的hashCode等其他方法,今后学习。

小结

  • 概述: equals方法可以判断两个对象是否相同
1.Object类的equals方法默认比较的是2个对象的地址值是否相同  ==一样的效果
2.如果在开发中,希望调用equals方法比较的不是2个对象的地址值,那么就需要重写equals方法,指定比较规则
  一般开发中,重写equals方法,使用idea的快捷键alt+insert--->equals and hashCode 回车

知识点-- Objects类

目标:

  • Objects类

路径:

  • Objects类的概述
  • Objects类中的equals方法的使用

讲解:

在刚才IDEA自动重写equals代码中,使用到了java.util.Objects类,那么这个类是什么呢?

JDK7添加了一个Objects工具类,它提供了一些方法来操作对象,它由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashCode、返回对象的字符串表示形式、比较两个对象。

在比较两个对象的时候,Object的equals方法容易抛出空指针异常,而Objects类中的equals方法就优化了这个问题。方法如下:

  • public static boolean equals(Object a, Object b):判断两个对象是否相等。

我们可以查看一下源码,学习一下:

public static boolean equals(Object a, Object b) {  
    return (a == b) || (a != null && a.equals(b));  
}

知识点-- native方法

目标

  • 理解什么是native方法,以及native方法的作用

路径

  • native本地方法的概述

讲解

在Object类的源码中定义了 native 修饰的方法, native 修饰的方法称为本地方法。这种方法是没有方法体的,我们查看不了它的实现,所以大家不需要关心该方法如何实现的

  • 当我们需要访问C或C++的代码时,或者访问操作系统的底层类库时,可以使用本地方法实现。

    也就意味着Java可以和其它的编程语言进行交互。

  • 本地方法的作用: 就是当Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。

Object类源码(部分):

package java.lang;
/**
 * Class {@code Object} is the root of the class hierarchy.
 * Every class has {@code Object} as a superclass. All objects,
 * including arrays, implement the methods of this class.
 *
 * @author  unascribed
 * @see     java.lang.Class
 * @since   JDK1.0
 */
public class Object {
	//本地方法
    private static native void registerNatives();
    //静态代码块
    static {
        registerNatives();
    }
    ......
    ......
}
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Java ,所有父类都是 java.lang.Object 。 在 Java Object 是所有的根,它是所有的祖先,并且是所有父类。所有其他都是从 Object 派生的。 举个例子,如果你定义了一个,例如 MyClass,那么 MyClass父类就是 Object,并且 MyClass 就是 Object 的子。这意味着 MyClass 继承Object 的所有属性和方法。 例如,Object 有一个 toString() 方法,它返回对象的字符串表示形式。如果你定义了一个 MyClass,并且希望使用 toString() 方法来输出 MyClass 的实例,你就可以在 MyClass 重写 toString() 方法,从而使用自定义的表示形式输出 MyClass 的实例。 总之,所有 Java 父类都是 java.lang.Object 。 ### 回答2: 在Java,所有父类ObjectObjectJava所有的根,即所有的终极父类。无论是Java的内置还是我们自定义的,它们都直接或间接地继承ObjectObjectJava的基础库的一部分,它提供了一些通用的方法来处理对象,这些方法包括: 1. equals()方法:用于判断两个对象是否相等。 2. hashCode()方法:用于获取对象的哈希码。 3. toString()方法:用于返回对象的字符串表示。 4. getClass()方法:用于获取对象的运行时。 5. wait()、notify()和notifyAll()方法:用于实现线程之间的等待和通知机制等。 由于所有继承Object,因此所有都可以使用这些方法。此外,Object还提供了一些其他的方法,如clone()方法、finalize()方法等。 使用Object作为所有父类,可以使得我们在编写代码时更加方便灵活。例如,当我们需要传递一个对象型的参数时,可以统一使用Object型,以适应各种型的对象。同时,Object还提供了一些通用的方法,能够满足一些基本的需求。当然,如果我们需要更多的功能和特性,可以通过自定义来扩展Object,以满足具体的需求。总而言之,ObjectJava扮演着至关重要的角色,是所有的根基。 ### 回答3: 在Java,所有父类是`Object`。`Object`Java语言的顶级,即所有的终极父类。由于所有都直接或间接地继承自`Object`,因此在所有的Java程序,我们都可以调用`Object`定义的共有方法。 `Object`包含了一些常用的方法,包括`equals()`用于比较对象是否相等,`hashCode()`用于获取对象的哈希值,`toString()`用于返回对象的字符串表示等,这些方法在所有都可以直接使用。 由于所有继承自`Object`,因此我们可以在任何一个的定义使用`super`关键字来引用`Object`的成员或调用`Object`的方法。此外,如果我们在自定义的没有显式地声明一个父类,那么默认情况下这个都会隐式地继承自`Object`。 总之,在 Java,所有父类都是`Object`,它提供了每个都可以使用的常用方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值