Excepções (Java): Difference between revisions
From Wiki**3
No edit summary |
|||
| (37 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{NAVPO}} | |||
{{TOCright}} | |||
= Introdução às Excepções = | |||
* Introdução | * 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:PO | [[category:Ensino]] | ||
[[category:PO]] | |||
[[category:Java]] | |||
Latest revision as of 13:14, 22 September 2023
Introdução às Excepções
- Introdução às excepções
- 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:
class UmaExcepção extends Exception {}
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.
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!"); }
}
}
Resultado
$ java Teste1 PILHA! FINALMENTE!
Programa 2
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!");
}
}
}
Resultado
$ java Teste2 UmaExcepção apanhada! FINALMENTE!
Programa 3
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).