Java静态初始化块的问题

为什么图一在静态初始化块中定义的int d= 1在块里输出的是1,在main方法就成了上面的的static int d = 9;,不是都是static状态的嘛,那么块里的定义不就是相当于改变了d的赋值吗?为什么图二把块里的int取消掉main就能输出d=1?脑袋要爆炸了..

1、首先打开电脑上的eclipse软件,配置好jdk的,如下图所示。

2、点击左上角的file,点击new,点击Javaproject,如下图所示。

3、新建一个class文件,自己取名字,勾引main选项,自动调用main方法。

4、然后输入代码arrint[] arr = new int[5]; //动态初始化,在内存中开辟连续的5块空间。

5、这时控制台会出现010[I@15db9742,如下图所示就完成了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-27
有int时表示变量的声明定义,静态块里定义了一个局部变量d,和外面的静态成员d不是同一个量,在静态块作用域里局部变量d屏蔽了静态成员d。main函数里输出的是静态成员d。本回答被提问者和网友采纳
第2个回答  2018-07-28
这个按照正确的理解给你解释一遍:
首先,不用说Testt这个类你可以理解 new 的Leaf,然后Leaf类继承了Root父类,此时注意的是他已经继承了父类Root那么他,必须要先到父类里看是否有构造,如果有那么先执行父类里的构造方法,但是进入父类后,仔细观察:
{
System.out.println(" {
System.out.println("Root的普通初始化块");
}

public Root()
{
System.out.println("Root的无参数构造函数");
}

public Root(String name)
{
this();
System.out.println("Root的带参构造函数"+name);
}
");
}

public Root()
{
System.out.println("Root的无参数构造函数");
}

public Root(String name)
{
this();
System.out.println("Root的带参构造函数"+name);
}
首先解释的是{..... }和构造是一个性质的作用,而且构造的特点就是按照位置先后执行,毋庸置疑首先输出了:
Root的普通初始化块
Root的无参数构造函数
然后第三个构造数据调用性构造没有传参,所以不予执行。
这是回到了Leaf子类模块里,这是就要注意 不是按顺序执行了 为什么呢 ?
因为Tesst类里构造了Leaf,所以先要执行Leaf构造方法
构造方法里执行了super,我想你应该明白 因此输出了:
Root的带参构造函数abc
之后很好理解 按着构造顺序执行 输出了:
Leaf的普通初始化块
Leaf的无参构造函数
OK 希望你能正确理解JAVA 构造过程。
相似回答