Java - 当声明全局变量并用值初始化时,对象创建时会发生什么?

当全局变量被声明并用值初始化时,在创建类的对象时,全局变量是否再次被初始化并获得新的内存?


class A{


int a = 10;


}

a这将被存储在带有 value 的内存地址中10。但是当我创建A类的对象时,a会再次初始化吗?


class A{


int a = 10;


public static void main(String args[]){


A a = new A();


}


潇湘沐
浏览 110回答 3
3回答

慕容708150

你所说的并不完全是内存分配的工作原理。class A{int a = 10;}在上面的示例中,您创建了一个类。类中的成员仅在创建其对象后才创建并分配其值,除非将成员声明为静态。因此,在您发布的第二个示例中,在构造 A 类的对象“a”之后,变量“a”被赋予值 10。如果你还是不明白,那么运行这段代码:class A{int a = 10;public static void main(String args[]){A a = new A();A b = new A();b.a += 10;System.out.println(a.a);System.out.println(b.a);}}如果变量 a 在创建对象之前被赋值,那么当对象 b 修改它时,打印的变量就会改变。但如果你运行这个,输出将是:1020这意味着变量仅在对象创建后才分配。我希望这能消除您的疑虑。还有另一个提示,静态变量不能修改。

莫回无

当全局变量被声明并用值初始化时......您所显示的不是全局变量。Java 中不存在真正的全局变量。a是 的实例字段A。这将被存储在内存地址 a 中,值为 10。a不是内存地址,它只是字段的名称。您很少需要处理低级内容,例如 Java 中的内存地址。但是当我创建A类的对象时,a会再次初始化吗?在创建实例之前,不会为该字段分配内存a,除非用于存储已编译的类文件本身。一旦创建了一个实例,A内存中就会有一个位置存储与该实例的字段10相对应的值。a请注意,如果您创建 的第二个实例A,则将分配另一块内存来保存a该实例的 。

慕哥6287543

Java中没有全局变量。有类变量和对象变量。类变量由关键字定义static。在您的代码中,该a变量是一个对象变量,每次创建该类的新对象时都会创建(并初始化)该变量,在本例中是通过调用new A().如果您创建了 A 类的另一个对象,a则会为其创建(并初始化)另一个对象变量,这与第一个对象变量不同。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java