2012-02-02 11 views
12

私はmainメソッドなしで書かれた、このlittle quine program出くわし:メインなしクワインプログラム()

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

誰かがこの作業を行う方法を説明できますか?ありがとう。

+0

興味深いですが、どのように実行させるのですか?編集:ファイルは 'f.java'という名前でなければならないので、' javac f.java'でコンパイルしてください。 – mtsz

+1

はい。 'javac f.java'でコンパイルし、' java f'でそれを実行します。それはjdk6では動作しますが、7では動作しません。 –

+0

あなたが投稿した説明を読んだら、それでも実行しました:) – mtsz

答えて

9

行5と行6はinstance initializerです。クラスがインスタンス化されるときに呼び出されます。これは1つの定数がfという列挙型なので、インスタンス化されインスタンスイニシャライザブロックが実行されます。 znullですが、とにかくz.out.printf()を呼び出すことができるようにoutは、クラスSystemの静的メンバであることを

注意。 printfステートメントは、文字列sを、2つの引数34sという形式の文字列として受け取ります。

34は、ダブルクォートのASCIIコード"です。書式文字列には%c%1$cが入力されます。フォーマット文字列の%sは、フォーマット文字列sに置き換えられます。

関連する問題