Ce face System
System nu poate fi instanțiată; folosești direct câmpurile și metodele ei statice. Cele mai cunoscute sunt cele trei fluxuri standard: System.out pentru rezultate, System.err pentru mesaje de eroare și System.in pentru citirea de la tastatură.
System.out și System.err sunt obiecte PrintStream, cu metodele println (scrie și trece la rând nou), print (fără rând nou) și printf (cu format, ca String.format). Ambele apar implicit în terminal, dar sunt fluxuri separate: în linia de comandă poți trimite rezultatele într-un fișier (java Main > rezultat.txt) și să vezi în continuare erorile pe ecran. Din acest motiv, ordinea în care apar textele din out și err nu este garantată.
Tot aici găsești timpul (currentTimeMillis, nanoTime), oprirea programului (exit), variabilele de mediu (getenv), proprietățile (getProperty) și copierea rapidă de array-uri (arraycopy).
Ce returnează
Câmpurile out și err sunt PrintStream; in este InputStream.
Exemple
Exemplul 1: println, print și printf
public class Main {
public static void main(String[] args) {
System.out.println("Raport pentru Ana");
System.out.print("Note: ");
System.out.print(9);
System.out.print(", ");
System.out.println(10);
System.out.printf("Media: %.2f, oraș: %s%n", 9.5, "Iași");
}
}
Rezultat
Raport pentru Ana
Note: 9, 10
Media: 9.50, oraș: Iași
Exemplul 2: Rezultate pe out, erori pe err
Liniile cu probleme merg pe System.err. Aici le scriem la final, pentru că ordinea dintre cele două fluxuri nu este garantată.
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] linii = {"Ana;9", "Ion;x", "Maria;10", "Radu"};
List<String> erori = new ArrayList<>();
for (String linie : linii) {
String[] parti = linie.split(";");
if (parti.length == 2 && parti[1].matches("\\d+")) {
System.out.println(parti[0] + " are nota " + parti[1]);
} else {
erori.add(linie);
}
}
for (String e : erori) {
System.err.println("Linie invalidă: " + e);
}
}
}
Rezultat
Ana are nota 9
Maria are nota 10
Linie invalidă: Ion;x
Linie invalidă: Radu
Greșeli frecvente
- Scrii mesajele de eroare pe
System.out: când rezultatul este redirecționat într-un fișier, erorile ajung amestecate cu datele. - Te bazezi pe ordinea dintre
System.outșiSystem.errîn terminal: fluxurile au buffere separate și pot apărea în altă ordine. - Folosești
\nînprintf: merge, dar%npune separatorul de rând potrivit sistemului.
Comenzi înrudite
System.in: Intrarea standard: textul scris de utilizator la tastatură sau trimis programului dintr-un fișier.System.exit: Oprește imediat programul (JVM-ul) cu un cod de ieșire: 0 înseamnă succes, altă valoare înseamnă eroare.String.format: Construiește un șir dintr-un șablon cu %s, %d, %.2f etc.; formatted() face același lucru pe șablon.System.getProperty: Citește proprietățile JVM-ului (versiunea Java, sistemul de operare, directorul curent); lineSeparator() dă separatorul de rând.