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);
}
}