JVM将如何为java中的自定义类扩展对象类?

JVM将如何为java中的自定义类扩展对象类?,java,object,Java,Object,我听说对于每个类,JVM都会隐式扩展,但扩展它有什么必要呢?如果不扩展对象类,就无法为自定义类创建对象?请解释清楚每个自定义类在其对象创建时会发生什么情况?对象类包含所有常用方法。因此,默认情况下隐式exetending为您提供了这些常用方法,从而减少了开销 方法有-equals、wait、notify、notifyall、hashcode、getClass、clone等 如果您需要自定义逻辑,那么您可以重写该方法 注意:所有对象,包括数组,都实现对象类的方法。为了默认提供此功能,每个类都扩展了

我听说对于每个类,JVM都会隐式扩展,但扩展它有什么必要呢?如果不扩展对象类,就无法为自定义类创建对象?请解释清楚每个自定义类在其对象创建时会发生什么情况?

对象
类包含所有常用方法。因此,默认情况下隐式exetending为您提供了这些常用方法,从而减少了开销

方法有-
equals、wait、notify、notifyall、hashcode、getClass、clone等

如果您需要自定义逻辑,那么您可以
重写
方法


注意:所有对象,包括数组,都实现对象类的方法。

为了默认提供此功能,每个类都扩展了
Object
class

  • 考虑对象引用的对象类的
    equals
    方法 检查它们是否引用同一对象。如果你不 提供
    equals()
    方法的实现,然后是默认方法 也将为自定义对象调用
  • 默认的
    toString
    方法提供类名和hashcode 对于对象。如果你不需要,你不需要写一个单独的 需要对象的其他字符串表示形式
  • wait()、notify()、notifyAll()这样的方法提供
    对象的线程通信功能。那你的课呢
    不必从外部进行。它们可以扩展
    对象
    类 功能

这个问题的答案与继承的概念有关,继承的概念是定义一组适用于所有子类的通用行为。“Object”类中定义的任何内容都可用于您创建的所有类

它包含一些适用于您在代码中使用的所有信息的内容:

  • equals和hashCode
    方法在 给定的抽象

  • toString
    以人类可读的方式表示对象(可能仅限于 (程序员可读)格式

  • getClass
    提供对给定抽象的反射功能; 组织面向对象运行时的一些方法


Java选择将单个类作为所有对象的最终父类,这样就可以轻松地传递任意对象,而无需知道其类型(即,您可以使用声明的对象类型引用类型系统中的每个项,甚至是使用包装器类的基元)。但是,在C++中没有OP语言,如没有java的通用基类。拥有通用基类的另一个好处是,处理超类的逻辑不必对顶级类进行特殊处理(通用基类、对象本身除外)。

Object
类提供了层次结构的根。这意味着,对象可以被传递,并且可以被期望

如果类没有以某种方式扩展对象,则不能将其作为参数或作为参数传递。没用


除此之外,对象类包含非常重要的方法,这些方法定义了Java的许多重要操作。

当您创建一个类时,您肯定希望创建该类的实例。现在,这些实例必须具有一些特定的和基本的属性

这些基本属性是在
Object
类中为您准备的。这就是隐式扩展对象类的原因

自定义类的特定属性由您在自定义类中定义

因此,在创建自定义类的实例(对象)时,请执行以下操作:

1. Object class properties are inherited by your custom class.
2. Your custom class specific properties are alloted to your instance. Hence, now your instance would have custom + Object properties. 

Object
类提供了java中几乎每个对象都需要的非常通用的方法

这些是类对象的方法,总结如下:
1.克隆方法用于复制对象。
2.方法
equals
定义了对象相等的概念,它基于值,而不是引用、比较。
3.方法
finalize
在对象销毁之前运行
4.方法
hashCode
与方法equals一起在java.util.Hashmap等哈希表中非常有用。
5.方法
wait、notify和notifyAll
用于使用线程的并发编程。
6.方法
toString
返回对象的字符串表示形式。
7.最重要的方法是
getClass()
,它返回包含
有关该类的一些元数据:

name
package
methods
fields
constructors
annotations

因此,我们可以说java中的每个对象都是一个各自的
对象,其中包含关于它的元数据,可以在运行时由
类加载器
访问。你能试着让它更清楚一点吗?如果一个对象不是对象的
实例
,那么如何序列化它@ChrisBode每个自定义类都需要为对象创建扩展对象类,为什么JVM会将自定义类扩展到对象类,这涉及到什么过程?JVM没有扩展任何内容。它只接受类,就像它们在类文件中定义一样。碰巧所有的类最后都是从Object派生的。我这里的问题不是Object类中所有可用的方法都是什么,我的问题是为什么JVM将自定义类扩展到Object类?:)我写过man,它在Object类中给出了defult方法,这减少了overhead@developer,我已经提供了同样的理由。你也可以看看我的答案,这是对这个好答案的补充。你是对的,只是因为这个原因对象类被扩展了?还是要让对象实例化,JVM将扩展对象类?我们无法理解。