有网友给我留言了,我非常感谢,这样我可以知道,我的不足。说实话,我真的非常高兴。看到网友的回复后,我重新写了一下程序测试静态代码块到底什么时候执行,下面是我的测试过程
--------------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。
--------------------------------------------
请那位朋友看完之后,提建议,最好是把你的代码贴出来,好让我知道,我的不足。谢谢!