您的位置:首页 > 职场人生

黑马程序员_基础复习02_初始化

2012-12-12 12:57 267 查看
    ------- android培训java培训、期待与您交流!
----------
 一、初始化过程

首先由一个例子来理解初始化的过程:

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); //首先static初始化,(1)

   Table(){

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

     bowl2.f1(1);

   }

   void f2(int marker){

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

   }

   static Bowl bowl2 = new Bowl(2);//(2)

}

class Cupboard{

    Bowl bowl3 = new Bowl(3);

    static Bowl bowl4 = new Bowl(4);

4000
    Cupboard(){

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

      bowl4.f1(2);

    }

    void f3(int marker){

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

    }

    static Bowl bowl5 = new Bowl(5);

}

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();

}

首先加载StaticInitialization类,执行main()方法,main方法中有static成员,先初始化static的table和cupboard,这将导致它们对应的类也被加载,先加载Table类,类中静态成员先初始化,然后构造函数初始化。结果为Bowl(1)、Bowl(2)、Table()、f1(1)。然后加载Cupboard类,同样先静态对象初始化,然后非静态对象初始化,最后构造函数初始化,结果为Bowl(4)、Bowl(5)、Bowl(3)、Cupboard()、f1(2)。main()函数中静态成员初始化完成后,其他部分按顺序执行,出现相应结果(如上)。

注意:static成员只初始化一次,之后不会再被初始化。而非静态成员会被重复初始化。

二、静态代码块

   格式:

        Static{

            静态代码块中的执行语句

        }

   特点:随着类的加载而执行,且只执行一次,并优先于主函数,用于给类进行初始化。

三、构造代码块

格式

    {

      构造代码块中的执行代码

    }

给对象进行初始化,且对象以建立就执行,优先于构造方法执行。

1)构造代码块与构造方法的区别:

       构造代码块是给所有对象进行统一初始化(用于定义所有对象的共性特征),而构造   方法是对对应的对象进行初始化(因构造方法有重载,初始化方式不同)

四、总结对象的初始化过程:

1、将.class文件加载到内存中

2、执行static代码块

3、在堆内存中开辟足够的存储空间,分配内存地址

4、给对象的属性(基本类型数据或引用)默认初始化,引用默认值为null

5、对属性进行显示初始化

6、构造代码块初始化

7、对对象进行对应的构造方法初始化

8、将内存地址赋给栈内存中的该对象的变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: