java数据的初始化

来源:互联网 发布:优化 编辑:程序博客网 时间:2024/05/20 12:24
public class StaticInitialization {
   public static voidmain(String[] args) {
   System.out.println("Creating new Cupboard() in main");
    newCupboard();
   System.out.println("Creating new Cupboard() in main");
    newCupboard();
   table.f2(1);
   cupboard.f3(1);
}
   static Table table=newTable();
   static Cupboard cupboard=newCupboard();
}

class Bowl{
    Bowl(intmarker){
      System.out.println("Bowl("+marker+")");;
    }
    void f1(intmarker){
      System.out.println("f1("+marker+")");
    }
}

class Table{
    static Bowlbowl1=new Bowl(1);
   Table(){
      System.out.println("Table()");
      bowl2.f1(1);
    }
    void f2(intmarker){
      System.out.println("f2("+marker+")");
    }
    static Bowlbowl2=new Bowl(2);
}

class Cupboard{
    Bowlbowl3=new Bowl(3);
    static Bowlbowl4=new Bowl(4);
    Cupboard(){
      System.out.println("Cupboard()");
      bowl4.f1(2);
    }
    void f3(intmarker){
      System.out.println("f3("+marker+")");
    }
    static Bowlbowl5=new Bowl(5);
}


output:
Bowl(1) //先静态非静态变量 在构造器
Bowl(2)
Table()  //先静态非静态变量 在构造器
f1(1)
Bowl(4)  //静态变量和非静态变量先加载静态变量
Bowl(5)
Bowl(3)
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)              //静态变量只加载一次 下次不会不用加载
Cupboard()
f1(2)
Creating new Cupboard() in main
Bowl(3)
Cupboard()
f1(2)
f2(1)
f3(1)

总结一下对象的创建过程假设有个名为Dog的类; 1.即使没有显式地使用this关键字,构造器实际上也是静态方法,因此,当首次创建类型 为Dog的对象时(构造器可以看成静态方法),或者Dog类的静态方法/静态域首次被访问时.java解释器必须查找类路径,以定位Dog.class文件. 2然后载入Dog.class,有关静态初始化的所有动作, 都会执行,因此,静态初始化只在calss对象首次加载的时候进行一次。  3当用 newDog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间 4这块存储空间会被清零,这就自动地将对象中的所有基本类型数据都设置成了默认值, (对数字来说就是0,对布尔型和字符型也相同),而引用则被设置成了null 5执行所有出现于字段定义处的初始化动作。6执行构造器。


0 0
原创粉丝点击