读书人

SCJP(310-055)学习之旅(恢复网友

发布时间: 2012-10-30 16:13:36 作者: rapoo

SCJP(310-055)学习之旅———(回复网友)静态代码块到底什么时候执行

有网友给我留言了,我非常感谢,这样我可以知道,我的不足。说实话,我真的非常高兴。看到网友的回复后,我重新写了一下程序测试静态代码块到底什么时候执行,下面是我的测试过程

--------------StaticTest.java----------------

class A
{
???? static{System.out.println("A");}


???? public static void display(){
?????????? System.out.println("A method was called!");
???? }
}

class B extends A
{
????? static int i=9;
????? static{System.out.println("B");}
}

public class StaticTest
{
????? public static void main(String[] args){
?????????????? B.display();
???? ?}
}

?

运行结果图:

SCJP(310-055)学习之旅———(恢复网友)静态代码块到底什么时候执行

看到上面的结果,有人可能会怀疑,类B加载没有,下面是一个类加载截图

?

?SCJP(310-055)学习之旅———(恢复网友)静态代码块到底什么时候执行

?

?看到了吧,类A ,类B都被加载了。由此可以得出初步结论:类在加载的时候,不会执行静态代码块。

-----------------------

下面我把Main函数改一下,类A ,类B不变,内容如下

public class StaticTest
{
????? public static void main(String[] args){
???????????????System.out.println(B.i);
??????}
}

运行结果图:

SCJP(310-055)学习之旅———(恢复网友)静态代码块到底什么时候执行

?

?

?通过结果可以知道,当访问类变量的时候,静态代码块被执行了。

后来我又试了一下,代码分别如下

public static void main(String[] args){


??new B();


?}

运行结果是 打印A B 也就是说 调用构造子的时候,静态代码块被执行。(仅针对当前程序而言)

--------------------------------------------

public static void main(String[] args){


??new B();

? new B();
?}

运行结果是 打印A B ,也就是说 静态代码块执行一次之后,就不再执行了,除非,重新启动JVM。

--------------------------------------------

请那位朋友看完之后,提建议,最好是把你的代码贴出来,好让我知道,我的不足。谢谢!

5 楼 qwxi_1 2008-05-07 谢谢大家的支持!我会努力的!

读书人网 >软件架构设计

热点推荐