class MyTest{ static { System.out.println("这是一个静态的代码块");
} static final String name ="java权威指南"; static int page; } public class TestCompileConstant { public static void main(String[] args) { System.out.println(MyTest.name); System.out.println(MyTest.page); } }结果是: java权威指南 这是一个静态的代码块 0
为什么是这个结果?
这个跟final有关,我个人的理解final static 和 static 在执行的时候是不相同的。 tatic变量执行前会检查类的static,如果有则执行 final static常量则不会检查,执行执行你可以尝试着将“java权威指南”的final去掉看看结果,然后再将两个变量都设置成final再执行。
JVM会把所有相关的类通过Classloader加载进来,然后你入口程序调用哪个它就触发哪个。直到main()执行结束,JVM的后台进程会继续做收尾处理,等后台进程结束后整个程序就停止了。
class MyTest{
static {
System.out.println("这是一个静态的代码块");
}
static final String name ="java权威指南";
static int page;
}
public class TestCompileConstant {
public static void main(String[] args) {
System.out.println(MyTest.name);
System.out.println(MyTest.page);
}
}结果是:
java权威指南
这是一个静态的代码块
0
为什么是这个结果?
这个跟final有关,我个人的理解final static 和 static 在执行的时候是不相同的。
tatic变量执行前会检查类的static,如果有则执行
final static常量则不会检查,执行执行你可以尝试着将“java权威指南”的final去掉看看结果,然后再将两个变量都设置成final再执行。