如下一个类:
public class finalTest {
public static final int a=0;
public finalTest()
{
System.out.println("sss");
}
public static int aa()
{
return 11;
}
static
{
System.out.println("p");
}
}
下面是一个测试类:
public class test {
public static void main(String args[])
{
System.out.println(finalTest.a);
}
}
输出结果 0
当我们将 public static final int a=0; 改为:
public static int a=0;
输出结果为:
p
0
可以看出static final类型的变量被编译成常量表达式。所以在调用final static变量的时候不会将类初始化。
bug :
上述的描述有问题,就是说只有在final static 变量可以采用编译时常量的话,上述的分析是正确的,如果不可以的话,那么任然会调用static方法的
public class finalTest {
public static final int a=0;
public finalTest()
{
System.out.println("sss");
}
public static int aa()
{
return 11;
}
static
{
System.out.println("p");
}
}
下面是一个测试类:
public class test {
public static void main(String args[])
{
System.out.println(finalTest.a);
}
}
输出结果 0
当我们将 public static final int a=0; 改为:
public static int a=0;
输出结果为:
p
0
可以看出static final类型的变量被编译成常量表达式。所以在调用final static变量的时候不会将类初始化。
bug :
上述的描述有问题,就是说只有在final static 变量可以采用编译时常量的话,上述的分析是正确的,如果不可以的话,那么任然会调用static方法的