jdk8 - Java反射代码 求解答,谢谢~
天蓬老师
天蓬老师 2017-04-18 09:26:55
0
9
662
天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全員に返信(9)
小葫芦

Java コードを記述するとき、ソース ファイルには接尾辞として java が付けられます。Java ファイルがコンパイルされた後、ソース ファイルには .class 接尾辞が付けられます。
Java 仮想マシンがクラス ファイルを記録するとき、これらのファイルは対応するクラスのさまざまな構造とデータを表す特定のデータ構造が仮想マシン内に存在する必要があります。この構造形式はクラス
の記述です。オブジェクトは、Class オブジェクトのインスタンス化の結果です。JVM には Class オブジェクトのコピーが 1 つだけ存在します (同じ ClassLoader によってロードされ、JVM の固定メモリ領域に配置され、GC は管理しません)。ただし、複数の異なるインスタンス オブジェクトが存在する可能性があります

クラスメソッドは、特定のインスタンスのデータとステータスに依存するため、呼び出す前に特定のインスタンスに依存する必要があります(静的メソッドを除く)~~~

いいねを押す +0
阿神

クラス オブジェクト クラス オブジェクトとメソッド オブジェクト メソッドもオブジェクトであり、独自のプロパティとメソッドを持ちます。
クラスがオブジェクトとしてインスタンス化された場合にのみ、オブジェクトのインスタンス メソッドを呼び出すことができます。Class オブジェクトは Class クラスのインスタンスです。

いいねを押す +0
黄舟
  1. Class オブジェクトはクラスそのものではなく、実際のクラスにアクセスするために使用されるインターフェイスと考えることができます。

  2. インスタンス メソッドを呼び出すには、そのクラスのインスタンスが必要です。静的メソッドを呼び出す場合は、null を渡すことができます。

いいねを押す +0
阿神

1. 明確に説明できません。
2. このメソッドはインスタンス化されたオブジェクトが存在しない場合は呼び出すことができません。

いいねを押す +0
左手右手慢动作

Class はクラス オブジェクトであり、もちろん Object からも継承されます。このクラス オブジェクトは、特定のインスタンス オブジェクトとはまったく異なります。 一般に、 クラスには 1 つのクラス オブジェクトしかなく、Just.class を通じて取得できます (これはメソッドの 1 つであり、ほぼ 3 つのメソッドがあります)。 。 new または newInstance を使用して複数のインスタンス オブジェクトを作成できます。
被験者はリフレクションの入門知識を読み、リフレクションの基礎となるクラスオブジェクトの概念を自分で理解することをお勧めします。

いいねを押す +0
刘奇

クラスはオブジェクトの抽象化であり、オブジェクトは客観的なものの抽象化です

いいねを押す +0
阿神

まず、Class はクラス情報を抽象化するために使用されます。たとえば、人物のクラスは名前、性別、年齢などの情報を抽象化できます。クラス、Java のクラス抽象化 パッケージ名、クラス名、属性配列、メソッド配列などの情報を抽象化した Class クラスになります。これはより高いレベルの抽象化です。
これにより、リフレクションがわかりやすくなります。 Class<?> c = Just.class; c このオブジェクト インスタンスには Just クラスが含まれていますが、Just クラスのインスタンスを取得したい場合は、 c.newInstance() メソッドを呼び出す必要があるだけです。

いいねを押す +0
Peter_Zhu

ここには 2 つの質問があります:
最初の質問は、インスタンスとクラスの関係についてです。これは、ケーキの型を使ってケーキを作るのと同じようなものです。これは製品です。型の役割は、各ケーキのサイズとその他の特性を同じにすることです。リフレクションの概念はさらに複雑で、型の大きさや深さなどの属性があり、クラス自体がどのようなメソッドと属性を持っているかを示します。これらのことを知っていれば、オブジェクトを動的にインスタンス化できます。このモールドの属性の動作がわかったら、動的にケーキを生成し、このケーキのメソッドを呼び出すこともできます。
2 番目の質問: リフレクションを使用すると、オブジェクトのインスタンス化も必要になるため、new は使用されませんが、それでもインスタンス化する必要があります。インスタンス化しないと、null ポインターが報告されます。

いいねを押す +0
迷茫

問題は解決されたようですが、メモリ構造レベルから何かを追加したいと思います。

インスタンスのヒープ メモリ構造を見てみましょう:

つまり、各オブジェクト インスタンスはヒープ メモリ内の 4 つの部分で構成されます。マーク ワード (マーク ワード) と Class インスタンス ポインタに注目します。マーク ワードには、ロック、GC フラグ、ユース GC の有無が含まれます。時間などの情報。

Class インスタンスは、Classloader によって jvm にロードされたクラスを表し、このクラスの説明情報、クラス名、フィールド名、メソッド情報が格納されます。

投稿者の問題は明らかです。Class インスタンスはクラスの説明情報を表すだけであり、各インスタンスには Class インスタンスへのポインター参照が含まれます。

通常、Class.newInstance() を呼び出すと 3 つのことが行われます:

1. ヒープ メモリ空間を開きます
2. 対応するクラスの引数なしのコンストラクターを呼び出します
3. スタック アドレスを適用し、参照アドレスをこのヒープ メモリ空間にポイントします

また、Classのインスタンス化は、classloaderdefine()メソッドによって行われます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート