26

検索エンジンでこの質問を検索しようとしましたが、クラスの初期化とオブジェクトのインスタンス化の違いを説明するトピックを見つけることができました。

誰かがそれらの違いを説明できますか?

4

4 に答える 4

4

Java クラスが JVM に「ロード」されると、クラス表現をいくつかの方法で初期化する必要があります。

  • クラスの「定数プール」はランタイム構造に展開され、その中のいくつかの値が初期化されます。
  • クラスのスーパークラスが (定数プールを介して) 検出され、その属性が抽出されます。
  • クラスのメソッドに対してメソッド テーブルが作成されます。個々のメソッドは「まだ検証されていません」とマークされています。
  • クラス表現に対していくつかの検証操作が実行されます。
  • 静的フィールドが初期化されます。
  • 最初の参照では、文字列リテラルは「インターン」され、インターンされた文字列ポインターは定数プールに配置されます
  • 最初の参照方法は「検証済み」です。
  • 等。

クラスの初期化を参照するために使用される特定の用語のセットがありますが、詳細は覚えていません。特定のことは、クラスが特定のポイントなどに初期化された後にのみ発生する可能性があります。

オブジェクトのインスタンス化は、クラスがロードされて初期化された後にのみ発生します (ただし、すべてのメソッドが検証されている必要はありません)。オブジェクトのサイズはクラスから取得され、その量のヒープが特定されてゼロになります。オブジェクト ヘッダーには、クラスへのポインタと、クラスの管理に使用されるその他のフィールドが入力されます。次に、クラスの適切なコンストラクター メソッドが呼び出されます (そして、スーパーのコンストラクターが呼び出されます)。

于 2013-02-25T18:56:39.233 に答える