(→Programa 1) |
(→Classe "UmaExcepção") |
||
(9 intermediate revisions by the same user not shown) | |||
Line 8: | Line 8: | ||
* Mecanismo de excepções em Java | * Mecanismo de excepções em Java | ||
* Excepções e erros | * Excepções e erros | ||
− | * Classes de suporte às excepções: | + | * 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 ( | + | * 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 = | = Mecanismo das Excepções em Java = | ||
Line 17: | Line 17: | ||
== Classe "UmaExcepção" == | == Classe "UmaExcepção" == | ||
Considere-se a seguinte classe que define uma excepção: | Considere-se a seguinte classe que define uma excepção: | ||
− | + | ||
+ | <source lang="java"> | ||
+ | class UmaExcepção extends Exception {} | ||
+ | </source> | ||
== Programa 1 == | == Programa 1 == | ||
Line 24: | 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 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!"); } | |
− | + | } | |
+ | } | ||
+ | </source> | ||
===Resultado=== | ===Resultado=== | ||
Line 54: | Line 59: | ||
== Programa 2 == | == Programa 2 == | ||
− | + | <source lang="java"> | |
− | + | 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!"); | |
− | + | } | |
− | + | } | |
+ | } | ||
+ | </source> | ||
===Resultado=== | ===Resultado=== | ||
Line 82: | Line 89: | ||
== Programa 3 == | == Programa 3 == | ||
− | < | + | <source lang="java"> |
public class OutraExcepção extends Exception { | public class OutraExcepção extends Exception { | ||
public OutraExcepção() {} | public OutraExcepção() {} | ||
public OutraExcepção(Throwable cause){ super(cause); } | public OutraExcepção(Throwable cause){ super(cause); } | ||
} | } | ||
− | </ | + | </source> |
− | < | + | <source lang="java"> |
public class Teste3 { | public class Teste3 { | ||
void f() throws UmaExcepção { throw new UmaExcepção(); } | void f() throws UmaExcepção { throw new UmaExcepção(); } | ||
Line 105: | Line 112: | ||
} | } | ||
− | </ | + | </source> |
+ | |||
+ | Note-se que, em geral, a função '''main''' deveria tratar as excepções (as ''checked exceptions''). | ||
=Exemplos= | =Exemplos= |
[Expand] Programação com Objectos |
---|
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.
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!
public class OutraExcepção extends Exception {
public OutraExcepção() {}
public OutraExcepção(Throwable cause){ super(cause); }
}
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..."); }
}
}
Note-se que, em geral, a função main deveria tratar as excepções (as checked exceptions).