第六周动手动脑

 实际参数列表和形式参数列表长度不同。如果自定义类内存在一个自定义构造方法,那么系统将不再提供默认的无参构造方法。所以当定义一个有参的构造方法时,应当注意需要再定义一个无参的构造方法。

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调用同一类中重载的构造器   this();   System.out.println("Mid的带参数构造器,其参数值:" + msg);  } } class Leaf extends Mid {  static{   System.out.println("Leaf的静态初始化块");  }  {   System.out.println("Leaf的普通初始化块");  }   public Leaf()  {   //通过super调用父类中有一个字符串参数的构造器   super("Java初始化顺序演示");   System.out.println("执行Leaf的构造器");  }

}

public class TestStaticInitializeBlock {  public static void main(String[] args)  {   new Leaf();   

 } }

所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是:

父类的静态初始化块

子类的静态初始化块

父类的初始化块

父类的构造函数

子类的初始化块

子类的构造函数可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员。 类的这种“没有名字”的“成员”,多用于初始化类的字段。

猜你喜欢

转载自www.cnblogs.com/zaixiachengxuyuan/p/11696408.html