建一个Hello.java:
public class Hello {
static
{
System.out.println("Hello,World");
System.exit(0);
}
}
Cmd运行:

在类第一次加载的时候,将会进行静态域的初始化。与实例域一样,静态域的默认初值是0、false或null,除非将它们显示设置成其他值。所有的静态域初始化语句以及静态初始化块都将按照类定义中出现的顺序执行。(书上如是说)
1. 类在加载时是先执行构造函数还是先初始化静态域呢?
2. 类第一次加载的时候将会执行,那么第二次加载会不会执行呢?
带着问题做下面两个实验
实验1:
public class Hello {
public static void main(String[] args) {
TestHello th = new TestHello();
}
}
class TestHello {
public TestHello() {
System.out.println("构造函数的Hello,world");
}
static
{
System.out.println("Hello,World");
//System.exit(0);
}
}
结果:

实验2:
public class Hello {
public static void main(String[] args) {
System.out.println("第一次使用TestHello类");
TestHello th = new TestHello();
System.out.println("第二次使用TestHello类");
TestHello th1 = new TestHello();
}
}
class TestHello {
public TestHello() {
System.out.println("构造函数的Hello,world");
}
static
{
System.out.println("静态域Hello,World");
//System.exit(0);
}
}
运行结果:

可以看得出来,第二次使用类,并没有执行静态域,那么另外一个问题是,如果我在静态域中定义变量,并且赋初值,第二次使用该类的时候变量的值还存在吗?
这部分就不用做实验了,因为类中的静态变量是被类所共享的,因此,只要第一次赋值,第二次依然可用。 - from the5fire.com
----EOF-----
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈