从Java中的对象访问静态变量

为什么我们可以从Java中的对象访问静态变量,如下面的代码?

public class Static { private static String x = "Static variable"; public static void main(String[] args) { Static member = new Static(); System.out.println(member.x); } } 

通常,每个人都可以访问公共变量,并且只能从类的当前实例中访问私有变量。 在您的示例中,您可以从main方法访问x变量,因为该方法在Static类中。

如果您想知道为什么允许您从另一个静态类实例访问它而不是您当前所在的实例(通常不允许私有变量),那只是因为静态变量不存在于每个实例,但基于每个类。 这意味着可以从A的所有实例访问A的相同静态变量。

如果不是这种情况,那么任何人都无法访问私有静态变量,因为它不属于一个实例,而是属于所有实例。

以这种方式引用静态变量不是最佳实践。

但是你的问题是为什么允许它? 我猜测答案是开发人员可以将实例成员(字段或变量)更改为静态成员,而无需更改对该成员的所有引用。

在多开发人员环境中尤其如此。 否则,您的代码可能无法编译,因为您的伙伴将某些实例变量更改为静态变量。

静态变量另外称为类变量,因为它们可用于该类的每个对象。

由于member是Static类的一个对象,因此您可以通过成员对象访问所有static as Wll作为Static类的非静态变量。

非静态成员是实例成员。 静态成员(类范围)无法访问实例成员,因为无法确定哪个实例拥有任何特定的非静态成员。

实例对象总是可以引用静态成员,因为它属于与其实例全局(共享)的类。