Java 代码块:静态代码块、构造代码块、构造函数块

时间:2021-04-12 17:21:51

  Class : StaticFa

package edu.bai.du.lime.staticCode;

public class StaticFa {

  // 随着类的声明而执行
static {
System.out.println("Fa:静态代码块");
}
  //只有在类实例化时执行,优先构造函数块
{
System.out.println("Fa:构造代码块");
}
  //只有在类实例化时执行。
public StaticFa(){
System.out.println("Fa:构造函数块");
}
public StaticFa(String s){
System.out.println("Fa:构造函数块" + s);
}
}

  Class : StaticSon

package edu.bai.du.lime.staticCode;

public class StaticSon extends StaticFa {

  //随着类的声明而执行
static {
System.out.println("son:静态代码块");
}
  //只有在类实例化时执行,优于构造函数块先执行
{
System.out.println("son:构造代码块");
}
  //只有在类实例化时执行。
public StaticSon() {
     //如果不指定,默认调用父类的无参构造函数
super();
System.out.println("son:构造函数块");
}
public StaticSon(String s) {
     //如果不指定,默认调用父类的无参构造函数
super(s);
System.out.println("son:函数构造块" + s);
} }

  Class : StaticMain

package edu.bai.du.lime.staticCode;

public class StaticMain {

    public static void main(String[] args){
StaticSon son;
System.out.println("-----");
StaticFa fa = new StaticSon("lime");
StaticSon son2;
System.out.println("-----");
StaticFa fa2 = new StaticSon("lime");
}
}

  Console :

-----
Fa:静态代码块
son:静态代码块
Fa:构造代码块
Fa:构造函数块lime
son:构造代码块
son:函数构造块lime
-----
Fa:构造代码块
Fa:构造函数块lime
son:构造代码块
son:函数构造块lime

  得出结论:

1.执行顺序:静态代码>构造代码块>构造函数
2.静态代码块随类的声明而执行(仅执行一次),而构造代码块和构造方法则在一个类实例化后执行(实例化多少次执行多少次),其中构造代码块又优先于构造方法执行
3.子类StaticSon没有用super(s)时,默认调用fa的无参构造函数即输出:fa:构造函数块