美文网首页
Final影响静态代码块执行的一个例子

Final影响静态代码块执行的一个例子

作者: 小超人爱小土豆 | 来源:发表于2018-09-25 23:16 被阅读48次

看一下下面两个程序的执行结果

class FinalTest1{

    public static  Final int X = 6/3;
    

     static   {
        system.out.println("Finaltest1 static block");
    }

}
public class Test3 {

    public static void main(String[] args) {

    system.out.println(FinalTest1.X);   
    }
}

------------------------------------------------------------------------------------
class FinalTest2{

    public static  Final int X = new Random.nextInt(100);
    

     static   {
        system.out.println("Finaltest2 static block");
    }

}
public class Test3 {

    public static void main(String[] args) {

    system.out.println(FinalTest2.X);   
    }
}

最后的结果是多少?
答案:
2

Finaltest2 static block
58

问:为什么是这个答案有人知道吗?

答:第一个程序,X=6/3,这个计算过程在编译的时候就能计算出来,相当于编译时的一个常量。而第二个是在编译的时候不能得知结果,只能在运行的时候赋值。
第一个程序,编译时的常量不会导致类(FinalTest1)的初始化。第二个程序,需要运行时赋值,就需要初始化这个类。也就会执行这个静态代码块里的语句了。

final 编译时常量和编译时变量会影响类的初始化,从而影响静态代码块的执行。

相关文章

网友评论

      本文标题:Final影响静态代码块执行的一个例子

      本文链接:https://www.haomeiwen.com/subject/uquroftx.html