Excepções (Java): Difference between revisions
From Wiki**3
No edit summary |
|||
Line 81: | Line 81: | ||
UmaExcepção apanhada! | UmaExcepção apanhada! | ||
FINALMENTE! | FINALMENTE! | ||
=== Programa 3 === | |||
public class Z { | |||
void f() throws UmaExcepção { throw new UmaExcepção(); } | |||
void g() throws UmaExcepção { f(); } | |||
void h() throws OutraExcepção { throw new OutraExcepção(); } | |||
public static void main(String args[]) throws OutraExcepção { | |||
Z z = new Z(); | |||
try { z.g(); z.h(); } | |||
catch (UmaExcepção u) { System.out.println("u"); throw new OutraExcepção(u); } | |||
//catch (UmaExcepção u) { System.out.println("u"); throw new RuntimeException("batata", u); } | |||
catch (Throwable t) { System.out.println("t"); } | |||
finally { System.out.println("done! one way or another..."); } | |||
} | |||
} | |||
</java5> | |||
==Exemplos== | ==Exemplos== |
Revision as of 18:39, 23 October 2013
Introdução às Excepções
- Introdução às excepções
- Uso do mecanismo de excepções no controlo da execução de programas
Excepções em Java
- Mecanismo de excepções em Java
- Excepções e erros
- Classes de suporte às excepções:
Throwable
,Exception
,Error
- Tipos de excepções: checked exceptions (verificadas em tempo de compilação) e excepções durante a execução (
RuntimeException
).
Mecanismo das Excepções em Java
Estes exemplos muito simples ilustram casos artificiais e servem para demonstrar o mecanismo das excepções. Não devem ser tomados como modelo de programação.
Classe "UmaExcepção"
Considere-se a seguinte classe que define uma excepção:
class UmaExcepção extends Exception {}
Programa 1
Este programa ilustra o processamento básico de excepções.
Neste exemplo, pode ainda ver-se como um erro pode ser tratado em tempo de execução. Embora não seja habitual tratar os erros como se fossem excepções, é possíel fazê-lo.
public class Teste1 { public static void f() throws UmaExcepção { throw new UmaExcepção(); } public static void g() throws UmaExcepção { g(); // vai rebentar com a pilha e gerar um StackOverflowError } public static void main(String[] args) { // unreported exception UmaExcepção; must be caught or declared to be thrown // g(); try { g(); } catch(StackOverflowError e) { // não devia ser apanhado! mas pode ser... System.out.println("PILHA!"); } catch (UmaExcepção e) { /* este bloco nunca é executado! */ } finally { System.out.println("FINALMENTE!"); } } }
Resultado
$ java Teste1 PILHA! FINALMENTE!
Programa 2
public class Teste2 { public static void f() throws UmaExcepção { throw new UmaExcepção(); } public static void g() throws UmaExcepção { f(); } public static void main(String[] args) { try { g(); } catch (UmaExcepção e) { System.out.println("UmaExcepção apanhada!"); } finally { System.out.println("FINALMENTE!"); } } }
Resultado
$ java Teste2 UmaExcepção apanhada! FINALMENTE!
Programa 3
public class Z {
void f() throws UmaExcepção { throw new UmaExcepção(); } void g() throws UmaExcepção { f(); } void h() throws OutraExcepção { throw new OutraExcepção(); }
public static void main(String args[]) throws OutraExcepção { Z z = new Z(); try { z.g(); z.h(); } catch (UmaExcepção u) { System.out.println("u"); throw new OutraExcepção(u); } //catch (UmaExcepção u) { System.out.println("u"); throw new RuntimeException("batata", u); } catch (Throwable t) { System.out.println("t"); } finally { System.out.println("done! one way or another..."); } }
} </java5>