(→Introdução às Excepções) |
(→Programa 1) |
||
Line 27: | Line 27: | ||
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ível fazê-lo. | 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ível fazê-lo. | ||
− | < | + | <source lang="java"> |
public class Teste1 { | public class Teste1 { | ||
public static void f() throws UmaExcepção { | public static void f() throws UmaExcepção { | ||
Line 49: | Line 49: | ||
} | } | ||
} | } | ||
− | </ | + | </source> |
===Resultado=== | ===Resultado=== |
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.
Considere-se a seguinte classe que define uma excepção:
<java5> class UmaExcepção extends Exception {} </java5>
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ível 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!"); }
}
}
$ java Teste1 PILHA! FINALMENTE!
<java5>
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!"); } } }
</java5>
$ java Teste2 UmaExcepção apanhada! FINALMENTE!
<java5> public class OutraExcepção extends Exception {
public OutraExcepção() {} public OutraExcepção(Throwable cause){ super(cause); }
} </java5>
<java5> public class Teste3 {
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>