10

クラスのロードとクラスのインスタンス化の違いは何ですか。クラスを静的変数でロードすると、クラスがロードされると同時にインスタンス化されますか? 結局、静的コードは個々のインスタンスではなく、クラスの一部です。これをよりよく理解するのに役立つ例を誰かが提供してくれると助かります。

4

5 に答える 5

8
Integer.toString(123);

上記の静的メソッド呼び出しを機能させるには、Integer クラスをロードする必要があります。

Integer i = new Integer(123);

上記のコードでは、Integer クラスのインスタンス (オブジェクト) を作成しました (これを機能させるには、これもロードする必要があります)。

一部のクラスは、インスタンス化することを意図していません (たとえば、静的メソッドしか持たない Math クラスなど)。

于 2013-07-17T07:39:16.810 に答える
2

クラスは参照されるとロードされます (例: によってClass.forName())。

インスタンスを作成することにより、オブジェクトをインスタンス化します。

Object o = new Object();

リフレクションを使用してオブジェクトをインスタンス化することもできます。

staticクラスのメンバーは、クラスがロードされるときにインスタンス化されます。

public class Sample {
    private static int variable = 10;
}

クラスをロードすると(たとえば、によってClass.forName("Sample");)、変数variableは値で初期化されます10

クラスの新しいインスタンスを作成していて、クラスがロードされる前に (自動的に) ロードされない場合。そのため、構造Class.forName()は特別な状況下でのみ必要です (クラスがコンパイル時に認識されない場合など)。

于 2013-07-17T07:39:18.610 に答える