JAVA初始化顺序小例子

最近看了一下JAVA的基础,发现差距还是不小啊!

举个最简单的例子,下面我们就来研究一下JAVA的初始化机制!

见程序:

 

public class Exp {

    public static void main (String args[]){

       System.out.println("Inside main()");

//     Cups.cup1.f(99);

       Cups cups = new Cups();

    }

}

class Cups{

    Cups(){

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

    }

    static Cup cup1;

    static Cup cup2;

    static{

       cup1 = new Cup(1);

       cup2 = new Cup(2);

    }

}

class Cup{

    Cup(int marker){

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

    }

    Cup(){

       System.out.println("CUP的构造方法");

    }

    void f(int marker){

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

    }

}

Output:

Inside main()

Cup(1)

Cup(2)

F(99)

非常简单的一段小程序,一个有三个类,一个主类,一个CUPS ,一个CUP,在主类中,我们就是创建了一个CUPS的对象,大家都知道 类创建的顺序应该是 先构造静态的对象,(初始化静态变量和对象),然后再去初始化普通的对象,当然也是先初始化变量再去构造方法,再执行普通的方法的顺序!

言归正传,当我们初始化CUPS这个类的时候,一下这种写法不知道大家用没用过,其实就是跟在static变量后的一段代码,也就是静态初始化的一种写法,所以说我们就要先去执行这一段代码!

static{

       cup1 = new Cup(1);

       cup2 = new Cup(2);

    }

在执行的过程中,要创建CUP(1)的构造方法,所以我们需要去执行CUP(int n)的构造方法,这就正常输出了!

 

在这里需要提醒的一点就是,静态的对象和变量只会初始化一次,当第二次再调用的时候就不用再次进行初始化了!

 

 

只要是有以下这种写法,那种普通的构造方法就不会再去执行了!

static{

       cup1 = new Cup(1);

       cup2 = new Cup(2);

    }

 

 

 

BUT  这里要重点强调的是如下

static{

       cup1 = new Cup(1);

       cup2 = new Cup(2);

    }

Cups(){

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

    }

 

 

{

       cup1 = new Cup(1);

       cup2 = new Cup(2);

    }

Cups(){

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

    }

 

 

以上两种是有区别的,第一种 有static的构造方法 Cups(){} 是不会去执行的

 

第二种 没有static 的 构造方法会在{cup1 = new Cup(1);cup2 = new Cup(2);}

执行完成之后,再去执行构造方法 Cup(){}

 

 

 

posted @ 2013-09-04 18:15  王超龙  阅读(223)  评论(0)    收藏  举报