私は以下のコードを見ていて、少し奇妙なものを見つけました:
public class Sequence {
Sequence() {
System.out.print("c ");
}
{
System.out.print("y ");
}
public static void main(String[] args) {
new Sequence().go();
}
void go() {
System.out.print("g ");
}
static {
System.out.print("x ");
}
}
System.out
with "y"はメソッド宣言に属していないので、これはコンパイルエラーになると予想していました{ }
。なぜこれが有効なのですか?このコードがどのように呼び出されるか、または呼び出されるべきかわかりません。
これを実行するときにx y c g
も生成static { }
されますが、シーケンスコンストラクタの前にgetが呼び出されるのはなぜですか?