java中代码块执行顺序

时间:2022-10-30 15:41:19
java中代码块执行顺序

package test;

public class javatest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
   testStatic te;
         System.out.println();
         Fa t=new testStatic("ai");
    

 }

}


class testStatic extends Fa{
 
    static{
        System.out.println("son:静态代码块");
    }
    {
        System.out.println("son:构造代码块");
    }
    public testStatic(){
        System.out.println("son:构造函数块");
    }
    public testStatic(String s){
       //super(s);
        System.out.println("son:构造函数块"+s);
    }
  
 
}


class Fa{
    static{
        System.out.println("fa:静态代码块");
    }
    {
        System.out.println("fa:构造代码块");
    }
    public Fa(){
        System.out.println("fa:构造函数块");
    }
    public Fa(String s){
        System.out.println("fa:构造函数块"+s);
    }
}
 

子类继承了父类所有的方法和属性,当加载一个类时(访问其静态方法或静态域),先加载其父类。对父类静态域进行初始化(编译器自动初始化,然后执行字段定义处的初始化,以及静态代码块初始化),随后对本类的静态域进行同样操作,只进行一次。
当创建该类的实例时,先对父类中的实例变量进行初始化(自动初始化,字段初始化,实例代码块初始化,之后构造器初始化)。父类实例变量初始化完成后,对本类的实例变量进行同样操作。

因为子类继承父类所有的实例变量,你调用子类构造器的时候,不指定也会调用父类无参构造器,先完成父类变量的初始化