我想澄清一下,在java中,静态字段是整个类使用的变量/字段,或者可以被引用该类的所有对象使用?非静态字段是由对象定义的变量?第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?
与实例变量不同,在创建某个类的实例之前,可以访问该类中的静态字段或静态类变量。类中的实例变量(非静态变量)是在运行时创建该类的实例时创建的。因此,在创建该类的实例之前,无法访问非静态变量。然而,静态类成员可以在创建或实例化该类之前访问。
该类的所有实例都可以访问相同的静态变量。另一方面,实例变量是单独的/封装到类的每个实例。
非静态字段是由对象定义的变量?
每当创建新对象时,每个对象都将有自己的实例副本,即非静态字段
第二个对象引用与对象1相同的类,它可以对对象1的静态字段具有不同的值?
我没有真正理解你的问题,但是
实例属性是特定于实例的属性,其值不会在同一类的其他实例之间共享。
另一方面,类(或静态)属性是所有类实例的公共属性,因为它属于类,而不是特定的实例。
所以您必须小心使用静态属性,因为其中一个属性的更改将反映在使用它的所有代码上,有时会导致意外的结果。在实践中,我倾向于避免静态属性,除非它们具有常量、不可变值。
类似的考虑也适用于实例方法和静态方法:实例方法可以“看到”实例和静态方法及属性,而静态方法只能引用类的静态方法和属性,不能“看到”实例方法和属性(即,除非它实例化一个对象并使用它访问其实例成员)。