Controlando Erros com Exceções Controlando Erros com Exceções

Propaganda
Controlando Erros com Exceç
Exceções
)?
ƒ O que é uma Exceç
Exceção (exception
(exception)?
– Uma exceç
exceção é um evento que ocorre durante a
execuç
execução de um programa que indica a
ocorrência de algo especial.
– Uma exceç
exceção é resultado da ocorrência de erros
durante a execuç
execução.
– Quando ocorre um erro em um mé
método, este
método cria um objeto Exception com os dados
do erro.
– O sistema de execuç
execução com a Exception tenta
encontrar “algué
alguém” para tratar o erro.
Controlando Erros com Exceç
Exceções
class Exception1 {
public static void main(String
main(String args[])
args[]) {
int i=0;
int j=1/i;
System.out.
println("Não
("Não vai funcionar.");
System.out.println
}
nome da
}
– Este programa gera a saí
saída:
java.
java.lang.
lang.ArithmeticException:
ArithmeticException: / by zero
at Exception1.main
(exception1.java
java:4)
:4)
Exception1.main(exception1.
nome da classe
e do método
Exceç
Exceções
class Exception3 {
static void GeraException()
GeraException() {
tratamento
try {
de exceção
int i=0;
int j=1/i;
} catch (ArithmeticException
(ArithmeticException e) {
System.out.
println("Erro
("Erro aritmetico:
System.out.println
aritmetico:\n
}
}
public static void main(String
main(String args[])
args[]) {
GeraException();
GeraException();
System.out.
println("Não
("Não vai funcionar.");
System.out.println
}
}
java.
java.lang.
lang.ArithmeticException:
ArithmeticException: / by zero
at Exception2.GeraException
(exception2.java
java:4)
:4)
Exception2.GeraException(exception2.
at Exception2.main
(exception2.java
java:8)
:8)
Exception2.main(exception2.
– A exceç
exceção foi lanç
lançada do mé
método GeraException
para o main e em seguida para o sistema (não houve
tratamento explí
explícito).
Exceç
Exceções
Erro aritmetico:
aritmetico:
java.
java.lang.
lang.ArithmeticException:
ArithmeticException: / by zero
Vai funcionar.
}
– Este programa gera a saí
saída:
Erro aritmetico:
aritmetico:
java.
java.lang.
lang.ArithmeticException:
ArithmeticException: / by zero
Vai funcionar.
Tipos de Exceç
Exceções
class Exception4 {
static void GeraException()
GeraException() {
int i=0;
O erro ocorrido em GeraException()
int j=1/i;
}
foi tratado no main()
}
" + e);
public static void main(String
main(String args[])
args[]) {
GeraException();
GeraException();
System.out.
println("Vai
("Vai funcionar.");
System.out.println
}
– Este programa gera a saí
saída:
– Este programa gera a saí
saída:
nome do arquivo e linha
onde o erro ocorreu
Tratando Exceç
Exceções
class Exception2 {
static void GeraException()
GeraException() {
int i=0;
int j=1/i;
}
public static void main(String
main(String args[])
args[]) {
try {
GeraException();
GeraException();
} catch (ArithmeticException
(ArithmeticException e) {
System.out.
println("Erro
("Erro aritmetico:
System.out.println
aritmetico:
}
System.out.
println("Vai
("Vai funcionar.");
System.out.println
}
exceção
e o motivo
" + e);
ƒ Existem dois tipos de exceç
exceções:
1. descendentes da classe RuntimeException Ö
não precisa ser tratada nem lanç
lançada, o erro será
será
tratado pelo sistema
2. descendentes da classe Exception Ö deve ser
tratada ou lanç
lançada, se não a compilaç
compilação não
terá
terá sucesso. Este tipo de exceç
exceção é dito
“checked”
checked”
1
Exception
Exception
import java.
java.io.
io.FileInputStream;
FileInputStream;
import java.
java.io.File;
io.File;
Erros do programa anterior:
class Main {
Main.
Main.java:8:
java:8: unreported exception
java.
java.io.
io.FileNotFoundException;
FileNotFoundException; must be caught or
declared to be thrown
FileInputStream in = new FileInputStream(file);
FileInputStream(file);
^
Main.
Main.java:11:
java:11: unreported exception java.
java.io.
io.IOException;
IOException;
must be caught or declared to be thrown
while ((c=in.read
()) > -1) {
((c=in.read())
^
Main.
Main.java:15:
java:15: unreported exception java.
java.io.
io.IOException;
IOException;
must be caught or declared to be thrown
in.close();
^
public static void main(String[]
main(String[] args)
args) {
File file = new File("arquivo.dat
");
File("arquivo.dat");
FileInputStream in = new FileInputStream(file);
FileInputStream(file);
int c;
while ((c=in.read
()) > -1) {
((c=in.read())
if (!Character
.isSpace((
char)c))
)c))
(!Character.
isSpace((char
System.out.
print((
((char
char)c);
)c);
System.out.print
}
in.close();
System.out.flush();
System.out.flush();
}
}
Exceç
Exceções
Exceç
Exceções
pode lançar uma exceção
ao método chamador
import java.
java.io.*;
io.*;
import java.
java.io.*;
io.*;
class Main {
public static void main(String[]
main(String[] args)
args) {
File file = new File(args
[0]);
File(args[0]);
try {
FileInputStream in = new FileInputStream(file);
FileInputStream(file);
int c;
while ((c=in.read
()) > -1) {
((c=in.read())
if (!Character
.isSpace((
char)c))
)c))
(!Character.
isSpace((char
System.out.
print((
((char
char)c);
)c);
System.out.print
}
in.close();
System.out.flush();
System.out.flush();
} catch (FileNotFoundException
(FileNotFoundException e) {
System.
System.err.
err.println(file
println(file + " is not found");
found");
} catch (IOException
(IOException e) {
e.printStackTrace
();
e.printStackTrace();
}
}
}
class Exception5 {
static void GeraException()
GeraException() throws Exception {
File file = new File("arquivo.dat
");
File("arquivo.dat");
FileInputStream in = new FileInputStream(file);
FileInputStream(file); }
lança exceção
Exceç
Exceções
public static void main(String
main(String args[])
args[]) {
GeraException();
GeraException();
System.out.
println("Não
("Não vai funcionar.");
System.out.println
}
}
– Na compilaç
compilação obteremos:
Exception5.java
:11: unreported exception
Exception5.java:11:
java.
java.lang.
lang.Exception;
Exception; must be caught or declared to
be thrown
GeraException();
GeraException();
^
1 error
Exceç
Exceções
pode lançar uma exceção
ao método chamador
class Exception5 {
static void GeraException()
GeraException() throws Exception {
throw new Exception("
Lancando uma excecao.");
Exception("Lancando
excecao.");
}
class Exception6 {
static void GeraException()
GeraException() throws Exception {
throw new Exception("
Lancando excecao.");
Exception("Lancando
excecao.");
}
public static void main(String
main(String args[])
args[])
throws Exception {
GeraException();
GeraException();
System.out.
println("Não
("Não vai funcionar.");
System.out.println
}
public static void main(String
main(String args[])
args[]) {
GeraException();
GeraException();
System.out.
println("Não
("Não vai funcionar.");
System.out.println
}
}
– Na compilaç
compilação obteremos:
cria instância
da Exception
exception5.java
:7: Exception java.
exception5.java:7:
java.lang.
lang.Exception
must be caught,
caught, or it must be declared in the
throws clause of this method.
method.
GeraException();
GeraException();
^
1 error
A exceç
exceção Exception‚
Exception‚ é dita “checked”
checked” pois ela
deve obrigatoriamente ser tratada ou lanç
lançada.
}
– Este programa gera a saí
saída:
java.
java.lang.
lang.Exception:
Exception: Lancando excecao.
excecao.
at Exception6.GeraException
(exception6.java
java:3)
:3)
Exception6.GeraException(exception6.
at Exception6.main
(exception6.java
java:7)
:7)
Exception6.main(exception6.
Aqui a exceç
exceção não é tratada, ela é apenas
enviada (lanç
(lançada) a um ní
nível superior.
2
Exceç
Exceções - finally
Exceç
Exceções – try - catch
class Exception7 {
static void GeraException()
GeraException() throws Exception {
throw new Exception("
Lancando excecao.");
Exception("Lancando
excecao.");
}
public static void main(String
main(String args[])
args[]) {
try {
GeraException();
GeraException();
} catch (Exception
(Exception e) {
System.out.
println("Erro:
("Erro: " + e);
System.out.println
}
System.out.
println("Vai
("Vai funcionar.");
System.out.println
}
}
– Este programa gera a saí
saída:
class Exception8 {
static void GeraException()
GeraException() {
int i=0;
int j=1/i;
}
public static void main(String
main(String args[])
args[]) {
try {
GeraException();
GeraException();
} finally {
System.out.
println("Vai
("Vai funcionar sempre.");
System.out.println
}
System.out.
println("Não
("Não vai funcionar.");
System.out.println
}
}
– Este programa gera a saí
saída:
Vai funcionar sempre.
java.
java.lang.
lang.ArithmeticException:
ArithmeticException: / by zero
at Exception8.GeraException
(exception8.java
java:4)
:4)
Exception8.GeraException(exception8.
at Exception8.main
(exception8.java
java:9)
:9)
Exception8.main(exception8.
Erro: java.
java.lang.
lang.Exception:
Exception: Lancando excecao.
excecao.
Vai funcionar.
Criando Novas Exceç
Exceções
class ExcecaoDeTeste extends Exception {
public String toString()
toString() {
return "ExcecaoDeTeste aconteceu";
}
}
class Exception9 {
static void GeraException()
GeraException() throws ExcecaoDeTeste {
throw new ExcecaoDeTeste();
ExcecaoDeTeste();
}
Exceç
Exceções
class ExcecaoDeTeste extends Exception {
public String toString()
toString() {
return "ExcecaoDeTeste aconteceu";
}
}
class Exception10 {
static void GeraException()
GeraException() throws ExcecaoDeTeste
{
throw new ExcecaoDeTeste();
ExcecaoDeTeste();
}
public static void main(String
main(String args[])
args[]) {
try {
GeraException();
GeraException();
} catch (ExcecaoDeTeste
(ExcecaoDeTeste e) {
System.out.
println("Tratando
("Tratando Excecao."
System.out.println
Excecao." + e);
} finally {
System.out.
.out.println
println("Funciona
("Funciona sempre.");
System
}
System.out.
println("Vai
("Vai funcionar.");
System.out.println
}
public static void main(String
main(String args[])
args[]) {
GeraException();
GeraException();
System.out.
println("Não
("Não vai funcionar.");
System.out.println
}
}
– Na compilaç
compilação obteremos:
exception9.java
:13: Exception ExcecaoDeTeste must be
exception9.java:13:
caught,
caught, or it must be declared in the throws
clause of this method.
method.
GeraException();
GeraException();
^
1 error
funciona sempre com
ou sem exceções
}
– Este programa gera a saí
saída:
Tratando Excecao.
Excecao.ExcecaoDeTeste aconteceu
Funciona sempre.
Vai funcionar.
3
Download