Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Exceções

Não entendi uma coisa em exceções, se eu sei que pode da erro pq eu já não desenvolvo uma lógica para inibir a entrada de um dado nulo por exemplo?, colocando um if....sei la de alguma forma.

5 respostas
solução!

Olá Diego,

Na minha opinião tratar exceções de nulo (fazer um catch de NullPointerException) é só para fins didáticos mesmo. Você tem razão em testar a possibilidade de nulo (com if) ao invés de esperar a exception disto. Ainda na minha opinião, as aulas 5 e 6 deste curso tem exemplos mais próximos da utilizaçao de exceções no mundo real.

Se existe a possibilidade do usuário retornar um valor nulo para o objeto, garanta que esse parâmetro não será aceito, não delegue a uma exceção algo que você pode implementar (ou se existe uma solução preventiva pré feita)

Tratar as exceções é uma maneira defensiva de programar. A própria IDE exige o uso de exceções em algumas bibliotecas.

Xepe, programação defensiva não é apenas usar exceções, mas também programar de forma a impedir que uma exceção ganhe vida

O código abaixo mostra claramente como um bloco while no construtor do objeto impede de se instanciar uma classe com null onde o projeto não quer.

import java.util.Scanner;

public class teste {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.println("Digite uma string");
        String textoTeste = scan.nextLine();
        TesteVazio teste = new TesteVazio(textoTeste);

    }

}

class TesteVazio {
    private String texto;
    private Scanner scan = new Scanner(System.in);

    public TesteVazio(String texto) {
        while(texto.isEmpty()) {
            System.out.println("A String não pode ser vazia");
            texto = scan.nextLine();
        }
        this.texto = texto;
        System.out.println(this.getClass() + " criada");
    }
}

o mesmo código usando try-catch, ele precisa estar no meu método main para ele enviar uma string null. Caso contrário, ele deixa passar! No meu construtor, o bloco while não vai deixar o construtor rodar enquanto o .isEmpty == true.

Só que precisamos lembrar que no Java uma String pode ser inicializada como Null. E até tentar operar nela, o programa não vai lançar nenhuma exceção. Onde houve programação defensiva?

Oi Gustavo. Entendi sua explicação. Muito obrigado.