Java如何在JVM中创建对象?当我调用构造函数时,堆栈和堆上会发生什么?
可能重复:Java如何在JVM中创建对象?当我调用构造函数时,堆栈和堆上会发生什么?,java,oop,Java,Oop,可能重复: 假设我们有一个java类测试,这个类有两个数据字段a和b,还有一个方法foo()。 当我们执行“Test t=new Test()”时,我想知道以下几点 斯塔克身上发生了什么 堆上发生了什么 我们在运行时有一个类的副本和许多实例(对象),对吗?那么,类内容存储在哪里呢?类内容是静态的 在堆上,我认为应该存储数据字段a和b,因为它们是动态的(特定于某个对象)。那么foo()方法呢?我们必须在堆上存储foo()的内容以及a和b吗 基本上,我想知道新关键字的魔力?基本上: 任何类共享代
假设我们有一个java类测试,这个类有两个数据字段a和b,还有一个方法foo()。 当我们执行“Test t=new Test()”时,我想知道以下几点
- 任何类共享代码(实例和静态方法、静态变量等)都将位于您可以称之为“程序代码”的区域中,该区域既不是堆也不是堆栈
- 对象本身将在堆中构造,并将包括实例字段以及根据继承指向适当实例方法(所谓的vtable)的指针表。请注意,此对象将包括继承链中每个类的每个成员,即使您处理它的方式没有显示某些成员。(比如说,C扩展了B扩展了A,B有一个私有字段,C对象仍然会包含B字段,即使它是不可见的)
- 字段和变量将包含对象引用(基本上是透明指针)或本机类型,如int、double或boolean(以小写开头的类型)
- 局部变量和方法参数将存储在堆栈中