Excepció verificada vs. Excepció en temps d'execució
Les excepcions són tipus especials d'esdeveniments que poden alterar el flux normal del programa. L'excepció del nom prové de "esdeveniment excepcional". Llançar una excepció és el procés de crear un objecte d'excepció i lliurar-lo al sistema d'execució. Quan el sistema d'execució rebi l'objecte d'excepció, intentarà trobar algú que el gestioni dins de la pila de trucades recorrent-lo en l'ordre invers (en què es van cridar els mètodes). El sistema d'execució té èxit si troba un mètode amb un controlador d'excepcions. El controlador d'excepcions és un bloc de codi que pot gestionar oficialment aquesta excepció. Si el sistema d'execució troba un controlador adequat, passarà l'objecte d'excepció al controlador. Això s'anomena capturar l'excepció. Tanmateix, si no es pot gestionar l'excepció, el programa finalitzarà. A Java, les excepcions hereten de la classe Throwable. Les excepcions marcades són excepcions a les quals el compilador imposa el maneig. Les excepcions en temps d'execució són un tipus d'excepcions, que el compilador no verifica.
Què és una excepció marcada?
Checked Les excepcions són objectes de la classe java.lang.exception o de les seves subclasses (excepte java.lang. RuntimeException i les seves subclasses). Les excepcions marcades es "comproven" en temps de compilació. Això vol dir que el programador ha de detectar o llançar aquestes excepcions, o si no, la compilació es queixaria (provocant un error del compilador). Per aquest motiu, moltes excepcions marcades són molt conegudes pels programadors. Per exemple, l'IOException i les seves subclasses són excepcions verificades, i sempre que el programador s'ocupa d'accedir o modificar un fitxer, el compilador comprova que totes les possibles IOExceptions siguin ateses pel programador.
Què és una excepció de temps d'execució?
Les Runtime Exceptions consisteixen en java.lang. RuntimeException i totes les seves subclasses. Teòricament parlant, tenen el mateix propòsit que les excepcions marcades, i es poden llançar o gestionar com una excepció marcada, però el compilador no les imposa el maneig. Per tant, les excepcions en temps d'execució pertanyen a la família d'excepcions no marcades. NullPointerException, NumberFormatEception, ClassCastException i ArrayIndexOutOfBoundsException són excepcions habituals en temps d'execució a Java.
Quina diferència hi ha entre l'excepció verificada i l'excepció en temps d'execució?
Tot i que tant les excepcions comprovades com les excepcions en temps d'execució són casos no desitjats durant l'execució d'un programa, tenen les seves diferències. El compilador imposa el maneig d'excepcions comprovades, però les excepcions en temps d'execució no. Per tant, les excepcions marcades s'han de llançar o gestionar per tal que el codi es compile, però no hi ha aquest requisit pel que fa a les excepcions en temps d'execució. En conseqüència, les excepcions en temps d'execució pertanyen a la categoria d'excepcions sense marcar juntament amb els errors.
El desavantatge amb les excepcions marcades és que el programador s'ha de gestionar encara que no sàpiga com fer-ho. Per tant, si el programador només llança una nova excepció sense embolicar l'original, es perdrà el rastre de la pila que pertany a l'excepció original. Aquí és on les excepcions en temps d'execució són útils. Com que totes les excepcions en temps d'execució es poden gestionar en un sol lloc, els programadors poden escriure menys quantitat de codi. D' altra banda, com que les excepcions marcades s'han de detectar, no hi ha cap sorpresa per al programador. Sempre sabrà quina excepció marcada es podria llançar mitjançant un mètode determinat. Al contrari d'això, es poden llançar diverses excepcions en temps d'execució sense que el programador ho sàpiga.