Java 代码块:静态代码块、构造代码块、构造函数块
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:构造函数块