0

我有一个课堂演示:

public class Demo {
        public static void main(String[] args) {
                System.out.println("Hello World!");
        }
    }

在运行时我调用main方法:

    Class cls = Class.forName(packClassName);
    Method thisMethod = cls.getMethod("main", String[].class);
    thisMethod.setAccessible(true);
    thisMethod.invoke(cls.newInstance(), (Object)str);

它打印“Hello World!” 信息。现在,一段时间后,我将演示类的打印消息更改为“Hello java”而不是“Hello World!” 并再次编译 Demo 类。现在我再次通过与上面相同的代码调用该方法,但我无法获得更新的消息。它会打印“Hello World!” 我如何打印更新的消息。请帮我。

现在,我刚刚做了两件事: 1. 实例化另一个新的 ClassLoader 实例

 cls = Class.forName("anotherClassName");
  1. 删除class文件并重新编译

boolean success = (new File ("filename")).delete();

但仍然没有收到更新的消息...我该怎么办?

4

1 回答 1

3

一旦类加载器导入了你的类,它就不会再改变了。据我所知,没有办法卸载这样的类。因此,您无法更改正在加载的类。

我能想到的唯一方法是,如果您可以实例化另一个ClassLoader尚未加载类的新实例。

查看这个那个以获取更多信息。

于 2013-03-24T18:38:57.523 回答