• Java-API简析_java.lang.Object类(基于 Latest JDK)(浅析源码)


    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
    https://blog.csdn.net/m0_69908381/article/details/133474051
    出自【进步*于辰的博客

    1、概述

    public class Object

    类Object是类层次结构的根。 每个班级都有Object作为超类。 所有对象(包括数组)都实现此类的方法。

    从以下版本开始:
    1.0
    另请参见:
    Class

    2、构造方法摘要

    2.1 null

    构造一个新对象。

    3、方法摘要

    3.1 protected Object clone()

    创建并返回此对象的副本。

    protected native Object clone() throws CloneNotSupportedException;
    
    • 1

    注译:
    创建并返回此对象的副本。“copy”的确切含义可能取决于对象的类。一般的意图是,对于任何对象x,表达式:

    x.clone() != x
    
    • 1

    将为 true,即表达式:

    x.clone().getClass() == x.getClass()
    
    • 1

    将为 true,但这些不是绝对的要求。虽然通常情况是:

    x.clone().equals(x)
    
    • 1

    将为 true,这不是一个绝对的要求。

    按照惯例,返回的对象应该通过调用super.clone()来获得。如果一个类和它的所有超类(Object除外)都遵守这个约定,则会出现x.clone(). getclass() == x.getClass()的情况。

    按照惯例,这个方法返回的对象应该独立于这个对象(它正在被克隆)。要实现这种独立性,可能需要修改由super返回的对象的一个或多个字段。克隆后再返回。通常,这意味着复制包含被克隆对象的内部“深层结构”的任何可变对象,并用对副本的引用替换对这些对象的引用。如果一个类只包含基本数据类型字段或对不可变对象的引用,那么通常情况下,由super返回的对象中没有字段。需要修改克隆。

    类 Object 的方法clone()执行特定的克隆操作。首先,如果该对象的类没有实现接口 Cloneable,则会抛出CloneNotSupportedException异常。注意,所有数组都被认为实现了接口 Cloneable,数组类型T[]的克隆方法的返回类型是T[],其中T是任何引用类型或基本类型。否则,此方法将创建此对象的类的新实例,并使用该对象对应字段的内容初始化其所有字段,就像通过赋值一样。并且,字段的内容本身并不是克隆的。因此,该方法执行该对象的“浅拷贝”,而不是“深拷贝”操作。

    类 Object 本身并不实现接口 Cloneable,因此在类为 Object 的对象上调用clone()方法将导致在运行时抛出异常。

    3.2 boolean equals​(Object obj)

    指示某个其他对象是否“等于”此对象。

    public boolean equals(Object obj) {
        return (this == obj);
    }
    
    • 1
    • 2
    • 3

    3.3 protected void finalize()

    已过时
    最终确定机制本质上存在问题。

    3.4 Class getClass()

    返回此 Object 类运行时的 Class 对象。

    public final native Class<?> getClass();
    
    • 1

    注译:
    返回的 Class 对象是由所表示类的 静态同步方法 \color{green}{静态同步方法} 静态同步方法锁定的对象。

    实际的返回类型是Class,其中|X|是对调用getClass()的表达式的静态类型的擦除。例如,在这段代码中不需要强制类型转换:

    Number n = 0;
    Class<? extends Number> c = n.getClass();
    
    • 1
    • 2

    3.5 int hashCode()

    返回对象的哈希码值。

    public native int hashCode();
    
    • 1

    注译:
    返回对象的散列码值。支持此方法是为了使用哈希表,例如java.util.HashMap提供的哈希表。

    哈希码的总约定是:

    • 在Java应用程序的执行过程中,只要在同一对象上多次调用hashCode(),此方法必须始终返回相同的整数,前提是对象上用于相等比较的信息没有被修改。该整数不必在应用程序的一次执行与另一次执行之间保持一致。
    • 如果根据equals(Object obj)方法比较的两个对象相等,那么对这两个对象中的每一个调用hashCode()必须产生相同的整数结果。
    • 如果根据equals(Object obj)方法比较的两个对象不相等,则不要求对这两个对象中的任一个调用hashCode()必须产生不同的整数结果。然而,程序员应该意识到,为不相等的对象生成不同的整数结果可能会提高哈希表的性能。

    在合理可行的情况下,由 Object 类定义的hashCode()确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但是Java编程语言不需要这种实现技术。)

    3.6 void notify()

    唤醒正在此对象监视器上等待的单个线程。

    3.7 void notifyAll()

    唤醒等待此对象监视器的所有线程。

    3.8 String toString()

    返回对象的字符串表示形式。

    public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    
    • 1
    • 2
    • 3

    关于hashCode(),见第5项;关于toHexString(),见Integer类的第4.28项。

    3.9 void wait()

    导致当前线程等待它被唤醒,通常是“通知”或“中断”。

    3.10 void wait​(long timeoutMillis)

    导致当前线程等待它被唤醒,通常是“通知”或“中断”,或者直到经过一定量的实时。

    3.11 void wait​(long timeoutMillis, int nanos)

    导致当前线程等待它被唤醒,通常是“通知”或“中断”,或者直到经过一定量的实时。

    最后

    如果大家需要Java-API文档,我上传了《Java-API文档-包含5/8/11三个版本》。


    本文暂缓更新。

  • 相关阅读:
    TodoList经典案例
    docker network
    密码输入检测(100%用例)D卷(Java&&Python&&C++&&Node.js&&C语言)
    react-router v6对比react-router v5
    2023年10月13日历史上的今天大事件早读
    OxyCon 2022精彩回顾之多元视角探究网络抓取技术
    文件包含漏洞(一)
    flex布局在多层嵌套时,内层设置了justify-content: space-between;不生效问题
    Kubernetes 高可用的APIServer
    案例突破——再探策略模式
  • 原文地址:https://blog.csdn.net/m0_69908381/article/details/133474051