[Expand] Programação com Objectos |
---|
Throwable
, Exception
, Error
RuntimeException
).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:
class UmaExcepção extends Exception {}
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.
<java5>
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!"); } } }
</java5>
$ java Teste1 PILHA! FINALMENTE!
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!"); } } }
$ 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>