如果Java类仅包含静态方法和字段,它们是否在计算机(JVM)级别上具有实例?
如果是的话,进行多线程处理时静态方法和字段的影响是什么?有什么经验法则吗?
是的,对于JVM中每个已加载的类,都有一个的实例java.lang.Class
。它们只包含静态方法/字段还是实例方法/字段都没有关系。
除了实例字段和方法已经具有的功能之外,这对多线程没有任何其他影响。也就是说,只要您意识到静态字段的值在所有实例之间都是共享的。如果要同步,则需要java.lang.Class
在该类的实例上进行同步(或者,如果该方法是所述类内的静态方法,则可以在静态方法上使用'synchronized'修饰符,以与在java.lang.Class
类的实例)。
还有一点要注意的是,一个同名的类可以同时在JVM中由多个类加载器加载-因此Java中的类不是通过其完全限定的名称唯一标识的,而是通过以下方式唯一标识的:java.lang.ClassLoader
用于加载类的实例与标准名称的组合。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句