? Todo programador Java eventualmente escreve um programa que produz a mensagem de erro " NullPointerExceptions " . É particularmente enigmática para aqueles que estão começando suas carreiras de programação , aprendendo Java , que não expõe os programadores para o conceito de um ponteiro. Ponteiros
Um ponteiro é um termo de ciência da computação para uma variável que , em vez de manter um pouco de informação , tem um endereço para onde essa informação pode ser encontrada na memória de um computador. Você pode imaginar a variável como um sinal de que "pontos" para onde a informação pode ser encontrada. Em linguagens como C + + , o programador tem de fazer uma escolha explícita sobre se uma determinada variável irá armazenar as informações diretamente ou , ao contrário, manter um ponteiro para a informação e esta escolha pode ter um efeito profundo sobre a eficiência do programa. Por exemplo, se uma determinada classe contém alguns megabytes de informações que devem ser passadas para uma função, ela é muito mais eficiente para dar a função um ponteiro de copiar todas as informações diretamente.
Java poupa programadores este dilema e os erros que ele pode produzir , escondendo ponteiros do programador .
Null Null
é outro termo especial em ciência da computação. Trata-se de uma variável que , literalmente, não contém nenhuma informação . Até há algumas informações que lhe é atribuído , é dito para ser igual a zero . Por exemplo, no código a seguir :
String s ; s = new String () ;
Após a primeira linha estiver concluída, "s" é igual a null. Após a segunda linha estiver concluída, "s" é igual a uma cadeia vazia.
Null Ponteiros
Embora Java tenta esconder ponteiros do programador, há um exemplo, quando ele não pode fazê-lo. Todas as aulas são realmente ponteiros para posições de memória onde os dados para a classe pode ser encontrada. Isso torna mais rápido quando as aulas devem ser passados dentro e fora de funções. No entanto , no exemplo acima , após a primeira linha é executado , um ponteiro tem sido reservada para " s ", mas não há dados foi criada . "s" não tem memória reservado para ele, por isso é um " ponteiro nulo. "
Null Pointer Exceções
Agora que você sabe o que é um ponteiro nulo é , considere o seguinte duas linhas de código :
string s ; s.charAt (0 ) //Pega o primeiro caracter da string
o código está pedindo o primeiro caractere . um objeto string que simplesmente não existe. Em outras palavras, ele está pedindo o impossível. Assim que isso ocorrer, Java percebe o problema e lança uma " NullPointerException " para permitir que o usuário ou o programador sabe que algo deu errado.
Exemplo
Mais programadores Java nunca cometa o erro acima: eles sabem objetos como cordas deve ser inicializado com o comando "new". No entanto, considere a seguinte função:
impressão public void (String s) {System.out.println ( s); }
Inicialmente , este código parece bem : a função recebe uma String a partir de em outras partes do programa e imprime na tela. No entanto, se a pessoa que está executando a função de enviado é uma seqüência que não foi devidamente inicializado ? A NullPointerException seria lançada.
Depuração e Prevenção
O primeiro passo para a prevenção NullPointerExceptions é garantir que novos objetos de classe são sempre devidamente inicializado. No entanto, ninguém é perfeito , então o segundo passo é adquirir o hábito de realizar policiamento de dados para funções. Dados de entrada deve sempre ser tratado como indigno de confiança , de modo a seguinte modificação poderia ser feita :
impressão public boolean (String s) {try {System.out.println ( s); return true; //Deixe o resto . do programa conhecer a operação foi bem sucedida } catch ( NullPointerException e) { return false; . //Deixe o resto do programa conhecer a operação falhou }}
a vantagem dessa abordagem pró-ativa é que o resto do programa pode ser escrito para julgar o quão sério é o problema , ao invés de deixar imediatamente e dar ao usuário uma mensagem de erro feio e enigmática.