Java 初始化

我今天又拾起一个知识点:::

1.初始化的创建:

p = new Person(){{age = 10;name = "张三";}}
这里可以针对没相应构造函数,但又要赋值,注意是双括号!!!!!

2.初始化分类:

初始化分为两种:

1.实例初始化(Inatance Initializers)

用法是 {语句}

2.静态初始化(static Initializers)

用法是static{语句}

在第一次使用这个类时就要执行

但可以肯定的是:静态初始化总要先于实例初始化执行

今天我看到我之前写的一个代码:;

public class InitialTest {
    public static void main(String[] args) {
        new InitialTest2(6);
    }
    int n = 10;
    {
        n++;
        System.out.println(n);
    }
    static int x;
    static {
        x++;
        System.out.println(x);
    }
}
class InitialTest2 extends InitialTest {
    InitialTest2(int a)
    {
        this.a = a;
        System.out.println(a);
    }
    int a;
    {
        System.out.println(this.a);
    }
    static
    {
        x++;
        System.out.println(x);
    }
}

这个代码没有错,可是当我运行结果时,我突然忘了,为什么是这个结果

思索半天,想起来了这个知识点:

 静态初始化总要先于实例初始化执行!!!!!

这也就是为什么结果是

1  
2 
11
0
6

了。

首先,

int n;  
    {
        //语句
    }

是实例初始化。而

static
    {
      //语句
    }

是静态实例化。所以优先执行static{语句}

执行完static,然后执行其他

看代码:::

class InitialTest
{
    public static void main(String[] args)
    {
        new InitialTest2(6);
    }
    int n=10;  //step2
    {
        n++;
        System.out.println("InitialTest..."+n);
    }

    static int x;
    static
    {
        x++;
        System.out.println("static..." +x);
    }

}

class InitialTest2 extends InitialTest{
    InitialTest2(int a){
        this.a=a;
        System.out.println("this.a=" + a );
    }
    int a;
    {
        System.out.println("InitialTest2..."+this.a);
    }
    static
    {
        x++;
        System.out.println("static2..." +x);
    }
}

在看结果::

知识点一定要记住!!!!!

 

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值