Java内存堆/栈

问题描述 投票:0回答:1

我正在学习java语言,我有一个问题,在类中声明的变量例如int b=17作为属性;不在特定方法中,也不是静态的 无需调用 new 构造函数将其存储在堆中。默认情况下它在程序执行过程中存储在哪里?

java dynamic-memory-allocation
1个回答
1
投票

在 Java 中,当您将变量声明为类中的实例变量(也称为成员变量或属性)时,它与该类的每个实例相关联,而不是与该类的任何特定方法或实例相关联。

当从类创建对象时,这些变量存储在对象的内存空间中。让我们来详细分析一下:

  • 当你声明一个实例变量时,如 int b = 17;在课堂上,它 成为对象状态的一部分。

  • 每次使用 new 关键字创建对象时,都会生成一个单独的对象 创建实例变量的副本并与之关联 特定对象。

  • 这些实例变量的内存是在堆上分配的,并且 只要对象存在,它就存在。

    公共类我的类{ 整数 b = 17; // 这是一个实例变量

     public static void main(String[] args) {
         MyClass obj1 = new MyClass();
         MyClass obj2 = new MyClass();
    
         // obj1 and obj2 have their own separate 'b' variables
         System.out.println(obj1.b); // prints 17
         System.out.println(obj2.b); // prints 17
    
         // You can modify the values independently
         obj1.b = 20;
         System.out.println(obj1.b); // prints 20
         System.out.println(obj2.b); // prints 17
     }
    

    }

总而言之,类中声明的实例变量在创建对象时存储在堆内存中,并且每个对象都有自己的这些变量的副本。

© www.soinside.com 2019 - 2024. All rights reserved.