Aby nasz kawałek kodu zaczął działać musimy go najpierw skompilować przy pomocy guziczka w naszym Eclipsie/IntelliJ czy innym IDE bądź użyć polecenia javac z linii poleceń. W tym prostym stwierdzeniu widoczne są dwa podstawowe etapy tj.:
- Kompilacja (compile-time) , czyli zamiana naszego czytelnego kodu w bytecode
- Działanie programu (run-time), czyli wykonanie bytecode’u przez maszynę wirtualną
compile-time
Podczas obu powyższych etapów może zadziać się mnóstwo rzeczy. Jeśli w Twoim IDE popełnisz jakiś błąd składniowy, nie obsłużysz wyjątku typu ‘checked exception’ lub na przykład spróbujesz rzutować obiekt typu X na, niebędący w nim w żadnej relacji pokrewieństwa, typ Y (Rys.1) to Twoje IDE podkreśli ten kod na czerwono. Są to wyjątki typu compile-time, gdyż są wykrywane na etapie kompilacji. Kompilator reaguje na błąd programisty i nie dopuszcza do jego uruchomienia – i super! Lepiej dowiedzieć się o błędzie w kodziku szybciej niż później c’nie?
run-time
Naciskasz strzałkę Run. I o to jesteśmy w run-time’ie. Instrukcje bytecode’u są wykonywane przez wirtualną maszynę. Co się może stać podczas tego etapu? Twój program wykona się. Jakoś. Może poprawnie, a może zostanie podniesiony wyjątek typu run-time? Co jeśli podzielisz przez 0 w swojej wypieszczonej metodzie? Jeśli masz metodę która losuję dzielnik z przedziału 0-10 to skąd biedny kompilator ma wiedzieć na etapie kompilacji jaka liczba zostanie wybrana? Zadzieje się to dopiero na etapie wykonywania programu, czyli w run-time’ie. Jeśli wylosowaną liczbą będzie 0, to cóż – wyjątek typu run-time zostanie zgłoszony. Co jeśli zrzutujesz klasę bazową na pochodną? Kompilator stwierdzi – ufam Tobie. I wtedy uruchamiasz aplikację i świat run-time ma całkowicie inne zdanie na temat Twoich programistycznych poczynań (Rys. 2) bowiem instrukcja checkcast każe wirtualnej maszynie upewnić się, że faktycznie programista wiedział co robi.
Co się stanie jeśli wykonasz metodę na zmiennej instancyjnej, której nie przypisałeś wartości? Inny wyjątek typu run-time zostanie zgłoszony.
Fail fast as possible. Zawsze staraj się dążyć do tego, aby błędy były wykrywane na jak najwcześniejszym etapie. Im o problemie dowiesz się szybciej tym lepiej dla Ciebie. Zawiało grozą.