Was genau ist der technische Unterschied zwischen console.writeline
und System.out.println
? Ich weiß, dass System.out.println
in die Standardausgabe geschrieben wird, aber ist dies nicht dasselbe wie die Konsole?
Ich verstehe die Dokumentation für nicht vollständig console.writeline
.
Antworten:
Hier sind die Hauptunterschiede zwischen der Verwendung von
System.out
/.err
/.in
undSystem.console()
:System.console()
Gibt null zurück, wenn Ihre Anwendung nicht in einem Terminal ausgeführt wird ( obwohl Sie dies in Ihrer Anwendung behandeln können ).System.console()
Bietet Methoden zum Lesen von Kennwörtern ohne Echo von ZeichenSystem.out
undSystem.err
verwenden Sie die Standardplattformcodierung, während dieConsole
Klassenausgabemethoden die Konsolencodierung verwendenDieses letztere Verhalten ist möglicherweise nicht sofort offensichtlich, aber Code wie dieser kann den Unterschied demonstrieren:
Unter Windows XP mit einer Systemcodierung von Windows-1252 und einer Standardkonsolencodierung von IBM850 schreibt dieser Code:
Beachten Sie, dass dieses Verhalten davon abhängt, dass die Konsolencodierung auf eine andere Codierung als die Systemcodierung eingestellt ist. Dies ist aus einer Reihe historischer Gründe das Standardverhalten unter Windows.
quelle
Sie sind im Wesentlichen gleich, wenn Ihr Programm über eine interaktive Eingabeaufforderung ausgeführt wird und Sie stdin oder stdout nicht umgeleitet haben:
Ergebnisse in:
Der Grund dafür
Console
besteht darin, Funktionen bereitzustellen, die in dem speziellen Fall nützlich sind, in dem Sie über eine interaktive Befehlszeile ausgeführt werden:Console
auffordern und stellen sie gut in die Warteschlange, während bei Verwendung von System.in/out alle Eingabeaufforderungen gleichzeitig angezeigt werden).Beachten Sie oben, dass das Umleiten eines der Streams zur
System.console()
Rückkehr führtnull
. Eine weitere Irritation ist, dass oft keinConsole
Objekt verfügbar ist, wenn es aus einem anderen Programm wie Eclipse oder Maven erzeugt wird.quelle
Zuerst fürchte ich, Ihre Frage enthält einen kleinen Fehler. In der Klasse Console gibt es keine Methoden-Writeline. Stattdessen stellt die Klasse Console die Methode writer () bereit, die PrintWriter zurückgibt. Dieser Printwriter hat println ().
Was ist nun der Unterschied zwischen
und
Wenn Sie Ihre Anwendung über die Befehlszeile ausführen, gibt es meines Erachtens keinen Unterschied. Wenn die Konsole jedoch nicht verfügbar ist, gibt System.console () null zurück, solange System.out noch vorhanden ist. Dies kann passieren, wenn Sie Ihre Anwendung aufrufen und STDOUT in eine Datei umleiten.
Hier ist ein Beispiel, das ich gerade implementiert habe.
Als ich die Anwendung über die Eingabeaufforderung ausführte, wurde Folgendes angezeigt:
aber als ich das STDOUT in die Datei umgeleitet habe ...
Zeile 8 ist
console.writer().println()
.Hier ist der Inhalt von / tmp / test
Ich hoffe meine Erklärungen helfen.
quelle
Console.writeline
In Java gibt es keine . Es ist in .NET.Konsole und Standardausgang sind nicht gleich. Wenn Sie die von Ihnen erwähnte Javadoc-Seite lesen , werden Sie feststellen, dass eine Anwendung nur dann auf eine Konsole zugreifen kann, wenn sie über die Befehlszeile aufgerufen wird und die Ausgabe nicht wie folgt umgeleitet wird
Andere solche Fälle werden in SimonJs Antwort behandelt, obwohl er den Punkt verpasst hat, dass es keinen gibt
Console.writeline
.quelle