Java静态变量和inheritance和内存

我知道如果我有同一个类的多个实例,它们将共享相同的类变量,所以无论我有多少个类的实例,类的静态属性都将使用固定数量的内存。

我的问题是: 如果我有一些子类从它们的超类inheritance一些静态字段,它们是否会共享类变量?

如果没有,确保它们共享相同类变量的最佳实践/模式是什么?

如果我有一些子类从它们的超类inheritance一些静态字段,它们是否会共享类变量?

是的他们将在单个类加载器中的当前运行的应用程序中共享相同的类变量。
例如,考虑下面给出的代码,这将让您公平地了解每个子类共享类变量。

class Super { static int i = 90; public static void setI(int in) { i = in; } public static int getI() { return i; } } class Child1 extends Super{} class Child2 extends Super{} public class ChildTest { public static void main(String st[]) { System.out.println(Child1.getI()); System.out.println(Child2.getI()); Super.setI(189);//value of i is changed in super class System.out.println(Child1.getI());//same change is reflected for Child1 ie 189 System.out.println(Child2.getI());//same change is reflected for Child2 ie 189 } } 

该类或子类的所有实例共享给定类加载器的相同静态字段。

注意:如果在多个类加载器中多次加载同一个类,则每个类加载器都有自己的静态字段副本。

是的所有类层次结构(相同的类和所有子类实例)共享相同的静态变量。 由于JAVA不支持全局变量,但您可以将静态变量用作全局变量而不违反OOP概念。

如果您从其中一个类更改了静态变量的值,则相同的更改值将复制到使用此变量的所有类。