`
qwxi_1
  • 浏览: 8523 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
最近访客 更多访客>>
文章分类
社区版块
存档分类

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

JVM 
阅读更多

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

--------------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();
      }
}

 

运行结果图:

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

 

 

 

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

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

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

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

运行结果图:

 

 

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

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

public static void main(String[] args){


  new B();


 }

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

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

public static void main(String[] args){


  new B();

  new B();
 }

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

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

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

2
1
分享到:
评论
5 楼 qwxi_1 2008-05-07  
谢谢大家的支持!我会努力的!
4 楼 changxin 2008-05-07  
总结的不错
3 楼 zhouzhao21 2008-05-07  
呵,行啊。
2 楼 qwxi_1 2008-05-06  
谢谢你的回答,如果可能的话,我想和你成为朋友
1 楼 zhouzhao21 2008-05-06  
..不好意思..我早上随便写的代码试了下..没了....
看了你的文章后在写却是都执行了...
现在也想不起来早上是怎么写的了,呵呵,不好意思...
应该你是对的,我现在也这样认为.

相关推荐

Global site tag (gtag.js) - Google Analytics