(→Exemplos) |
|||
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]] | ||
Throwable
, Exception
, Error
RuntimeException
).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í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</FONT></FONT> } 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!