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