提问者:小点点

静态和非静态字段


我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?


共3个答案

匿名用户

与实例变量不同,在创建某个类的实例之前,可以访问该类中的静态字段或静态类变量。类中的实例变量(非静态变量)是在运行时创建该类的实例时创建的。因此,在创建该类的实例之前,无法访问非静态变量。然而,静态类成员可以在创建或实例化该类之前访问。

该类的所有实例都可以访问相同的静态变量。另一方面,实例变量是单独的/封装到类的每个实例。

匿名用户

  • 静态字段由所有对象共享和使用并在加载类时加载
  • 非静态字段是每个对象的单独副本,并在创建对象时加载

非静态字段是由对象定义的变量?

每当创建新对象时,每个对象都将有自己的实例副本,即非静态字段

第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?

我没有真正理解你的问题,但是

  • 如果object1和object2是类的指令,那么如果object1修改类的静态字段,那么object2将获得更新的值

匿名用户

实例属性是特定于实例的属性,其值不会在同一类的其他实例之间共享。

另一方面,类(或静态)属性是所有类实例的公共属性,因为它属于类,而不是特定的实例。

所以您必须小心使用静态属性,因为其中一个属性的更改将反映在使用它的所有代码上,有时会导致意外的结果。在实践中,我倾向于避免静态属性,除非它们具有常量、不可变值。

类似的考虑也适用于实例方法和静态方法:实例方法可以“看到”实例和静态方法及属性,而静态方法只能引用类的静态方法和属性,不能“看到”实例方法和属性(即,除非它实例化一个对象并使用它访问其实例成员)。