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.
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.
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.