package classloader;
class FinalTest{
public static final int x=6/3;
static{
System.out.println("FinalTest is execute");
}
}
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(FinalTest.x);
}
class FinalTest{
public static final int x=6/3;
static{
System.out.println("FinalTest is execute");
}
}
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(FinalTest.x);
}
}
2
package classloader;
import java.util.Random;
class FinalTest2{
public static final int x=new Random().nextInt(100);
static{
System.out.println("FinalTest2 OK ");
}
}
public class Test2 {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(FinalTest2.x);
}
}
FinalTest2 OK
26
综上二个例子可以看出,final修饰的静态常量,在编译的时候就可以确定的值,类不需要被加载。
final 修饰的是静态变量的对象,在运行时才能确定它的值,需要加载类。