ホームページ  >  記事  >  Java  >  Java クラスはいつロードされますか?

Java クラスはいつロードされますか?

(*-*)浩
(*-*)浩オリジナル
2019-11-13 11:36:174276ブラウズ

Java クラスはいつロードされますか?

クラスはいつロードされますか?

クラスのロードは、クラス ローダー (Classloader) を通じて完了します。中国式の [eagerlyload] (他のクラスが参照している限りロードする) でクラスをロードするか、または遅延ロード [lazy load] (ロード前にクラスの初期化が行われるまで待機する) のいずれかになります。 (推奨学習: java コース)

ただし、これはさまざまな JVM 実装に関連していると思いますが、JLS によって保証されています (静的初期化要件がロードされる場合のみ) )。

クラスはいつ初期化されますか?

クラスがロードされた後、クラスの初期化が行われます。これは、すべてのクラスの静的メンバーが初期化されることを意味します。クラスは次の状況で初期化されます。

インスタンスは new() キーワードまたは class.forName() リフレクションを使用して作成されますが、ClassNotFoundException が発生する可能性があります。

クラスの静的メソッドが呼び出されます

#クラスの静的フィールドが割り当てられます

#静的フィールドにアクセスされますが、それは定数ではありません

最上位クラスのassert ステートメントで実行されます

リフレクションは、java.lang.reflect パッケージの特定のメソッドなどのクラスを初期化することもできます。JLS では、「クラスはいかなる理由でも初期化されない」と厳密に規定されています。上記以外のもの。

クラスの初期化方法

クラスの初期化がいつトリガーされるかは、Java 言語仕様に正確に記述されていることがわかりました。ただし、フィールド (フィールド、静的または非静的)、ブロック (静的または非静的)、さまざまなクラス (サブクラスとスーパークラス)、およびさまざまなインターフェイス (サブインターフェイス、実装クラス、スーパーインターフェイス) については明確に理解してください。初期化の順序も重要です。クラス。

実際、多くのコア Java 面接の質問と SCJP の質問は、これらの概念に基づいています。クラスの初期化に関するいくつかのルールを次に示します。

クラスの初期化は、上から下の順序で行われます。したがって、上部で宣言されたフィールドは下部のフィールドよりも早く初期化されます

スーパー クラスはサブクラスおよび派生クラスよりも早く初期化されます

クラスの初期化が静的フィールドへのアクセスによってトリガーされる場合, then 静的フィールドを宣言したクラスのみが初期化され、静的フィールドがサブクラス、サブインターフェイス、またはその実装クラスによって参照されている場合でも、スーパークラスの初期化やサブクラスの初期化はトリガーされません。

インターフェイスの初期化によって、親インターフェイスは初期化されません。

静的フィールドの初期化はクラスの静的初期化中に行われ、非静的フィールドの初期化はクラスのインスタンスの作成中に行われます。これは、静的フィールドが非静的フィールドの前に初期化されることを意味します。

非静的フィールドは、コンストラクターを通じて初期化されます。サブクラスのコンストラクターは、初期化を行う前に、親クラスのコンストラクターを暗黙的に呼び出します。これにより、非静的変数またはインスタンス変数 (親クラス) が確実に初期化されます。子供よりも早いです。

以上がJava クラスはいつロードされますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。