代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

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

  •  2
  • GuruKulki  · 技术社区  · 15 年前

    我的意思是我们有一个已经在JVM中加载的类。在另一个方法中,我们无意中试图加载同一个类,在这种情况下会发生什么?IE是否会有任何错误或异常表明它已经加载。如果不是,那么我们是否可以用一些额外的特性修改类,并在需要热部署时加载它。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Bozho    15 年前

    什么都没发生。vm首先检查类是否被加载,如果没有,则只加载它。否则,它将返回已加载的类。

    ClassLoader.loadClass(..) :

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

    (你可以查一下 this article 有关类加载的详细信息。尽管它与你的问题没有直接的联系(作为一个整体),但对于像你这样的问题,它是一个很好的答案来源。

        2
  •  0
  •   Michael D. Irizarry    15 年前

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

        3
  •  0
  •   questzen    15 年前

    每个类加载器只能有一个类,所以理论上这是不可能的。实际上,可以通过调用将s.o.p语句放入静态初始值设定项块来测试这一点。当类被加载时,这些块只运行一次。

    编辑

    一类给定的完全限定名,根据注释更正