12

メインメソッドなしで書かれたこの小さなクワインプログラムに出くわしました:

enum f {
  f;
  System z;
  String s="enum f{f;System z;String s=%c%s%1$c;{z.out.printf(s,34,s);z.exit(0);}}";
  {z.out.printf(s,34,s);
  z.exit(0);}
}

誰かがこれがどのように機能するか説明できますか? ありがとう。

4

1 に答える 1

9

5 行目と 6 行目はインスタンスの初期化子です。クラスがインスタンス化されるときに呼び出されます。これは という名前の 1 つの定数を持つ列挙型であるためf、一度インスタンス化され、インスタンス初期化ブロックが実行されます。

ですが、クラスの静的メンバーであるため、とにかく呼び出すことzができます。このステートメントは、文字列を 2 つの引数を持つフォーマット文字列として受け取り、それ自体を受け取ります。nulloutSystemz.out.printf()printfs34s

34二重引用符の ASCII コードです"。フォーマット文字列の%candに入力されます。%1$cフォーマット文字列の%sは、フォーマット文字列s自体に置き換えられます。

于 2012-02-02T22:32:10.657 に答える