您的位置:首页 > 编程语言 > Java开发

java数据的初始化

2015-05-18 20:57 197 查看
public class StaticInitialization {

   public static void
main(String[] args) {

   
System.out.println("Creating new Cupboard() in main");

    new
Cupboard();

   
System.out.println("Creating new Cupboard() in main");

    new
Cupboard();

   
table.f2(1);

   
cupboard.f3(1);

}

   static Table table=new
Table();

   static Cupboard cupboard=new
Cupboard();

}

class Bowl{

    Bowl(int
marker){

   
   
System.out.println("Bowl("+marker+")");;

    }

    void f1(int
marker){

   
   
System.out.println("f1("+marker+")");

    }

}

class Table{

    static Bowl
bowl1=new Bowl(1);

   
Table(){

   
   
System.out.println("Table()");

   
   
bowl2.f1(1);

    }

    void f2(int
marker){

   
   
System.out.println("f2("+marker+")");

    }

    static Bowl
bowl2=new Bowl(2);

}

class Cupboard{

    Bowl
bowl3=new Bowl(3);

    static Bowl
bowl4=new Bowl(4);

    Cupboard()
{

   
   
System.out.println("Cupboard()");

   
   
bowl4.f1(2);

    }

    void f3(int
marker){

   
   
System.out.println("f3("+marker+")");

    }

    static Bowl
bowl5=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当用 new
Dog()创建对象的时候,首先将在堆上为Dog对象分配足够的存储空间 
4这块存储空间会被清零,这就自动地将对象中的所有基本类型数据都设置成了默认值, 
(对数字来说就是0,对布尔型和字符型也相同),而引用则被设置成了null 
5执行所有出现于字段定义处的初始化动作。6执行构造器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: