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