転載グレート神:https://blog.csdn.net/piaojun_pj/article/details/5888104
コンパイルして、プログラムを実行するには、以下の出力があります。
静的ブロック 従業員の会社:中国のソフト 非 - 静的ブロック 従業員電話:0755 - 51595599 従業員(String)を Empoloyee()
私たちは、分析の結果を作りましょう:コードの34行で1オブジェクトをインスタンス化するために、第一のメモリ空間は、静的変数と初期化され、静的なブロックに割り当てられます。だからここに出力されます:静的ブロック従業員の会社:中国ソフトと従業員の会社:中国のソフト出力もショーは静的変数を初期化して、静的なブロックを実行することで、または会社はnullになります。
図2は、その後、従業員のためにメモリ内のメモリ空間を割り当て、(である、すべての変数は、ここではnullに初期化され、デフォルト値に初期化されている)、デフォルトの初期化を行います。
図3は、 デフォルトの初期化が完了すると、初期化示し始めました。非静的ブロック従業員の電話:したがって、次のような出力が存在するであろう、すなわち行5、「0755から51595599」初期電話、および実行ブロック非静的メソッド実行 0755から51595599を
4 最后才调用默认构造函数,在默认构造函数中调用了带参数的构造函数,所以在这里先输出带参数构造函数中的:Employee(String),然后才输出:Empoloyee()。
上面的代码中Manager继承了前面写的Employee类,当我们编译并运行Manager类,会产生以下的输出:
Static Block Employee Company:china soft Sub Static Block Manager department:sale Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() Sub Non-Static Block Manager salary:8000 Manager(String) Manager()
下面我们对结果做分析:
1 在行34实例化对象时,由于Manager继承了Employee,所以先从父类Employee开始;先给父类静态变量分配内存空间并初始化,然后执行父类静态块。
然后再给子类静态变量分配内存空间并初始化,然后执行子类静态块,所以会得到以下输出: Static Block Employee Company:china soft Sub Static Block Manager department:sale
2然后在内存中为父类Employee分配内存空间,并做默认初始化;再为子类Manager分配内存空间,并做默认初始化。
3默认初始化完成后,从父类开始显示初始化并执行非静态方法块和构造函数,然后再子类开始显示初始化并执行非静态方法块和构造函数。
因此会产生以下的输出: Non-Static Block Employee phone:0755-51595599 Employee(String) Empoloyee() Sub Non-Static Block Manager salary:8000 Manager(String) Manager()
你永远不知道博客园的排版有多丑