服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

分享java类初始化顺序,经典例程


  package c06;
  
  import java.util.*;
  public class classordertest {
  
  /**
  * @param args
  */
  public static void main(string[] args) {
  // todo auto-generated method stub
  new classb().display();
  new classb().dispa();
  system.gc();
  }
  
  }
  
  class classa{
  {
  int x=100,y=getnumber(100);
  system.out.println("classa.init block:x="+x+":y="+y);
  }
  
  static{
  int sx=100,sy=getnumber(100);
  system.out.println("classa.static block:sx="+sx+":sy="+sy);
  }
  
  int ix=(int)(math.random()*100);
  final int iy=(int)(math.random()*100);
  static int iz=getnumber(100);
  int ax=getnumber(100);
  
  static void dispa(){
  system.out.println("classa.dispa()");
  }
  static int getnumber(int base){
  system.out.println("classa.getnumber(int base)");
  return (int)(math.random()*base);
  }
  
  void display(){
  system.out.println("ix="+this.ix);
  system.out.println("iy="+this.iy);
  system.out.println("iz="+this.iz);
  system.out.println("ax="+this.ax);
  dispa();
  }
  
  classa(){
  system.out.println("classa.constructor");
  }
  protected void finalize(){
  system.out.println("classa.destructor");
  }
  }
  
  class classb extends classa{
  static{
  system.out.println("classb.static block");
  }
  protected void finalize() {
  system.out.println("classb.destructor");
  super.finalize();
  }
  {
  int bx=100;
  system.out.println("classb.init block:bx="+bx);
  }
  classb(){
  super();
  system.out.println("classb.constructor");
  }
  }
  
  /*
  * 运行结果
  classa.getnumber(int base)
  classa.static block:sx=100:sy=54
  classa.getnumber(int base)
  classb.static block
  classa.getnumber(int base)
  classa.init block:x=100:y=74
  classa.getnumber(int base)
  classa.constructor
  classb.init block:bx=100
  classb.constructor
  ix=78
  iy=78
  iz=52
  ax=82
  classa.dispa()
  classa.getnumber(int base)
  classa.init block:x=100:y=88
  classa.getnumber(int base)
  classa.constructor
  classb.init block:bx=100
  classb.constructor
  classa.dispa()
  classb.destructor
  classa.destructor
  classb.destructor
  classa.destructor
  
  总结:
  
  1、类只有在使用new调用创建的时候才会被java类装载器装入
  
  2、java类首次装入时,会对静态成员变量或方法进行一次初始化
  
  3、创建类实例时,首先按照父子继承关系进行初始化
  
  4、类实例创建时候,首先初始化块部分先执行,然后是构造方法;然后从本类继承的子类的初始化块执行,最后是子类的构造方法
  
  5、类消除时候,首先消除子类部分,再消除父类部分*/

扫描关注微信公众号