We wcześniejszych lekcjach często używałem tajemniczej komendy System.out.println() aby wyświetlić (sprawdzić) wartości jakie zostały policzone w programie. Jest to częsty sposób (niejedyny), aby sprawdzić czy program działa poprawnie. Teraz postaram się wyjaśnić, czym są strumienie systemowe wejścia i wyjścia.
Strumienie systemowe
Klasa System jest jedną z pierwszych napisanych w Javie i posiada trzy ciekawe metody, na których się teraz skupię. Są nimi strumienie systemowe:
- System.in – jest zwykle połączony z wpisywanymi wartościami z klawiatury
- System.out – wyprowadza dane, które do niego zapisujesz, do konsoli
- System.err – działa podobnie jak out, z tą różnicą, że wykorzystuje się go głównie do zasygnalizowania błędu
Wszystkie powyższe implementacje odpowiadają za reprezentację standardowych strumieni danych w systemie operacyjnymi. Mówiąc standardową mam na myśli: strumień wejścia (in) , strumień wyjścia (out) i strumień błędów. Oto przykładowe użycie każdego z nich:
public void seeSystemOut(String text) {
System.out.println("My text is " + text);
}
public void seeSystemError() {
System.err.println("Nastapił błąd w trakcie działania");
}Klasa Scanner
Zauważ, że komunikat o błędzie w Eclipsie* jest zaznaczony na żółto. Strumień wejścia System.in raczej nie będziesz używać bezpośrednio, dlatego, że jest to przestarzała metoda czytająca strumienie bajtów (mało przydatna funkcja w dzisiejszych czasach). Twórcy Javy udostępnili łatwiejszą w użyciu klasę Scanner, która opakowuje strumień wejścia i udostępnia łatwiejsze metody do pracy z nim. Jej działanie opiszę w lekcji, w której będę omawiał podstawowe użycie pętli while.
Dodatkowo klasa system posiada jeszcze dwie metody, które czasem możesz chcieć użyć:
- currentTimeMillis() – zwraca obecny czas, ale w milisekundach. Przydatne metoda, gdy chcesz się dowiedzieć jak długo trwa działanie danej metody. Policzysz wtedy różnicę między czasem na początku i na końcu bloku kodu, którego chcesz sprawdzić.
- exit(0) – ta metoda wysyła żądanie zakończenia programu w trakcie jego działania. Wartość, którą wpisuje się w argumencie oznacza status, z jakim zakończył się program. Zero oznacza tu, że program zakończył się poprawnie.
public void seeCurrentTime() {
long startTime = System.currentTimeMillis();
int sum = 0;
for (int i = 0; i < 100000000; i++) {
sum = sum + i;
// pętla utworzona po to, aby policzyć długość wykonywania się kodu
}
long endTime = System.currentTimeMillis();
System.out.println("Metoda działa " + (endTime - startTime) + " milisekundy.");
}public void exitProgram() {
long startTime = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
System.out.println("Interacja nr " + i);
if (i == 2) {
System.out.println("Koniec programu.");
System.exit(0);
}
}
long endTime = System.currentTimeMillis();
System.out.println("Metoda działa " + (endTime - startTime) + " milisekundy.");
}
*Jedno z najpopularniejszych środowisk programistycznych
Link do lekcji: https://github.com/developeronthego/java-basics/tree/main/src/main/java/basics/lesson10
Strumienie systemowe to nie jedyne strumienie w Javie. Zobacz moją lekcję o strumieniach danych: Java średnio zaawansowane #23: strumienie wejścia/wyjścia

