Excepções (Java): Difference between revisions

From Wiki**3

(Redirected page to ist:Excepções (Java))
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{NAVPO}}
#REDIRECT [[ist:Excepções (Java)]]
{{TOCright}}
 
= 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: <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>).
 
= 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&ccedil;&atilde;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ível fazê-lo.
 
<java5>
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!");  }
  }
}
</java5>
 
===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&ccedil;&atilde;o {
      <B>throw</B> <B>new</B> <FONT COLOR="#000080">UmaExcep&ccedil;&atilde;o</FONT>();
    }
    <B>public</B> <FONT COLOR="#800000">static</FONT> <FONT COLOR="#800000">void</FONT> <FONT COLOR="#000080">g</FONT>() <B>throws</B> UmaExcep&ccedil;&atilde;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&ccedil;&atilde;o e) {
        <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;UmaExcep&ccedil;&atilde;o apanhada!&quot;</FONT>);
      }
      <B>finally </B>{
        <B><FONT COLOR="#0095ff">System</FONT></B>.<FONT COLOR="#000080">out</FONT>.<FONT COLOR="#000080">println</FONT>(<FONT COLOR="#dd0000">&quot;FINALMENTE!&quot;</FONT>);
      }
    }
  }
 
===Resultado===
 
  <FONT COLOR="#800000"><B>$ java Teste2</B></FONT>
  UmaExcep&ccedil;&atilde;o apanhada!
  FINALMENTE!
 
== Programa 3 ==
 
<java5>
public class OutraExcepção extends Exception {
  public OutraExcepção() {}
  public OutraExcepção(Throwable cause){ super(cause); }
}
</java5>
 
<java5>
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..."); }
  }
 
}
</java5>
 
=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]]

Latest revision as of 16:55, 7 November 2018