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()”时,我想知道以下几点

  • 斯塔克身上发生了什么
  • 堆上发生了什么
  • 我们在运行时有一个类的副本和许多实例(对象),对吗?那么,类内容存储在哪里呢?类内容是静态的
  • 在堆上,我认为应该存储数据字段a和b,因为它们是动态的(特定于某个对象)。那么foo()方法呢?我们必须在堆上存储foo()的内容以及a和b吗
  • 基本上,我想知道新关键字的魔力?

    基本上:

    • 任何类共享代码(实例和静态方法、静态变量等)都将位于您可以称之为“程序代码”的区域中,该区域既不是堆也不是堆栈
    • 对象本身将在堆中构造,并将包括实例字段以及根据继承指向适当实例方法(所谓的vtable)的指针表。请注意,此对象将包括继承链中每个类的每个成员,即使您处理它的方式没有显示某些成员。(比如说,C扩展了B扩展了A,B有一个私有字段,C对象仍然会包含B字段,即使它是不可见的)
    • 字段和变量将包含对象引用(基本上是透明指针)或本机类型,如int、double或boolean(以小写开头的类型)
    • 局部变量和方法参数将存储在堆栈中

    在阅读了这里的答案后,这个问题在这里得到了回答,我仍然感到困惑。不管怎样,谢谢。@andrew,你能说得更具体些吗?我会把事情弄清楚的。