(→Programa 1) |
(→Programa 2) |
||
Line 59: | Line 59: | ||
== Programa 2 == | == Programa 2 == | ||
− | < | + | <source lang="java"> |
public class Teste2 { | public class Teste2 { | ||
public static void f() throws UmaExcepção { | public static void f() throws UmaExcepção { | ||
Line 79: | Line 79: | ||
} | } | ||
} | } | ||
− | </ | + | </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!
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>