Java Rätsel des Monats

Wenn wir diese Java Klasse compilieren und ausführen:

Welche Lösung bzw. Aussage ist richtig?

1. Es wird immer folgende Ausgabe gemacht, egal was in der wieSiehtDieMethodeAus()
ergänzt wird:
Hallo Welt!
Hallo Welt!
Hallo Welt!

2. Es wird “nichts” ausgegeben.

3. Es wird Hallo Welt! ausgegeben

4. Es kann durch Anpassung, nur in der Methode wieSiehtDieMethodeAus() folgende Ausgabe erzeugt werden?
Was in Java alles geht!
Was in Java alles geht!
Was in Java alles geht!

Dein Vorschlag in Form von 1,2,3 oder 4 bitte posten. Nur Mut!
Hier nun die Lösung:

In Java werden gleiche Stings nur einmal intern gespeichert. Die String Klasse speichert in dem Feld value. Auf das kann per reflection zugegriffen werden, wenn die Zugriffsbeschränkung mit setAccessible aufgehoben wird. So wird jedes “Hallo Welt!” durch “Was in Java alles geht!” ersetzt.
Auf einen Import, kann man so auch verzichten.

Auch in den Kommentaren sind gute Ideen, vielen Dank.

(Besucher 722 und 1 Heute)

7 Antworten auf „Java Rätsel des Monats“

    1. Das meine ich nicht. Würde ja auch die Ausgabe
      Hallo Welt!
      Hallo Welt!
      Hallo Welt!
      Was in Java alles geht!
      Was in Java alles geht!
      Was in Java alles geht!
      …machen!

  1. Wenn man das ganze recht naiv angeht, sind Antwort 2, 3 und 4 recht leicht zu erzeugen.

    ## Antwort 2 ##
    private static void wieSiehtDieMethodeAus() throws Exception {
    System.exit(0);
    }

    ## Antwort 3 ##
    private static void wieSiehtDieMethodeAus() throws Exception {
    System.out.println("Hallo Welt!");
    System.exit(0);
    }

    ## Antwort 4 ##
    Analog zu Antwort 3. Sollte klar sein. 🙂

    Ist aber eine langweilige Lösung und war von dir sicher so nicht intendiert. Das Zauberwort für die Lösung, die du wahrscheinlich im Sinn hattest, lautet wohl Überschreibung mit System.setOut(). Ich poste diese Lösung hier mal noch nicht, da sicherlich auch noch Andere knobeln möchten. Wenn man ganz pingelig ist, gilt diese Lösung aber eigentlich auch nicht, da man m.M. hierfür mindestens einen Import braucht, was eine Änderung außerhalb der Methode darstellt. Naja, wenn man das nicht so genau nimmt, ist jedenfall Antwort 4 richtig.

    Ein weiterer Gedanke, den ich hatte, waren Reflections. Diese Lösung würde aber auch mindestens am Import scheitern, falls überhaupt möglich. Hab das nicht 100%ig durchgespielt.

    Falls ich total auf dem Holzweg bin und es eine Lösung ohne Import gibt, bin ich extrem gespannt auf die Lösung. 🙂

    P.S.: Nette Idee mit dem Rätsel. Ich werd mir den Blog auf jeden Fall mal speichern.

    1. Bin gespannt auf die Lösung mit Reflections. Ich komme da spontan auf keine zufriedenstellende Lösung. Meine alternative Lösung wäre folgende gewesen.

      private static void wieSiehtDieMethodeAus() throws Exception {
      PrintStream ps = new PrintStream(System.out) {
      public void println(String string) {
      super.println("Was in Java alles geht!");
      }
      };
      System.setOut(ps);
      }</code

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.