Java静态初始化块的问题
为什么图一在静态初始化块中定义的intd=1在块里输出的是1,在main方法就成了上面的的staticintd=9;,不是都是static状态的嘛,那么块里的定义不就是相...
为什么图一在静态初始化块中定义的int d= 1在块里输出的是1,在main方法就成了上面的的static int d = 9;,不是都是static状态的嘛,那么块里的定义不就是相当于改变了d的赋值吗?为什么图二把块里的int取消掉main就能输出d=1?脑袋要爆炸了..
展开
3个回答
展开全部
有int时表示变量的声明定义,静态块里定义了一个局部变量d,和外面的静态成员d不是同一个量,在静态块作用域里局部变量d屏蔽了静态成员d。main函数里输出的是静态成员d。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个按照正确的理解给你解释一遍:
首先,不用说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 构造过程。
首先,不用说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 构造过程。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询