代码:
package
com.lczyfz.istep.modules.test.service;
class
Root {
static
{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public
Root(){
System.out.println("Root的无参数构造器");
}
}
class
Mid extends
Root {
static
{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public
Mid(){
System.out.println("Mid的无参数构造器");
}
public
Mid(String msg){
this();
System.out.println("Mid的带参数构造器,其参数值:"
+ msg);
}
}
class
Leaf extends
Mid{
static
{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public
Leaf(){
super("疯狂java讲义");
System.out.println("执行Leaf的构造器");
}
}
public class
Test{
public static void
main(String[] args){
new
Leaf();
new
Leaf();
}
}
答案:
Root的静态初始化块
Mid的静态初始化块
Leaf的静态初始化块
Root的普通初始化块
Root的无参数构造器
Mid的普通初始化块
Mid的无参数构造器
Mid的带参数构造器,其参数值:疯狂java讲义
Leaf的普通初始化块
执行Leaf的构造器
Root的普通初始化块
Root的无参数构造器
Mid的普通初始化块
Mid的无参数构造器
Mid的带参数构造器,其参数值:疯狂java讲义
Leaf的普通初始化块
执行Leaf的构造器
============================================================
静态初始化块和声明静态Field时所指定的初始值都是该类的初始化代码,它们的执行顺序与源程序中的排列顺序相同。
代码:
package
com.lczyfz.istep.modules.test.service;
/**
* Created by hpp on 2017/4/5.
*/
class
Base{
static
{
System.out.println("Base
static");
}
public
Base(){
System.out.println("Base
init");
}
}
public class
Test1 extends
Base{
String
m
= "";
static
String n;
static
{
System.out.println("A
static");
}
public
Test1(String mValue,String nValue){
m
= mValue;
n
= nValue;
}
public void
print(){
System.out.println(m
+ " "
+ n);
}
public static void
main(String[] args){
Test1 a1 =
new
Test1("M1","N1");
Test1 a2 =
new
Test1("M2","N2");
a1.print();
a2.print();
}
答案:
Base static
A static
Base init
Base init
M1
N2
M2 N2
public static void
main(String[] args){
Test1 a1 =
new
Test1("M1","N1");
a1.print();
Test1 a2 =
new
Test1("M2","N2");
a2.print();
}
答案:
Base static
A static
Base init
M1 N1
Base init
M2 N2
}