WEB开发网
开发学院WEB开发Jsp 分享JAVA类初始化顺序,经典例程 阅读

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

 2008-01-05 19:25:34 来源:WEB开发网   
核心提示:package c06;import java.util.*;public class ClassOrderTest {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubnew Clas

  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、类消除时候,

Tags:分享 JAVA 初始化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接