如果我们再次加载已经加载的类会发生什么?

时间:2010-03-18 20:25:56

标签: java

我的意思是我们有一个已经加载到JVM中的类。在其他一些方法中,我们在不知不觉中试图加载同一个类,所以在这种情况下会发生什么?即将有任何错误或异常说它已经加载。如果没有,那么我们是否可以修改具有一些额外功能的类,并在需要热部署时加载它。

3 个答案:

答案 0 :(得分:5)

什么都没发生。 VM首先检查是否加载了类,如果没有,则加载它。否则它返回已经加载的类。

来自ClassLoader.loadClass(..)

// First, check if the class has already been loaded
Class c = findLoadedClass(name);
if (c == null) {
    ...
}

(您可以查看this article关于课程加载的详细信息。虽然它与您的问题没有直接关系(整体而言),但对于像您这样的问题,它是一个很好的答案来源。

答案 1 :(得分:0)

如果您希望在加载类时重用一个类,则应该检查Singleton类模式。如果你再次加载同一个类,那么你将拥有该类的多个实例,不会发生错误。

答案 2 :(得分:0)

每个类加载器只能有一个类,所以理论上这是不可能的。您实际上可以通过调用静态初始化程序块中的S.o.p语句来测试它。这些块只在加载类时运行一次。

修改

给定完全限定名称的一个类别,根据评论

进行更正