(→Classe "UmaExcepção") |
|||
(33 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | {{NAVPO}} | |
− | + | {{TOCright}} | |
− | * Introdução | + | = Introdução às Excepções = |
+ | |||
+ | * Introdução às excepções | ||
* Uso do mecanismo de excepções no controlo da execução de programas | * Uso do mecanismo de excepções no controlo da execução de programas | ||
+ | * 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: | ||
+ | |||
+ | <source lang="java"> | ||
+ | class UmaExcepção extends Exception {} | ||
+ | </source> | ||
+ | |||
+ | == 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í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=== |
− | + | <FONT COLOR="#800000"><B>$ java Teste1</B></FONT> | |
− | + | PILHA! | |
− | + | FINALMENTE! | |
− | + | ||
+ | == 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=== | ||
+ | |||
+ | <FONT COLOR="#800000"><B>$ java Teste2</B></FONT> | ||
+ | UmaExcepção apanhada! | ||
+ | FINALMENTE! | ||
+ | |||
+ | == Programa 3 == | ||
+ | |||
+ | <source lang="java"> | ||
+ | public class OutraExcepção extends Exception { | ||
+ | public OutraExcepção() {} | ||
+ | public OutraExcepção(Throwable cause){ super(cause); } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | <source lang="java"> | ||
+ | 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..."); } | ||
+ | } | ||
+ | |||
+ | } | ||
+ | </source> | ||
+ | |||
+ | Note-se que, em geral, a função '''main''' deveria tratar as excepções (as ''checked exceptions''). | ||
+ | |||
+ | =Exemplos= | ||
+ | * [[Entradas e Saídas em Java]] | ||
− | = | + | =Exercícios= |
− | * [[ | + | * [[Excepções (Java)/Exercício 01: Stack|Stack]] |
− | * [[ | + | * [[Excepções (Java)/Exercício 02: Arabian Nights|Arabian Nights]] |
+ | [[category:Ensino]] | ||
+ | [[category:PO]] | ||
[[category:Java]] | [[category:Java]] | ||
− | |||
− |
[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).