java - 如何使用java中的动态类加载来加载同一类的多个版本

标签 java

在我的java程序中,我有一个带有静态 block 的类。我知道静态 block 仅由 JVM 初始化一次并加载一次。但是,如果我希望该静态 block 被执行(或加载)一次以上怎么办?我尝试使用 class.forName() 在另一个类中动态加载该类,并尝试使用 classLoader。但静态 block 只执行一次。所以建议我最简单的方法。

我开始知道通过使用 classLoader 我们可以加载同一类的多个版本。但如何呢?我可以在我的程序中实现这个概念吗?

最佳答案

以下是您需要的类加载器的粗略草图

class HelloWorldClassLoader extends ClassLoader {

  @Override
  public Class loadClass(String name) throws ClassNotFoundException {
    if (!"MyClass".equals(name)) return super.loadClass(name);
    byte[]  bb=ByteStreams.toByteArray(
                 getResourceAsStream(name.replace('.','/')+".class"));
    return defineClass(name,bb,0,bb.length);
  }
}

要使用它,请执行

new HelloWorldClassLoader().loadClass("MyClass");

关于java - 如何使用java中的动态类加载来加载同一类的多个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215433/

相关文章:

java - Primefaces - 不显示必填字段的消息,仅突出显示边框

java - 当我将我的 fragment 添加到我的 Activity 中时,我做错了什么?

java - 如何从java中的结果集列名获取值?

java - 在 main 方法中设置静态成员并在 Junit 方法中访问

java - 为什么 Java 中第一次调用方法时会产生运行时开销?

java - Sonar 管 5.6 : violations reported for an outer class by findbugs is not reported as a sonar violation

java - 如何在 Java 9 中获取进程的命令行和参数

java - Java 和 Javascript 中的登录页面重定向

java - 一起使用 Fragment 和 AppCompatActivity 类

java - ADT 更新后出现 NoClassDefFound 错误