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();
}
}
运行结果图:
看到上面的结果,有人可能会怀疑,类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。
--------------------------------------------
请那位朋友看完之后,提建议,最好是把你的代码贴出来,好让我知道,我的不足。谢谢!
评论
看了你的文章后在写却是都执行了...
现在也想不起来早上是怎么写的了,呵呵,不好意思...
应该你是对的,我现在也这样认为.
发表评论
- 浏览: 1308 次
- 性别:

- 来自: 邯郸

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
SCJP(310-055)学习之旅— ...
我晕 看着是实例化了抽象类,实际上是实例化了一个抽象类的 ...
-- by whitenegro -
SCJP(310-055)学习之旅— ...
谢谢大家的支持!我会努力的!
-- by qwxi_1 -
SCJP(310-055)学习之旅— ...
总结的不错
-- by changxin -
SCJP(310-055)学习之旅— ...
呵,行啊。
-- by zhouzhao21 -
SCJP(310-055)学习之旅— ...
谢谢你的回答,如果可能的话,我想和你成为朋友
-- by qwxi_1






评论排行榜