Imagine uma classe que tem um método principal
main que tem como seu único objetivo alterar todas as letras de um frase para maiúscula utilizando o método
toUpperCase() da classe
String, caso a frase esteja nula e se tente usar o método toUpperCase() na mesma será lançada uma exceção de
NullPointerException.
Primeiro vamos ver como ficaria a tal classe sem a utilização do try/catch.
/***
*
* @author Robson Fernando Gomes
*
*/
public class aumentaFrase {
public static void main(String args[])
{
String frase = null;
String novaFrase = null;
novaFrase = frase.toUpperCase();
System.out.println("Frase antiga: "+frase);
System.out.println("Frase nova: "+novaFrase);
}
}
Quando este código fosse executado o mesmo lançaria um NullPointerException, como poder ser visto na saída do console quando executamos tal programa:
Exception in thread "main" java.lang.NullPointerException
at aumentaFrase.main(aumentaFrase.java:15)
Ou seja o mesmo tentou acessar um atributo de um objeto que estava nulo. Para ajudar a melhorar a situação deve-se usar o try/catch:
/***
*
* @author Robson Fernando Gomes
*
*/
public static void main(String args[])
{
String frase = null;
String novaFrase = null;
try{
novaFrase = frase.toUpperCase();
} catch(NullPointerException e) //CAPTURA DA POSSÍVEL exceção.
{
//TRATAMENTO DA exceção
System.out.println("A frase inicial está nula, para solucionar tal problema, foi atribuído-lhe um valor default.");
frase = "Frase vazia";
novaFrase = frase.toUpperCase();
}
System.out.println("Frase antiga: "+frase);
System.out.println("Frase nova: "+novaFrase);
}
}
Quando este código fosse executado o mesmo lançaria um NullPointerException, porém esta exceção será tratada desta vez, sendo a mesma capturada pelo
catch{...} e dentro deste bloco as devidas providências são tomadas, neste caso é atribuído um valor default a variável
frase. A saída deste programa seria a seguinte:
A frase inicial está nula, para solucionar tal problema, foi atribuído-lhe um valor default.
Frase antiga: Frase vazia
Frase nova: FRASE VAZIA