疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java程序执行顺序


 

   

  代码执行顺序

  1、静态块:父类静态块、子类静态块

  2、父类块、父类构造器

  3、子类块、子类构造器

  也就是:静态块优于其他代码块和构造器,然后是父类中的代码块和者构造器、最后才是子类中的代码块和者构造器。

  代码:

  public class Mastiff extends Dog {

  // 静态方法块

  static {

  System.out.println("static block");

  }

  // 方法块

  {

  System.out.println("block");

  }

  // 构造器

  public Mastiff() {

  System.out.println("Mastiff");

  }

  public static void main(String[] args){

  new Mastiff();

  }

  }

  public class Dog {

  // 静态方法块

  static{

  System.out.println("super static block");

  }

  // 方法块

  {

  System.out.println("super block");

  }

  // 构造器

  public Dog() {

  System.out.println("Dog");

  }

  }

  执行结果:

  super static block

  static block

  super block

  Dog

  block

  Mastiff

  赋值顺序

  1、父类成员变量赋值

  2、父类方法块赋值

  3、父类构造器赋值

  4、子类成员变量赋值

  5、子类方法块赋值

  6、子类构造器赋值

  也就是,先给成员变量赋值,然后执行方法块赋值,最后才是构造器赋值。

  代码:

  public class Mastiff extends Dog {

   public String type="子类成员变量赋值";

  // 方法块

  {

  System.out.println(type);

  type = "子类方法块赋值";

  }

  // 构造器

  public Mastiff() {

  System.out.println(type);

  type = "子类构造器赋值";

  }

  public static void main(String[] args){

  new Mastiff();

  }

  }

  public class Dog {

  public String type="父类成员变量赋值";

  // 方法块

  {

  System.out.println(type);

  type = "父类方法块赋值";

  }

  // 构造器

  public Dog() {

  System.out.println(type);

  type = "父类构造器赋值";

  }

  }

  执行结果:

  父类成员变量赋值

  父类方法块赋值

  子类成员变量赋值

  子类方法块赋值