-1

如果你执行这个程序,你只会得到i值而不是 SIB,我的问题是什么时候加载到内存中的类 SIB 应该执行并且应该给出 ooutput,但这里我只得到i值?然后在类测试中保留一个方法,然后从另一个类调用该方法,然后您将获得 SIB、i方法的输出(将方法也保留为静态最终)

    class Test      
    {
    static final int i =3;  
    static
    {
        System.out.println("SIB");
    }
    {
        System.out.println("IIB");
    }
    }
    class A1
    {
    public static void main(String[] args) 
    {
        System.out.println(Test.i);
    }
    }
4

1 回答 1

7

static final变量是一个编译时常量,它的值被复制到引用它的另一个类中。因此,您的类Test将不会加载,也不会执行任何初始化程序。当变量为 onlystatic时,必须加载类以读取当前值,并且您的 SIB 块将被执行。IIB 块将仅在您使用实例化 Test时执行new Test()

于 2013-02-19T10:10:33.963 回答