黑马程序员技术交流社区
标题:
帮忙解释下如下代码为什么不会输出
[打印本页]
作者:
丁朋伟
时间:
2011-9-16 11:48
标题:
帮忙解释下如下代码为什么不会输出
帮忙解释下如下代码为什么不会输出:
class B {
static int value = 100;
static {
System.out.println("Class B is initialized."); //输出
}
}
class A extends B {
static {
System.out.println("Class A is initialized."); //不会输出
}
}
public class InitTest {
public static void main(String[] args) {
System.out.println(A.value); //输出100
}
}
作者:
匿名
时间:
2011-9-16 11:50
类InitTest通过A.value引用了类B中声明的静态域value。由于value是在类B中声明的,只有类B会被初始化,而类A则不会被初始化,所以就不会输出其静态代码块中的代码了
作者:
葛锐
时间:
2011-9-16 11:53
这点你想到继承的概念 在子类继承父类的基础上 是有一个隐藏代码 super 始终隐藏在子类的第一行 会先调用父类的方法,静态方法只执行1 次 A类方法没有重写 所以执行完B后 直接结束方法
[
本帖最后由 葛锐 于 2011-09-16 13:41 编辑
]
作者:
匿名
时间:
2011-9-16 12:32
class B中你定义了static 的value,然后又在class A中继承了class B,也就是说class A有了class B的value的方法,在最后的主函数中输出class A的value,自然就输出的class的value = 100咯!不知道我这样理解是不是对的呢!???
作者:
石欣欣
时间:
2011-9-16 12:52
一个类中部有两个静态代码块?
static代码块的特点是随着类的加载而执行,而且只执行一次,而你的子类和父类都有静态代码块,就相当于子类有两个static代码块,又因为super();的原因所以先执行父类的static代码块,子类的自然就不执行了,
[
本帖最后由 石欣欣 于 2011-09-16 12:58 编辑
]
作者:
匿名
时间:
2011-9-17 16:21
一个类中的静态代码块在一个类被初始化的的时候执行,且只执行一次,在这个代码中,子类A继承了类B的value变量,所以在访问A.value的时候,实际上访问的是类B的value,由于类B被使用,所以会被初始化,执行static代码块,而类A没有被使用,所以static代码块没有被执行。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2