Ich habe herumalbern mit, wie ich meine Einkapselung einrichten könnte.
Aber mein Programm wird in einer unerwarteten Reihenfolge ausgeführt. Hier ist mein eher einfacher Code:
Der "Haupt":
%Vor%"Debug":
%Vor%Und schließlich "Ausgabe":
%Vor%Und die erwartete Ausgabe wäre:
Gedruckt mit schwarzer Schrift: b="true"
Gedruckt mit roter Schrift: b="true"
Wird zwischengeschaltet ...
Gedruckt mit schwarzer Schrift: Hallo
Gedruckt mit roter Schrift: Howdie
Aber ist statt der erwarteten Reihenfolge wie folgt:
Gedruckt mit schwarzer Schrift: b="true"
Wird zwischengeschaltet ...
Gedruckt mit schwarzer Schrift: Hallo
Gedruckt mit roter Schrift: b="true"
Gedruckt mit roter Schrift: Howdie
Was passiert?
BEARBEITEN: Manchmal bewegt sich die Meldung "Es wird angenommen, dass sie dazwischen ist". Ohne dass ich den Code ändere.
System.out
ist gepuffert und System.err
ist nicht, sie sind zwei verschiedene Streams, und einige Ihrer Nachrichten gehen an eins, einige an das andere.
Diese gemischten Nachrichten erscheinen daher möglicherweise nicht in der erwarteten Reihenfolge, da die Ausdrucke in System.out
verzögert werden, bis der Puffer geleert wird (manuell oder automatisch), während diejenigen auf System.err
sofort geschrieben werden sollten.
Sie können einen Stream manuell löschen, indem Sie die flush()
-Methode aufrufen.
Die Rot / Schwarz-Schreibvorgänge schreiben in zwei verschiedene Ströme: System.err
bzw. System.out
.
Diese Streams sind völlig unabhängig und bündig zu verschiedenen Zeiten.
Das Einzige, was garantiert ist (es sei denn, Sie verwenden mehrere Threads) ist, dass was auch immer Sie in System.out
schreiben, in der gleichen Reihenfolge wie geschrieben und ebenso für System.err
angezeigt wird, aber keine Garantie, wie sie sind zusammengemischt.
Tags und Links java encapsulation