静的初期化子に、javac のバグである可能性があるものがあることに気付きました。変数に値を割り当てることはできるが、その値を読み取ることはできないというシナリオを作成しました。
以下に 2 つの例を示します。1 つ目は正常にコンパイルされ、2 つ目は tmp から値を読み取ろうとするとエラーが発生しますが、何らかの理由で tmp に値を代入することが許可されています。静的初期化子の後に tmp が宣言されているため、変数の読み取りも書き込みもできないかどうかは理解できましたが、そのうちの 1 つだけのエラーは意味がありません。
//Compiles Successfully:
public class Script
{
public static Object tmp;
static
{
tmp = new Object();
System.out.println(tmp);
}
}
//error only on the read but not the assignment
public class Script
{
static
{
tmp = new Object();
System.out.println(tmp);
}
public static Object tmp;
}
この点をさらに強調すると、これは正常にコンパイルされます。
public class Script
{
static
{
tmp = new Object();
}
public static Object tmp;
}