Java 派生类的对象的大小
当Java中有两个类,一个继承另一个时,派生类的对象会占用相当于基类中的数据成员加上派生类本身的成员的空间吗?在调用构造函数之前,类的内存需求是已知的。JVM首先为声明类及其所有派生类中的文件分配内存,然后调用构造函数。对于填充对象值和方法,都是关于 一旦ObjectB继承ObjectA,他将调用ObjectA超级方法(构造函数): 然后,Java程序将调用ObjectA构造函数并初始化自己的方法:Java 派生类的对象的大小,java,Java,当Java中有两个类,一个继承另一个时,派生类的对象会占用相当于基类中的数据成员加上派生类本身的成员的空间吗?在调用构造函数之前,类的内存需求是已知的。JVM首先为声明类及其所有派生类中的文件分配内存,然后调用构造函数。对于填充对象值和方法,都是关于 一旦ObjectB继承ObjectA,他将调用ObjectA超级方法(构造函数): 然后,Java程序将调用ObjectA构造函数并初始化自己的方法: class ObjectA { public ObjectB() { //
class ObjectA {
public ObjectB() {
// Some code
}
}
因此,在包含初始化的每一行中,数据都会写入堆中,从而按照每个初始化内部对象的大小填充另一个预先需要的内存。考虑到ObjectA也将继承自,因为根据定义,它是每个Java对象必须继承的,即使您自己不调用“super()”方法,它也将在幕后完成。当然是,当然不是?你到底在问什么?为什么?听起来像是在问数据值是否占用内存空间。是的。“但这显然是显而易见的,你还想问些别的问题吗?”大卫,AutomatedOwl澄清了我的疑问。他回答问题的方式和我们期待的差不多,除了他的答案是错误的。在调用ctor之前,类的内存需求是已知的。JVM首先分配内存,然后调用ctor(并且可以执行其任务并分配值)。是的,简单的答案是:当然,派生类的实例附带了任何超级类字段所需的内存。嗯?真是胡说八道。在调用ctor之前,对象的内存需求是已知的。init序列不创建任何内存,它只是将值分配给以前的空/默认插槽。
class ObjectA {
public ObjectB() {
// Some code
}
}