固定静态块和字段

时间:2015-12-07 15:53:54

标签: java

我只是想知道,是这样的:

static{ i = 10; }
static Integer i = 7;
static{ i = 12; }

与此相同:

static Integer i;
static{
    i = 10;
    i = 7;
    i = 12;
}

它会被编译成相同的字节码吗?

2 个答案:

答案 0 :(得分:2)

static{ i = 10; } 
static Integer i = 7; 
static{ i = 12; } 

将定义一个名为i的静态变量,并将其值设置为 10 ,no 7 ,no 12.非常糟糕的样式,因为最终变量取决于陈述的顺序。

static{
    Integer i = 10;
    i = 7;
    i = 12;
}

另一方面,将创建一个变量i,它存在整行三行,值为10,7和12,之后被遗忘/不再可访问。极度无用。

Integer i;
static{
    i = 10;
    i = 7;
    i = 12;
}

但是根本不会编译 - 因为i不能是静态上下文的引用。

static Integer i;
static{
    i = 10;
    i = 7;
    i = 12;
}

将产生与第一种方法相同的结果。然而,我不会在这里比较字节码。

答案 1 :(得分:0)

static块就像另一个块一样。内部的任何变量都具有该块的范围。甚至不是兄弟static块。

这意味着,在你问题中实现的第二个方式中,Integer istatic块的本地,而不是静态类成员,在块外不可用