Excepções (Java): Difference between revisions
From Wiki**3
No edit summary |
|||
Line 12: | Line 12: | ||
* Classes de suporte às excepções: <code>Throwable</code>, <code>Exception</code>, <code>Error</code> | * Classes de suporte às excepções: <code>Throwable</code>, <code>Exception</code>, <code>Error</code> | ||
* Tipos de excepções: ''checked exceptions'' (verificadas em tempo de compilação) e excepções durante a execução (<code>RuntimeException</code>). | * Tipos de excepções: ''checked exceptions'' (verificadas em tempo de compilação) e excepções durante a execução (<code>RuntimeException</code>). | ||
== 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: | |||
<B>class</B> UmaExcepção <B>extends</B> <B><FONT COLOR="#0095ff">Exception</FONT></B> {} | |||
=== 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íel fazê-lo. | |||
<B>public</B> <B>class</B> Teste1 { | |||
<B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">f</FONT>() <B>throws</B> UmaExcepção { | |||
<B>throw</B> <B>new</B> <FONT COLOR="#000080">UmaExcepção</FONT>(); | |||
} | |||
<B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">g</FONT>() <B>throws</B> UmaExcepção { | |||
<FONT COLOR="#000080">g</FONT>(); <I><FONT COLOR="#808080">// vai rebentar com a pilha e gerar um StackOverflowError</FONT></I></FONT></FONT> | |||
} | |||
<B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">main</FONT>(<B><FONT COLOR="#0095ff">String</FONT></B>[] args) { | |||
<I><FONT COLOR="#808080">// unreported exception UmaExcepção; must be caught or declared to be thrown</FONT></I> | |||
<I><FONT COLOR="#808080">// g();</FONT></I> | |||
<B>try</B> { | |||
<FONT COLOR="#000080">g</FONT>(); | |||
} | |||
<B>catch</B>(<B><FONT COLOR="#0095ff">StackOverflowError</FONT></B> e) { | |||
<I><FONT COLOR="#808080">// não devia ser apanhado! mas pode ser...</FONT></I> | |||
<B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"PILHA!"</FONT>); | |||
} | |||
<B>catch</B> (UmaExcepção e) { <I><FONT COLOR="#808080">/* este bloco nunca é executado! */ </FONT></I>} | |||
<B>finally</B> { <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"FINALMENTE!"</FONT>); } | |||
} | |||
} | |||
===Resultado=== | |||
<FONT COLOR="#800000"><B>$ java Teste1</B></FONT> | |||
PILHA! | |||
FINALMENTE! | |||
=== Programa 2 === | |||
<B>public</B> <B>class</B> Teste2 { | |||
<B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">f</FONT>() <B>throws</B> UmaExcepção { | |||
<B>throw</B> <B>new</B> <FONT COLOR="#000080">UmaExcepção</FONT>(); | |||
} | |||
<B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">g</FONT>() <B>throws</B> UmaExcepção { | |||
<FONT COLOR="#000080">f</FONT>(); | |||
} | |||
<B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">main</FONT>(<B><FONT COLOR="#0095ff">String</FONT></B>[] args) { | |||
<B>try</B> { | |||
<FONT COLOR="#000080">g</FONT>(); | |||
} | |||
<B>catch</B> (UmaExcepção e) { | |||
<B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"UmaExcepção apanhada!"</FONT>); | |||
} | |||
<B>finally </B>{ | |||
<B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">"FINALMENTE!"</FONT>); | |||
} | |||
} | |||
} | |||
===Resultado=== | |||
<FONT COLOR="#800000"><B>$ java Teste2</B></FONT> | |||
UmaExcepção apanhada! | |||
FINALMENTE! | |||
==Exemplos== | ==Exemplos== | ||
* [[Excepções (Java)/Exemplos de múltiplas excepções|Exemplos de múltiplas excepções]] | * [[Excepções (Java)/Exemplos de múltiplas excepções|Exemplos de múltiplas excepções]] | ||
Revision as of 18:37, 23 October 2013
Introdução às Excepções
- Introdução às excepções
- Uso do mecanismo de excepções no controlo da execução de programas
Excepções em Java
- 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íel 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!