クラスが複雑なデータ型であるという事実についてはすでに説明しました。ここで、クラスの裏側、つまり Java マシンによってクラスがどのように処理されるかについて少し話しましょう。Java では、クラスであってもすべてがオブジェクトであることを思い出してください。クラスはオブジェクトです。それはあなたを驚かせますか?それでは続けましょう。
クラスをメモリにロードする
実際、クラスがメモリにロードされると、次の 3 つの特別な「オブジェクト」が作成されます。
図の簡単な説明:
黄色の四角形:
コード ファイルは、「.class」拡張子が付いたファイルとしてディスクに保存されます。これには、クラス、そのフィールド、メソッドに関する情報と、バイトコードにコンパイルされたメソッドのソース コードが含まれています。
オレンジ色の長方形:
Java マシンはクラスをメモリにロードするときに、バイトコードをコンピュータのプロセッサとオペレーティング システムに固有のマシン コードにコンパイルします。Java マシンのみがこのマシン コードにアクセスできます。Java プログラマとして、私たちはそれにアクセスすることができません。
緑色の四角形:
Java マシンは、クラスのすべての静的変数とメソッドを含むオブジェクトを作成します。この「オブジェクト」にはクラス名を使用してアクセスします。
たとえば、 と記述すると、クラス内にある静的変数を参照することになります。このオブジェクトは緑色の長方形です。そして、そこに静的変数が保存されます。java.lang.Math.PI
PI
java.lang.Math
java.lang.Math
PI
青い四角形:
Java マシンがクラスのコードをメモリにロードすると、java.lang.Class
ロードされたクラスに関する情報 (名前、メソッド名、フィールド名と型など) が格納される特別なオブジェクトが作成されます。
「クラス」という名前は少しわかりにくいかもしれません。このクラスはロードされたクラスに関する情報を保存するだけなので、ClassInfo と呼ぶ方が合理的です。
次のようなコマンドを使用して、任意の型の Class オブジェクトを取得できます。
Class name = ClassName.class;
例:
コード | ノート |
---|---|
|
クラスClass に関する情報を含むオブジェクトを取得しますString |
|
クラスClass に関する情報を含むオブジェクトを取得しますObject |
|
クラスClass に関する情報を含むオブジェクトを取得しますInteger |
|
型Class に関する情報を含むオブジェクトを取得するint |
|
型Class に関する情報を含むオブジェクトを取得するvoid |
getClass()
各オブジェクトにはクラスから継承するメソッドがあるため、任意のオブジェクトからクラス記述オブジェクトへの参照を取得することもできますObject
。
例:
コード | ノート |
---|---|
|
と同じオブジェクトString.class |
|
と同じオブジェクトInteger.class |
|
と同じオブジェクトBoolean.class |
GO TO FULL VERSION