4

この質問を読んだことクラスがJVMにロードされるときに、クラスのさまざまな部分がどのような順序で初期化されますか?および関連するJLS。たとえば、クラスAnimal(スーパークラス)とクラスDog(サブクラス)が次のようになっている理由を詳しく知りたいと思います。

class Animal
{
static{
System.out.println("This is Animal's static block speaking"):
}
{
System.out.println("This is Animal's instance block speaking");
}

class Dog{
static{
System.out.println("This is Dog's static block speaking");
}
{
System.out.println("This is Dog's instance block speaking");
}
public static void main (String [] args)
{
Dog dog = new Dog();
}
}

クラスをインスタンス化する前に、その直接のスーパークラスを初期化する必要があります(したがって、すべての静的変数とブロックを実行する必要があります)。したがって、基本的に問題は、スーパークラスの静的変数と静的ブロックを初期化した後、インスタンスメンバーの初期化を終了するのではなく、静的変数の初期化のために制御がサブクラスに下がるのはなぜですか?

コントロールは次のようになります。

superclass (Animal): static variables and static blocks
subclass (Dog): static variables and static blocks
superclass (Animal): instance variables and instance blocks
sublcass (Dog):instance variables and instance blocks

それがこのようにではなく、このようになっている理由は何ですか:

superclass -> static members
superclass -> instance members
subclass -> static members
sublcass-> instance members
4

2 に答える 2

7

スーパークラスの静的変数と静的ブロックを初期化した後、インスタンスメンバーの初期化を終了するのではなく、静的変数の初期化のために制御がサブクラスに下がるのはなぜですか?

静的初期化は、インスタンスが作成される前に1回行われるためです。

静力学はクラスに対応し、非静力学は特定のインスタンスに対応します。

于 2013-03-06T17:49:00.087 に答える
2

より多くの犬を作成する場合は理にかなっています

superclass (Animal): static variables and static blocks
subclass   (Dog)   : static variables and static blocks

superclass (Animal): instance variables and instance blocks
subclass   (Dog)   : instance variables and instance blocks

superclass (Animal): instance variables and instance blocks
subclass   (Dog)   : instance variables and instance blocks

superclass (Animal): instance variables and instance blocks
subclass   (Dog)   : instance variables and instance blocks
于 2013-03-06T17:53:59.403 に答える