Java静态变量和继承和内存

前端之家收集整理的这篇文章主要介绍了Java静态变量和继承和内存前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道如果我有同一个类的多个实例,它们将共享相同的类变量,因此无论我有多少个类实例,类的静态属性都将使用固定数量的内存.

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

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

解决方法

If I have a couple subclasses inheriting some static field from their
superclass,will they share the class variables or not?

是的,它们将在单个Classloader中在当前运行的Application中共享相同的类变量.例如,考虑下面给出的代码,这将为您提供每个子类共享类变量的公平概念.

  1. class Super
  2. {
  3. static int i = 90;
  4. public static void setI(int in)
  5. {
  6. i = in;
  7. }
  8. public static int getI()
  9. {
  10. return i;
  11. }
  12. }
  13. class Child1 extends Super{}
  14. class Child2 extends Super{}
  15. public class ChildTest
  16. {
  17. public static void main(String st[])
  18. {
  19. System.out.println(Child1.getI());
  20. System.out.println(Child2.getI());
  21. Super.setI(189);//value of i is changed in super class
  22. System.out.println(Child1.getI());//same change is reflected for Child1 i.e 189
  23. System.out.println(Child2.getI());//same change is reflected for Child2 i.e 189
  24. }
  25. }

猜你在找的Java相关文章