Print Variables
Kurz: Variablenwerte auf der Konsole ausgeben — meist mit System.out.println(variable) oder formatiert mit System.out.printf(...).
Genauer: println ruft implizit toString() auf dem übergebenen Wert auf — bei eigenen Klassen liefert das ohne überschriebene toString()-Methode nur eine wenig hilfreiche Standardausgabe wie Auto@1a2b3c. printf erlaubt Formatierung mit Platzhaltern, z. B. System.out.printf("Preis: %.2f%n", preis); für zwei Nachkommastellen.
Im Detail
int alter = 25;
double preis = 19.5;
System.out.println(alter); // "25"
System.out.println("Alter: " + alter); // "Alter: 25" - Verkettung mit +
System.out.printf("Preis: %.2f%n", preis); // "Preis: 19.50" - formatiert
// Text Blocks (seit Java 15) für mehrzeilige Ausgaben
System.out.println("""
Name: Anna
Alter: %d
""".formatted(alter));
class Auto {
String farbe = "Blau";
@Override
public String toString() { return "Auto[farbe=" + farbe + "]"; } // eigene Ausgabe definieren
}
System.out.println(new Auto()); // "Auto[farbe=Blau]" - ohne toString(): "Auto@1a2b3c" (Hashcode)println ruft für jedes Nicht-String-Argument implizit .toString() auf — bei eigenen Klassen liefert die von Java automatisch generierte Standardimplementierung nur den Klassennamen plus eine wenig aussagekräftige Hashcode-Kennung (Auto@1a2b3c), solange man toString() nicht selbst überschreibt. Für Debugging-Zwecke ist eine eigene toString()-Implementierung deshalb sehr wertvoll: System.out.println(auto) zeigt dann sofort die relevanten Feldwerte statt einer nichtssagenden Speicheradresse. printf mit %.2f (zwei Nachkommastellen), %d (Ganzzahl), %s (String) und %n (plattformunabhängiger Zeilenumbruch, besser als \n) bietet feinere Kontrolle über das Ausgabeformat als reine String-Verkettung.
print vs. println vs. printf
Drei eng verwandte, aber unterschiedliche Ausgabemethoden: print() gibt aus OHNE Zeilenumbruch danach, println() hängt automatisch einen Zeilenumbruch an, printf() erlaubt formatierte Ausgabe über Platzhalter, gibt aber selbst KEINEN automatischen Zeilenumbruch aus (%n muss explizit mit angegeben werden):
System.out.print("Wert: "); // kein Zeilenumbruch danach
System.out.println(42); // "Wert: 42", DANN Zeilenumbruch
System.out.printf("%s ist %d Jahre alt%n", "Anna", 25); // eigener %n nötigString.format() — dieselbe Formatierung ohne direkte Ausgabe
String.format() nutzt exakt dieselbe Platzhalter-Syntax wie printf, liefert das Ergebnis aber als String zurück statt es direkt auf die Konsole zu schreiben — nützlich, wenn der formatierte Text weiterverarbeitet, in eine Datei geschrieben oder in einer GUI angezeigt werden soll, statt direkt auf stdout zu landen:
String nachricht = String.format("Preis: %.2f€ (%d Stück)", 19.99, 3);
// nachricht enthält jetzt "Preis: 19.99€ (3 Stück)", noch nicht ausgegebenSystem.err — Fehlerausgaben getrennt von normaler Ausgabe
Neben System.out gibt es System.err für Fehlermeldungen — beide landen standardmäßig auf der Konsole, sind aber technisch getrennte Streams, die sich unabhängig voneinander umleiten lassen (z. B. programm > log.txt 2> fehler.txt in der Kommandozeile trennt normale Ausgabe von Fehlermeldungen in zwei Dateien).
Siehe auch: Statements, Strings, String Concatenation