class
が「読み込まれています」とはどういう意味ですか?classはjavaにいつロードされますか?
例えば、クラスローディング時にStatic init
ブロックが実行されていると言われています。正確にclass
がロードされたら?
キャシーシエラの本から、このコードを参照してください。
class Bird {
{
System.out.print("b1 ");
}
public Bird() {
System.out.print("b2 ");
}
}
class Raptor extends Bird {
static {
System.out.print("r1 ");
}
public Raptor() {
System.out.print("r2 ");
}
{
System.out.print("r3 ");
}
static {
System.out.print("r4 ");
}
}
class Hawk extends Raptor {
public static void main(String[] args) {
System.out.print("pre "); //1
new Hawk();//2
System.out.println("hawk ");
}
}
上記のコードの出力は次のとおりです。 R1〜R4事前B1、B2、R3 R2鷹
私はhowcomeの前が印刷されて理解していカントr1の後。コードのどの部分がRaptorクラスをロードしましたか?答えの
一つは言う:
「クラスが最後の可能な瞬間に初期化されますが、そのメンバーのいずれかの前にアクセスされます」。
しかし、そのロジックによって、r1より前に印刷されるべきではありませんか? 2行目はline1の実行後にRaptorクラスのコンストラクタにアクセスするためです。
「ロード済み」という定義にはなりませんか? – byxor
クラスは、そのクラスへの参照を持つことができるときに読み込まれます。初期化は、しばしば一緒に行われる後のステップですが、必ずしもそうする必要はありません。 –
@PeterLawrey main()メソッドの実行開始前に起こっていますか? – SKG