Difference between revisions of "Excepções (Java)"

From Wiki**3

(Classe "UmaExcepção")
(Programa 2)
Line 59: Line 59:
 
== Programa 2 ==
 
== Programa 2 ==
  
  <B>public</B> <B>class</B> Teste2 {
+
<java5>
    <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 {
+
public class Teste2 {
      <B>throw</B> <B>new</B> <FONT COLOR="#000080">UmaExcep&ccedil;&atilde;o</FONT>();
+
  public static void f() throws UmaExcepção {
    }
+
    throw new UmaExcepção();
    <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>();
+
  public static void g() throws UmaExcepção {
    }
+
    f();
    <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> {
+
  public static void main(String[] args) {
        <FONT COLOR="#000080">g</FONT>();
+
    try {
      }
+
      g();
      <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>);
+
    catch (UmaExcepção e) {
      }
+
      System.out.println("UmaExcepção apanhada!");
      <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>);
+
    finally {
      }
+
      System.out.println("FINALMENTE!");
    }
+
    }
  }
+
  }
 +
}
 +
</java5>
  
 
===Resultado===
 
===Resultado===

Revision as of 18:26, 8 November 2015

Programação com Objectos
Introduction
Creation and Destruction
Inheritance & Composition
Abstraction & Polymorphism
Code Organization
Java Topics
Inner Classes
Enumerations
Data Structures
Exceptions
Input/Output
RTTI
Other Topics
JUnit Tests
UML Topics
Design Patterns
"Simple" Factory
Composite & Visitor
Command
Strategy & State
Template Method
Observer
Abstract Factory
Decorator & Adapter
Façade (aka Facade)

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:

<java5> class UmaExcepção extends Exception {} </java5>

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

 $ java Teste1
 PILHA!
 FINALMENTE!

Programa 2

<java5>

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!");
    }
  }
}

</java5>

Resultado

 $ java Teste2
 UmaExcepçã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

Exercícios