0

単純なプログラムでクラスの動的ロードを試みましたが、興味深いことに、単純な名前でクラスを動的にロードしようとすると、classnotfoundexception で失敗します。これは、クラスがデフォルト パッケージ以外のパッケージの下にある場合にのみ発生します。

しかし、フルパス名を指定すると、動的ロードは成功します。ロードされるクラスは、メイン クラスと同じパッケージにあります。

ファイル Main.java:

public class Main {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {                  
        System.out.println(Class.forName("m"));
    }
}

class m extends Main{
}
4

2 に答える 2

3

いいえ、Class.forName 常にパッケージ修飾クラス名が必要です。パラメータドキュメントから:

className- 目的のクラスの完全修飾名。

呼び出しコードのパッケージは関係ありません。

于 2013-03-11T20:45:12.937 に答える
0

クラスの完全修飾クラス名をここに入力する必要があります

そのようなSystem.out.println(Class.forName("com.sample.M"));

仮定する

com.sample はクラスのパッケージ名です。

于 2013-03-11T20:48:57.307 に答える