Java static显示的静态初始化

static关键字后面的代码与其他静态初始化动作一样,这段代码只会执行一次;当首次生成这个类的一个对象的时候,或者首次访问属于这个类的静态数据成员的时候或者静态成员方法时候都会去执行static里面的代码。

 

package com.test.init;

public class ExplicitStatic {
    public static void main(String[] args) {
        System.out.println("Inside main()");
        Cups.cup1.f(99);//1
        Cups.ff();//2
    }
    //static Cups cups1=new Cups(); //3
    //static Cups cups2=new Cups(); //3
}


class Cup{
    Cup(int marker){
        System.out.println("Cup " +marker);
    }
    void f(int marker) {
        System.out.println("f "+marker);
    }
}

class Cups{
    static Cup cup1;
    static Cup cup2;
    static {
        System.out.println("cup1 "+cup1);
        System.out.println("cup2 "+cup2);
        cup1=new Cup(1);
        cup2=new Cup(2);
    }
    Cups(){
        System.out.println("Cups()");
    }
    
    static void ff() {
        System.out.println("Cups ff");
    }
}

1、如果1,2注释放开,3注释掉结果显示为

Inside main()
cup1 null
cup2 null
Cup 1
Cup 2
f 99
Cups ff

可以看到static里面的代码只执行了一次。

2、如果把2,3注释掉1放开结果显示为

Inside main()
cup1 null
cup2 null
Cup 1
Cup 2
f 99

3、如果把1,3注释掉2放开结果显示为

Inside main()
cup1 null
cup2 null
Cup 1
Cup 2
Cups ff

4、1、2、3都注释掉结果

Inside main()

5、1、2注释,3放开结果

cup1 null
cup2 null
Cup 1
Cup 2
Cups()
Inside main()

可以看到ExplicitStatic里面先去执行了成员变量的初始化

static Cups cups1=new Cups(),创建Cups类时,首先也会默认执行   

static Cup cup1;
static Cup cup2;的初始化,然后执行static里面的代码。

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值