Czasami pisząc aplikację chcielibyśmy wiedzieć ile czasu wykonują się pewne jej fragmenty (pętle, zaawansowane obliczenia itp). Stwórzmy prostą klasę, która umożliwi nam włączenie i wyłączenie stopera oraz poda uzyskane czasy.
/**
* Prosty stoper
* @author kodatnik.blogspot.com
*/
class Stoper {
// pola prywatne klasy
// czas startu stopera
private long start;
// czas stopu stopera
private long stop;
// nazwa stopera
private String nazwa;
// konstruktor bezparametrowy
public Stoper() {
// przypisujemy pusty łańcuch do pola nazwa
// wywołując konstruktor jednoparametrowy z naszej klasy
this("");
}
// konstruktor z jednym parametrem - nazwa stopera
public Stoper(String nazwa) {
// przypisujemy do pola nazwa przekazany łańcuch tekstowy
this.nazwa = nazwa;
}
// metoda uruchamiana przy starcie stopera
public void start(){
// pobieramy aktualny czas - start stopera
start = System.currentTimeMillis();
}
// metoda zatrzymująca nasz stoper
public void stop(){
// pobieramy aktualny czas - stop stopera
stop = System.currentTimeMillis();
}
// metoda zwraca w sekundach czas pomiędzy uruchomieniem, a zatrzymaniem stopera
public double pobierzWynik(){
// zamiana milisekund na sekundy
return (stop - start) / 1000.0;
}
// przesłonięta metoda toString()
public String toString(){
// zwracamy w formie tekstowej informacje o naszym stoperze
return nazwa + ": " + this.pobierzWynik() + " s.";
}
}
Proste wykorzystanie naszej klasy:
// tworzymy obiekt klasy Stoper
Stoper stoper = new Stoper("Test");
// uruchamiamy stoper
stoper.start();
// tutaj instrukcje, których czas wykonania chcemy zmierzyć
// zatrzymujemy stoper
stoper.stop();
// wyświetlamy na ekranie uzyskany czas
System.out.println(stoper);
Do pobrania czasu uzyskanego przez nasz stoper możemy skorzystać z metody pobierzWynik().
Do pobrania czasu uzyskanego przez nasz stoper możemy skorzystać z metody pobierzWynik(). Dostaniemy wtedy liczbę sekund (typ double).
Metoda toString() konwertuje dowolny obiekt na łańcuch tekstowy. Każda klasa w Javie posiada tę metodę (jest ona dziedziczona z klasy Object). Możemy oczywiście przesłonić wersję oryginalną naszą własną tak jak zrobiliśmy to w klasie Stoper.
Operator this odnosi się do bieżącej instancji obiektu, ale również umożliwia odwołanie do dowolnego konstruktora wewnątrz klasy (odwołanie takie jest dokonywane na podstawie typu i liczby parametrów).