我正在学习java语言,我有一个问题,在类中声明的变量例如int b=17作为属性;不在特定方法中,也不是静态的 无需调用 new 构造函数将其存储在堆中。默认情况下它在程序执行过程中存储在哪里?
在 Java 中,当您将变量声明为类中的实例变量(也称为成员变量或属性)时,它与该类的每个实例相关联,而不是与该类的任何特定方法或实例相关联。
当从类创建对象时,这些变量存储在对象的内存空间中。让我们来详细分析一下:
public class MyClass {
int b = 17; // This is an instance variable
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
}
}
总而言之,类中声明的实例变量在创建对象时存储在堆内存中,并且每个对象都有自己的这些变量的副本。
假设你有一个如下所示的类:
class Foo {
int a;
int b = 17;
Foo() {
this.a = 5;
}
}
编译后会变成这样:
class Foo {
int a;
int b;
Foo() {
this.b = 17;
this.a = 5;
}
}
因此,正如您从这里看到的,在调用构造函数之前,不会发生初始化,即没有任何内容可存储。
现在,如果您的问题是构造函数如何知道它需要具体使用数字
5
和 17
,那么这些是编译后的类文件的一部分,随类一起加载。