Excepció versus error
S'ha de produir un comportament inesperat quan s'executa un programa. Això pot ser degut a excepcions o errors. Són excepcions els esdeveniments que poden alterar el flux normal del programa. Els errors són condicions que es poden considerar irrecuperables. Les excepcions estan relacionades principalment amb l'aplicació en si, mentre que els errors estan relacionats amb el sistema en què s'executa el programa.
Què és una excepció?
L'excepció és un esdeveniment que pot 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ó. L'objecte d'excepció es crea pel mètode en què s'ha produït l'excepció. L'objecte d'excepció conté informació útil com ara el tipus i la descripció de l'excepció. 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). La pila de trucades és la llista ordenada de mètodes, que es van cridar abans del mètode en què es va produir l'excepció. 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 (és a dir, el tipus d'excepció coincideix amb el tipus que es pot gestionar), 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". NullPointerException i ArrayIndexOutOfBoundsException són dues excepcions habituals a Java.
Què és un error?
Un error és una condició que es pot considerar irrecuperable, com ara que el programa requereix una quantitat de memòria superior a la disponible. Aquests errors no es poden gestionar en temps d'execució. Si es produeix un error, el programa finalitzarà. A Java, els errors hereten de la classe Throwable. Els errors solen representar problemes greus que el programador (o l'aplicació) no hauria d'intentar detectar. Els errors són simplement condicions anormals, que mai s'espera que es produeixin en circumstàncies normals i, per tant, mai es preveuen. Per exemple, OutOfMemoryError, StackOverflowError i ThreadDead són aquests errors. Els mètodes mai haurien de tenir gestors d'errors.
Quina diferència hi ha entre l'excepció i l'error?
Tant els errors com les excepcions són casos no desitjats durant l'execució d'un programa. No obstant això, tenen diferències clau. El programador pot preveure excepcions, mentre que un error és difícil de preveure. Les excepcions es poden marcar o desmarcar. Però els errors sempre estan sense control. Les excepcions solen indicar un error causat pel programador. Tanmateix, els errors es produeixen a causa d'un error del sistema o d'un ús inadequat d'un recurs. Per tant, les excepcions s'han de gestionar a nivell d'aplicació, mentre que els errors s'han de tenir en compte a nivell de sistema (només si és possible). Després de gestionar una excepció, teniu la garantia de tornar al flux normal del programa. Però fins i tot si es detecta un error, és possible que el programador no sàpiga com gestionar-lo en primer lloc. A diferència de la gestió d'errors tradicional, les excepcions permeten separar el codi de gestió d'errors del codi normal.