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);

「HelloWorld!」と印刷されます メッセージ。しばらくして、デモクラスの印刷メッセージを「HelloWorld!」ではなく「Hellojava」のように変更しました。そして、Demoクラスを再度コンパイルします。ここでも、上記と同じコードでメソッドを呼び出しますが、更新されたメッセージを取得できません。「HelloWorld!」を印刷します。更新されたメッセージを印刷するにはどうすればよいですか。私を助けてください。

今、私はちょうど2つのことをしました:1。別の新しいClassLoaderインスタンスをインスタンス化します

 cls = Class.forName("anotherClassName");
  1. クラスファイルを削除して再コンパイルします

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

しかし、それでも更新されたメッセージを取得していません...どうすればよいですか?

4

1 に答える 1

3

クラスローダーがクラスをインポートすると、それは変更されなくなります。私の知る限り、そのようなクラスをアンロードする方法はありません。その結果、ロードされているクラスを変更することはできません。

私が考えることができる唯一の方法はClassLoader、クラスをまだロードしていない別の新しいインスタンスをインスタンス化できるかどうかです。

詳細については、これそれをチェックしてください。

于 2013-03-24T18:38:57.523 に答える