Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于静态和最终变量对类的影响_Java_Scope - Fatal编程技术网

Java 关于静态和最终变量对类的影响

Java 关于静态和最终变量对类的影响,java,scope,Java,Scope,如果你执行这个程序,你只会得到i值,而不是SIB,我的问题是类加载到内存中时SIB应该执行并给出输出,但这里我只得到i值?然后在类测试中保留一个方法,然后从另一个类调用该方法,然后您将获得SIB的输出,imethod(将方法也保留为静态final) 静态final变量是一个编译时常量,它的值被复制到引用它的另一个类中。因此,您的类Test将不会加载,也不会执行初始化器。当变量仅为静态时,则必须加载该类以读取当前值,然后将执行SIB块。只有当您使用new Test()实例化Test时,才会执行II

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


静态final
变量是一个编译时常量,它的值被复制到引用它的另一个类中。因此,您的类
Test
将不会加载,也不会执行初始化器。当变量仅为
静态时
,则必须加载该类以读取当前值,然后将执行SIB块。只有当您使用
new Test()

实例化
Test
时,才会执行IIB块。您的问题很难理解,部分原因是格式问题,部分原因是您误用了术语:“如果我通过保留final关键字来执行i变量”毫无意义。您不执行变量。我发现很难让您休学,请您重新表述您的问题好吗?如果OP包含静态final字段的声明和初始化,则该类中的静态代码块不会执行。如果从声明/初始化中删除final,则会执行块,这是一个好问题,只是措词不当。ok。那么静态final方法呢?。将静态final方法保留在测试类中,并从A1类调用它,然后我们将得到SIB、i、方法o/p。。。。?。这个时间类如何加载到内存中?
final
修饰符对静态方法没有影响。这与这次讨论无关。
    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);
    }
    }