2012-02-02 17 views
12

me encontré con este little quine program, escrito sin método principal:programa de Quine sin main()

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

Puede alguien explicar cómo funciona esto? Gracias.

+0

Interesante, pero ¿cómo lo dejas correr? EDITAR: El archivo debe llamarse 'f.java', por lo que se compila con' javac f.java' – mtsz

+1

Sí. Compilas con 'javac f.java' y lo ejecutas con' java f'. Funciona con jdk6, pero no con 7. –

+0

Después de leer la descripción que publicó, la ejecuté, gracias de todos modos :) – mtsz

Respuesta

9

Las líneas 5 y 6 son instance initializer. Se llama cuando se crea una instancia de la clase. Como se trata de una enumeración con una constante llamada f, se creará una instancia una vez y se ejecutará el bloque de inicializador de instancias.

Tenga en cuenta que es znull, pero out es un miembro estático de la clase System, para que pueda llamar z.out.printf() de todos modos. La instrucción printf toma la cadena s como una cadena de formato con dos argumentos, 34 y s.

34 es el código ASCII para la comilla doble ". Se rellena para %c y %1$c en la cadena de formato. El %s en la cadena de formato se reemplaza por el formato de cadena s.