调用java反射的方法,当该方法已更改时,不在运行时更新该方法

调用java反射的方法,当该方法已更改时,不在运行时更新该方法,java,reflection,Java,Reflection,我有一个课堂演示: public class Demo { public static void main(String[] args) { System.out.println("Hello World!"); } } 在运行时,我调用main方法: Class cls = Class.forName(packClassName); Method thisMethod = cls.getMethod("m

我有一个课堂演示:

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 java”,而不是“Hello World!”,然后再次编译演示类。现在,我再次使用与上面相同的代码调用该方法,但无法获得更新的消息。它会打印“你好,世界!” 如何打印更新的邮件。请帮帮我

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

 cls = Class.forName("anotherClassName");
  • 删除类文件并重新编译它
  • boolean success=(新文件(“文件名”)).delete()


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

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

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


    查看并了解更多信息。

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

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


    查看并了解更多信息。

    删除你的.class文件,然后重新编译…@Frank我删除了该类,但仍然没有得到更新的输出…这是运行之间的问题吗?是的,实际上我正在制作我的project java编译器。当用户编辑程序并编译它时。它编译得很好,但是当运行程序时,它没有给出更新的输出,并且仍然显示以前的输出。删除你的.class文件,然后重新编译…@Frank我删除了类,但仍然没有得到更新的输出…这是两次运行之间的问题吗?是的,实际上我正在制作我的项目java编译器。当用户编辑程序并编译它时。它可以很好地编译,但是当运行程序时,它不会给出更新的输出,并且仍然显示以前的输出。