什么是静态字段的范围是什么?(what's the scope of a static fi

2019-09-17 10:59发布

我满足静态字段的一个问题。 我认为根本原因必须是静态字段的范围。

该项目是基于Apache ServiceMix的,由众多子项目。

在子项目“A”,我定义的类“注册”的静态列表场“章”,操作如“添加”和“GETALL”领域的一些静态方法。 一旦分了projectA部署,该项目“A”的名称将被添加到注册的静态列表。

问题是当它涉及到子项目“B”,当子工程“B”的部署,我想它的名字将被加入到注册完全相同的静态列表。 但是,当我调用静态方法GETALL或添加上“注册”,似乎在分项目B的“章”是从一个子了projectA完全不同。 所以注册功能不起作用。

所以,我要问一个基本的问题,什么是静态字段的范围是什么? 它是在JVM或一些其他的东西是否有效?

谢谢你的帮助

Answer 1:

静态的范围是全球性的 - 其所属的类加载器中。 一个JVM可以创建多个类加载器并加载类的不同实例中的每个新的类加载器。

静不是每个JVM全球,他们是每一个classloader全球。 如果用静态字段的类在不同的类加载器加载,它的静态成员将不会是一个不同的类加载器中可见。

如何项目A和B项目部署? 他们是在同一个类加载器?

我不熟悉的ServiceMix的,但我想它部署在不同的类装载器不同的应用程式,就像一个Java EE应用程序将部署不同的版本在不同的类加载器相同的应用程序,让您可以运行应用程序1.0和1.1的应用程序并排一边,他们不会互相影响。

这是由设计。

如果是这样的话,你需要的东西独立维护的共享状态。 (例如一个数据库)



文章来源: what's the scope of a static field?