この記事は、主に、以下に詳述するように、Javaのクラスのアクティブおよびパッシブ引用を研究しています。
アクティブな引用、ここにアクティブな引用の5つのシナリオがあります
1.新しい、GetStatic、Putstatic、およびInvokestaticの4つのバイトコード命令に遭遇した場合、クラスが初期化されない場合、初期化され、オブジェクトの作成、静的フィールドの読み取りまたは設定、および静的メソッドを呼び出します。
2。反射
3.サブクラスが初期化される前に、親クラスは初期化されます。
4.主要なメソッドを含むクラスは、仮想マシンの開始時に初期化されます。
5。JDKの動的言語サポートを使用する場合(不明)
受動的な引用:
class superclass {static {syso( "super init"); } public static int value = 123;} class subclassはsuperclass {static {syso( "sub init")}} public class constantclass {public static final hw = "helloworld";} public class notinitialization {syso(){syso(subclass.value)// super superclass sc [] = new superclass [10] //syso(constantclass.hw);}}出力: super init 123このフィールドを直接定義するクラスのみが、静的フィールドへのアクセスのために初期化されます。サブクラスは初期化されません。最初のコメントはキャンセルされ、出力なしで実行されます。配列定義を介した参照クラスは、クラスの初期化をトリガーしませんが、仮想マシンによって自動的に生成され、オブジェクトクラスから継承されるサブクラスの初期化を初期化します。このクラスは配列を表します。配列のプロパティとメソッドは、このクラスに実装されています(長さ属性とclone())。 2番目のコメントがキャンセルされた後、出力はありません。コンピレーション中に定数が一定のプールに配置されます。 construmentclass.hwは、コンピレーション中にnotinitializationクラスの一定のプールに配置されます。 NotInitializationには、NotInitializationへの象徴的な参照はありません。
上記は、Javaのクラスへのアクティブおよびパッシブの引用に関するこの記事の簡単な議論についてのすべてです。私はそれがすべての人に役立つことを願っています。興味のある友人は、このサイトの他の関連トピックを引き続き参照できます。欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!