• Nenhum resultado encontrado

Aula14-PráticacomTratamentodeErros

N/A
N/A
Protected

Academic year: 2021

Share "Aula14-PráticacomTratamentodeErros"

Copied!
24
0
0

Texto

(1)

Linguagem de Programação II

Aula 14 – Prática com Tratamento de Erros

Prof. Nemésio Freitas Duarte Filho

(2)

Ementa

Introdução ao JAVA

Introdução e Fundamentos de POO

Classes, Objetos, Atributos e Métodos

Encapsulamento, Herança e Polimorfismo

Interfaces gráficas

Tratando erros

Pacotes - Organizando suas classes e bibliotecas

(3)

Ementa

Introdução ao JAVA

Introdução e Fundamentos de POO

Classes, Objetos, Atributos e Métodos

Encapsulamento, Herança e Polimorfismo

Interfaces gráficas

Tratando erros

Pacotes - Organizando suas classes e bibliotecas

(4)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

public class Erros {

/**

* @param args the command line arguments */

public static void main(String[] args) { System.out.println("inicio do main"); metodo1();

System.out.println("fim do main"); }

static void metodo1() {

System.out.println("inicio do metodo1"); metodo2();

System.out.println("fim do metodo1"); }

static void metodo2() {

System.out.println("inicio do metodo2"); int[] array = new int[10];

for (int i = 0; i <= 15; i++) { array[i] = i; System.out.println(i); } System.out.println("fim do metodo2"); } }

(5)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

Repare o método main chamando metodo1 e esse, por sua vez, chamando o metodo2. Cada um desses

métodos pode ter suas próprias variáveis locais, sendo que, por exemplo, o metodo1 não enxerga as variáveis

declaradas dentro do main.

Como o Java (e muitas das outras linguagens) faz isso? Toda invocação de método é empilhada... em uma

estrutura de dados que isola a área de memória de cada um. Quando um método termina (retorna), ele volta

para o método que o invocou. Ele descobre isso através da pilha de execução (stack). Basta jogar fora um

(6)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

Porém, o nosso metodo2 propositadamente possui um enorme problema: está

acessando um índice de array indevido para esse caso; o índice estará fora dos limites da array quando chegar em 10! Rode o código. Qual é a saída? O que isso representa? O que ela indica?

(7)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

Essa é o conhecido rastro da pilha (stacktrace). É uma saída importantíssima

para o programador – tanto que, em qualquer fórum ou lista de discussão, é

comum os programadores enviarem, juntamente com a descrição do problema, essa stacktrace.

Por que isso aconteceu? O sistema de exceções do Java funciona da seguinte maneira:

quando uma exceção é lançada (throws), a JVM entra em estado de alerta e vai

ver se o método atual toma alguma precaução ao tentar executar esse trecho de código.

Como podemos ver, o metodo2 não toma nenhuma medida diferente do que

vimos até agora.

Como o metodo2 não está tratando esse problema, a JVM finaliza a execução dele

anormalmente, sem esperar ele terminar, e volta um stackframe pra baixo, onde será feita nova verificação: o metodo1 está se precavendo de um problema chamado

ArrayIndexOutOfBoundsException?

Não... volta para o main, onde também não há proteção, então a JVM, a aplicação

(8)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

E Obviamente, aqui estamos forçando esse caso, e não faria sentido tomarmos

cuidado com ele. É fácil arrumar um problema desses: basta percorrermos a array no máximo até o seu length.

Porém, apenas para entender o controle de fluxo de uma Exception, vamos colocar o

código que vai tentar (try) executar o bloco perigoso e, caso o problema seja do tipo ArrayIndexOutOfBoundsException, ele será pego (catched). Repare que é

interessante que cada exceção no Java tenha um tipo... ela pode ter atributos e métodos.

2) Adicione um try/catch em volta do for, pegando ArrayIndexOutOfBoundsException. O que o código imprime?

(9)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

(10)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

Em vez de fazer o try em torno do for inteiro, tente apenas com o bloco de dentro da

main.

public static void main(String[] args) {

try {

System.out.println("inicio do main");

metodo1();

System.out.println("fim do main");

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("erro: " + e);

System.out.println("erro tratado");

}

}

(11)

Para aprendermos os conceitos básicos das

exceptions do Java, teste o seguinte código

Em vez de fazer o try em torno do for inteiro, tente apenas com o bloco de dentro da

main.

public static void main(String[] args) {

try {

System.out.println("inicio do main");

metodo1();

System.out.println("fim do main");

} catch (ArrayIndexOutOfBoundsException e) {

System.out.println("erro: " + e);

System.out.println("erro tratado");

}

}

(12)

Exceções de Runtime mais comuns

Que tal tentar dividir um número por zero? Será que a JVM

consegue fazer aquilo que nós definimos que não existe?

public class TestandoADivisao {

public static void main(String args[]) {

int i = 5571;

i = i / 0;

System.out.println("O resultado " + i);

}

}

(13)

Exceções de Runtime mais comuns

Efetuando um tratamento!

public static void main(String[] args) {

try {

int i = 5571; i = i / 0;

System.out.println("O resultado " + i);

} catch (ArithmeticException e) { System.out.println("erro: " + e); System.out.println("erro tratado"); } } }

(14)

ArrayIndexOutOfBoundsException

ArrayIndexOutOfBoundsException: Este tipo de exceção acontece

quando há a tentativa de recuperar o conteúdo de uma posição de um

array utilizando um indexador maior que a última posição (índice) do array.

(15)

ArrayIndexOutOfBoundsException

public class TesteException1{ public class TesteException1{

public static void main (String args[]){

int vetor[] = {3,6,9}; int index = 4;

try{

System.out.println("A terceira posicao é: " + vetor[index]); }

catch (ArrayIndexOutOfBoundsException e){

System.out.println("A posicao " + index + " não é valida"); }

} }

(16)
(17)

StringIndexOutOfBoundsException

import javax.swing.JOptionPane;

public class TesteException2{

public static void main (String args[]){ String str;

String mensagem = "Digite a informacao"; int icone = JOptionPane.INFORMATION_MESSAGE; try{

str = JOptionPane.showInputDialog(null, mensagem, "msg", icone); char c = str.charAt(0);

}

catch (StringIndexOutOfBoundsException e){

System.out.println("A variavel str está nula (null) "); }

} }

(18)

NumberFormatException

NumberFormatException: Este tipo de exceção acontece quando

tentamos converter uma string para um tipo primitivo numérico,

porém a string não contém apenas caracteres numéricos.

(19)

NumberFormatException

public class TesteException4{

public static void main (String args[]){

String str = "12x";

try{

int num = Integer.parseInt(str);

}

catch (NumberFormatException e){

System.out.println("Numero " + str + "

inválido");

}

}

}

(20)
(21)

Bloco finally

public class TesteException5{

public static void main (String args[]){ int vetor[] = {3,6,9};

int index = 4; try{

System.out.println("A terceira posicao é: " + vetor[index]); }

catch (ArrayIndexOutOfBoundsException e){

System.out.println("A posicao " + index + " não é valida"); }

finally{

System.out.println("Execução independente de ser gerada uma exceção ou não");

} } }

(22)
(23)

Diversos catch Para Tratar Erros Diversos em um Único Bloco de Código

public class TesteTryCatch{

public static void main (String args[]){ try{

String str1 = args[0]; String str2 = args[1];

int num1 = Integer.parseInt(str1); int num2 = Integer.parseInt(str2);

double resp = num1 / num2;

System.out.println("O resultado é: " + resp); }

catch (ArrayIndexOutOfBoundsException e){

System.out.println("Devem ser informados 2 argumentos"); }

catch (NumberFormatException e){

System.out.println("Erro na conversão de string para inteiro"); }

catch (ArithmeticException e){

System.out.println("Ocorreu uma divisão por zero!"); }

} }

(24)

Criando Exceções

public class Erros {

public void VerificaDados() throws NumberFormatException { try { boolean dados; dados = false; if (!dados) {

throw new NumberFormatException("Dados falsos"); }

} catch(NumberFormatException e){

System.out.println("Erro encontrado:" + e.getMessage()); }

}

public static void main(String args[]){

Erros obj = new Erros(); obj.VerificaDados();

} }

Referências

Documentos relacionados

a viver na felicidade completa. Vós, Deus de ternura e de bondade, nunca vos cansais de perdoar.. Concedeis agora a vosso povo tempo de graça e reconciliação. Daí, pois, em

Os estudos originais encontrados entre janeiro de 2007 e dezembro de 2017 foram selecionados de acordo com os seguintes critérios de inclusão: obtenção de valores de

A seleção portuguesa feminina de andebol de sub-20 perdeu hoje 21-20 com a Hungria, na terceira jornada do Grupo C do Mundial da categoria, a decorrer em Koprivnica, na

INDICADORES AMBIENTAIS ESSENCIAIS: UMA ANÁLISE DA SUA UTILIZAÇÃO NOS RELATÓRIOS DE SUSTENTABILIDADE DAS EMPRESAS DO SETOR DE ENERGIA ELÉTRICA SUL AMERICANO, ELABORADOS

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

A prova do ENADE/2011, aplicada aos estudantes da Área de Tecnologia em Redes de Computadores, com duração total de 4 horas, apresentou questões discursivas e de múltipla

Foram consideradas como infecção relacionada ao CVC os pacientes que apresentavam sinais locais de infecção (secreção purulenta e/ou hiperemia) e/ou hemocultura

Para se poder constatar as diferenças no comportamento dos elementos metálicos estruturais, sujeitos ao carregamento cíclico, foram incorporados níveis de esforço axial constantes