Tratamento de Erros

O tratamento de erros na linguagem Java é feito pelo uso dos comandos try, catch, finally. E tem outros dois comandos que são: throw e o throws. No Java existe a classe Throwable que é a superclasse de todas as exceções , e tem dois ramos um das Exception ( que são exceções , por exemplo , divisão por zero ) e o outro ramo dos Error ( que são erros que não poderia ocorrer , por exemplo, estouro de memória).

Comando Try

Esse comando tem como finalidade de tentativa de executar alguma ação, exemplo gravação de dados em arquivo.

Comando Catch

Esse comando tem como finalidade de gerar a mensagem de erro e evitar que o programa pare.

Comando Finally

Esse comando sempre executa mesmo ocorrendo uma erro no projeto.

Apresentação no Java

try { // tentativa
			
} 
catch (Exception e) { // Apresenta o erro
			
}
finally{ // Sempre executa
			
}
        

A código abaixo apresenta o erro na tentativa de dividir um numero por zero e assim parando o projeto.

package entity;

public class Numero {
	
	private Integer num1;	
	private Integer num2;

	public Numero() {
	}

	public Numero(Integer num1, Integer num2) {
		super();
		this.num1 = num1;
		this.num2 = num2;
	}
		
	@Override
	public String toString() {
		return "Numero [num1=" + num1 + ", num2=" + num2 + "]";
	}

	public Integer getNum1() {
		return num1;
	}

	public void setNum1(Integer num1) {
		this.num1 = num1;
	}

	public Integer getNum2() {
		return num2;
	}

	public void setNum2(Integer num2) {
		this.num2 = num2;
	}	
}    

Executando...

package main;

import entity.Numero;

public class Main {

	public static void main(String[] args) {

		//Instacia a classe Numero
		Numero n = new Numero(10, 0);
		int resp;		
		
		//Faz o calculo
		resp = n.getNum1() / n.getNum2();
		
		//Apresenta o Resultado
		System.out.println(resp);
		
		//A divisão irá parar o programa
		//e nao irá aparecer o continua
		System.out.println("continua");		
	}	
}  

Agora será utilizado o bloco de instrução try, catch e finally para evitar que o projeto pare.

package main;

import entity.Numero;

public class Main {

	public static void main(String[] args) {

		//Instacia a classe Numero
		Numero n = new Numero(10, 0);
		int resp;		

		try {
			//Faz o calculo
			resp = n.getNum1() / n.getNum2();
			
			//Apresenta o Resultado
			System.out.println(resp);

		} catch (Exception e) {
			// Apresenta o Erro by /zero no entanto , o projeto continua funcionando
			// Até o último comando.
			System.out.println("Error: " + e.getMessage());
		}
		finally{
			System.out.println("Sempre executa o finally \n ");
		}
		
		System.out.println("continua");		
	}	
}

Executando o CRUD no main

public static void main(String[] args) {
		
		//Para testar a Lógica do CRUD
		//A chave primaria é null porque no banco de dados está auto increment
		//Quer dizer, chave primaria está sendo incrementa pelo banco.
		
		Pessoa p1 = new Pessoa(null, "jose", "jose@gmail.com");
		Pessoa p2 = new Pessoa(null, "joao", "joao@gmail.com");
		PessoaDao pd = new PessoaDao();
		try {
			
			//Comando para gravar no banco;
				pd.create(p1);
				pd.create(p2);
				
			//Comando para listaTodos
			    System.out.println(pd.findAll());
			
			//Comando para alterar uma pessoa;
			    
			    // 1º Passo
			    //Busca pelo Codigo
			   	// 2 -> é a chave primaria de pessoa no banco
			    Pessoa pessoa = pd.finallByCod(2);	
			    
			    System.out.println("pessoa:" + pessoa);
			    pessoa.setEmail("joao2@gmail.com");
			    // 2º Passo
			   	//Alterar o usuario 2
			    System.out.println("pessoa:" + pessoa);
			    			    
			    pd.update(pessoa);
			    
				//Comando para listaTodos e verificar a alteração
			    //Varrendo a lista vinda do findAll
			    //e imprimindo cada linha
			    //Classe objeto : lista de valores	
			    for(Pessoa p : pd.findAll()){
			    	System.out.println(p);
			    }
			    
				//Comando para deletar uma pessoa;    
			    //1º Passo : buscar o Codigo
			    Pessoa pessoa1 = pd.finallByCod(2);
			    //2º Passo
			    pd.delete(pessoa1);
			  
				//Comando para listaTodos
			    System.out.println(pd.findAll());   
			    
		} catch (Exception e) {
			System.out.println("Error:  " + e.getMessage());
		}		
	}    

Comando throw

O comando throw serve para gerar uma exceção no java . Ele é usado para validar alguma ação e enviar uma mensagem para o usuário, utilizando o catch.

package main;

import entity.Numero;

public class Main {

	public static void main(String[] args) {

		//Instacia a classe Numero
		Numero n = new Numero(10, 0);
		int resp;
		
		try {
			// Serve para validar se o numero2 e menor ou igual a 0
			// Se for envia uma mensagem para o catch.
			if(n.getNum2() <= 0){									
				throw new Exception("Numero 2 não pode ser zero ou menor");
			}
			
			//Faz o calculo
			resp = n.getNum1() / n.getNum2();
		
			//Apresenta o Resultado
			System.out.println(resp);

		} catch (Exception e) {
			// Apresenta o Erro by /zero no entanto , o projeto continua funcionando
			// Até o último comando.
			System.out.println("Error: " + e.getMessage());
		}
		finally{
			System.out.println("Sempre executa o finally \n ");
		}
		
		System.out.println("continua");		
	}	
}    

Comando throws

Esse comando é usado para o tratamento de erro futuro, isto é, quando o método for chamado pelo objeto da classe, tem que está obrigatoriamente dentro do try, catch.

package control;

import entity.Numero;

public class CalculaNumero {

	public Integer divisaoNumero(Numero n) throws Exception{
		return n.getNum1() / n.getNum2();
	}	
}
package main;

import control.CalculaNumero;
import entity.Numero;

public class Main {

	public static void main(String[] args) {

		//Instacia a classe Numero
		Numero n = new Numero(10, 0);
		CalculaNumero cn = new CalculaNumero();
		int resp;
		
		try {
			// Tratamento de Erro no Futuro ( Quando o método é chamado )
			resp = cn.divisaoNumero(n);
		
			System.out.println(resp);

		} catch (Exception e) {
			System.out.println("Error: " + e.getMessage());
		}
		finally{
			System.out.println("Sempre executa o finally \n ");
		}		
		System.out.println("continua");		
	}	
}