Ouvi do professor que a maioria das anormalidades em estudos futuros são exceções nulas do ponteiro. Então reserve um tempo para jogar para verificar o que é uma exceção de ponteiro nulo
1: As principais razões para a ocorrência de exceções de ponteiro nulo são as seguintes:
(1) Quando um objeto não existe, ele gerará uma exceção obj.method () // o objet Obj não existe
(2) Ao acessar ou modificar um campo que não existe em um objeto, uma exceção será gerada obj.method () // o método não existe
(3) a variável da string não é inicializada;
(4) Os objetos do tipo de interface não são inicializados com classes específicas, como:
Lista LT; vai relatar um erro
Lista lt = new ArrayList (); Não haverá erro
Quando o valor de um objeto está vazio, você não julga estar vazio. Você pode tentar adicionar uma linha de código antes do seguinte código:
if (rb! = null && rb! = "")
Mudar para:
if (rb == null); if (rb! == null && rb! = "") ou if ((""). igual a (rb)))Solução para o ponteiro nulo:
Concentre -se na linha em que o erro ocorre e diagnostique erros específicos através de duas razões principais causadas pela exceção do ponteiro nulo. Ao mesmo tempo, para evitar a ocorrência de indicadores nulos, é melhor colocar valores "nulos" ou nulos antes do valor definido ao fazer o processamento do julgamento.
Uma breve análise das exceções comuns do ponteiro nulo:
(1) Erro de ponteiro nulo java.lang.nullPointerException
Existem 8 tipos de dados básicos em Java. Os valores das variáveis podem ter seus valores padrão. Se eles forem adicionados sem atribuição normal, a máquina virtual Java não poderá ser compilada corretamente. Portanto, o uso de tipos básicos de dados Java geralmente não causará exceções de ponteiro nulo. No desenvolvimento real, a maioria das exceções do ponteiro nulo está principalmente relacionado às operações de objetos.
2. Mecanismo de manuseio de exceção de Java
Existem duas maneiras de lidar com o código que pode ter exceções:
Primeiro, use a declaração de tentativa ... Catch no método para capturar e lidar com exceções. A instrução CACHE pode ter vários outros para corresponder a várias exceções. Por exemplo:
public void p (int x) {try {...} catch (Exceção e) {...} finalmente {...}} Segundo, para exceções que não podem ser processadas ou aquelas que precisam ser transformadas, passe -o na declaração do método.
A declaração de arremessos lança uma exceção. Por exemplo:
public void test1 () lança myException {... if (....) {tiro new MyException ();}}Se cada método simplesmente lançar uma exceção, em uma chamada aninhada de várias camadas para o método de chamada do método, a máquina virtual Java pesquisará o bloco de código do método, onde a exceção ocorre até o bloco de código que lida com a exceção é encontrado. Em seguida, entregue a exceção à declaração de captura correspondente para processamento. Se a máquina virtual Java voltar ao método Main () na parte inferior da pilha de chamadas do método, se o bloco de código que lida com a exceção ainda não for encontrado, as etapas a seguir serão tratadas:
Primeiro, ligue para o método PrintStackTrace () do objeto de exceção e imprima as informações de exceção da pilha de chamadas do método.
Segundo, se o encadeamento que ocorre exceção for o thread principal, toda a execução do programa termina; Se não for o encadeamento principal, o thread será encerrado e outros threads continuam sendo executados.
Através da análise e do pensamento, podemos ver que, quanto mais cedo o processamento anormal, menores os recursos e o tempo consumidos, menor o escopo do impacto. Portanto, não jogue exceções que você pode lidar com o chamador também.
Outro ponto não pode ser ignorado: finalmente, as instruções devem executar o código em qualquer caso, que pode garantir a confiabilidade de algum código que deve ser executado em qualquer caso. Por exemplo, quando a consulta do banco de dados é anormal, a conexão JDBC deve ser liberada, etc. A instrução finalmente é executada antes da instrução Return, independentemente de sua ordem ou local, ou se há uma exceção no bloco de tentativa. A única situação em que a declaração finalmente não é executada é que o método executa o método System.Exit (). System.Exit () Funções para encerrar a máquina virtual Java atualmente em execução. O valor de retorno do retorno não pode ser alterado atribuindo um novo valor à variável no bloco de instrução finalmente. Também é recomendável não usar a declaração de retorno no bloco Finalmente. É sem sentido e pode facilmente levar a erros.
Finalmente, você também deve prestar atenção às regras de sintaxe para o tratamento de exceções:
Primeiro, as declarações de tentativa não podem existir sozinhas, mas podem ser compostas de captura e finalmente
Tente ... pegar ... finalmente, tente ... pegue, tente ... finalmente, tente ... finalmente, as declarações de captura podem ter uma ou mais e, finalmente, as declarações podem ser no máximo uma. As três palavras -chave tentam, capturar e finalmente não podem ser usadas sozinhas.
Segundo, o escopo das variáveis nos três blocos de código é independente e não pode ser acessado um do outro. Se você deseja estar acessível nos três blocos, precisará definir a variável fora desses blocos.
Terceiro, quando vários blocos de captura são usados, a máquina virtual Java corresponde a uma das classes de exceção ou sua subclasse e executa o bloco de captura sem executar outros blocos de captura.
Quarto, não há outras declarações que se seguem após a declaração de arremesso, porque elas não têm a oportunidade de serem executadas.
Quinto, se um método chama outro método que declara a exceção lançada, esse método lida com a exceção ou declara o lançado.
2.2 Diferença entre as palavras -chave Throw and Throws:
O arremesso é usado para lançar uma exceção, dentro do corpo do método. O formato de sintaxe é: LONGETECT RECECTION.
Os lances são usados para declarar qual exceção pode ser lançada por um método. Após o nome do método, o formato de sintaxe é:
Lança o tipo de exceção 1, exceção tipo 2 ... Tipo de exceção n.
Três: Os seguintes lista várias situações e soluções correspondentes, onde podem ocorrer exceções de ponteiro nulo:
Snippet de código 1:
out.println (request.getParameter ("nome de usuário"));Análise: A função do segmento de código 1 é muito simples, que é produzir o valor da entrada do usuário "Nome de usuário".
Nota: Parece que a instrução acima não pode encontrar erros de sintaxe e, na maioria dos casos, não há problema. No entanto, se um usuário não fornece o valor do campo de formulário "nome de usuário" ao inserir dados ou ignorar o formulário diretamente inserida por alguma maneira, o valor dessa solicitação. Exceção "java.lang.nullpointerException". Além disso, mesmo que o objeto possa estar vazio, alguns métodos do Java.Lang.Object ou objeto em si são chamados, como ToString (), igual (objeto obj) e outras operações.
Snippet de código 2:
String userName = request.getParameter ("nome de usuário"); If (nome de usuário.equals ("root")) {...}Análise: A função do segmento de código 2 é detectar o nome de usuário fornecido pelo usuário. Se for um usuário cujo nome de usuário é "root", algumas operações especiais serão executadas.
Nota: No segmento de código 2, se um usuário não fornecer o valor do campo de formulário "nome de usuário", o nome de usuário do objeto String é um valor nulo e um objeto nulo não pode ser comparado diretamente com outro objeto. Da mesma forma, a página JSP, onde o segmento de código 2 está localizado lançará um erro de ponteiro vazio.
Um pequeno truque: se você deseja comparar o valor de retorno de um determinado método com uma constante e colocar a constante na frente, pode evitar chamar o método igual do objeto nulo. por exemplo:
If ("root" .equals (nome de usuário)) {...}Mesmo que o objeto de nome de usuário retorne um objeto nulo, não haverá exceções de ponteiro nulo aqui e poderá ser executado como de costume.
Snippet 3:
String userName = session.getAttribute ("session.username"). ToString ();Análise: A função do segmento de código 3 é retirar o valor da sessão.username na sessão e atribuir o valor ao nome de usuário do objeto String.
NOTA: Em geral, se o usuário já teve uma sessão, nenhum problema ocorrerá; No entanto, se o servidor de aplicativos reiniciar no momento e o usuário não tiver logado novamente (também pode ser que o usuário feche o navegador, mas ainda abre a página original.) Então, o valor da sessão será inválido neste momento, fazendo com que o valor da sessão.username na sessão esteja vazio. A execução direta da operação ToString () em um objeto com NULL fará com que o sistema jogue uma exceção de ponteiro nulo.
Snippet 4:
public static void main (string args []) {pessoa p = null; p.setName ("Zhang San"); System.out.println (p.getName ()); }Análise: Declare um objeto de pessoa e imprima o nome do nome no objeto.
NOTA: Neste momento, seu P terá uma exceção de ponteiro nulo, porque você acabou de declarar que esse objeto de tipo de pessoa não criou um objeto; portanto, não há referência de endereço em sua pilha. Não crie necessariamente um objeto ao usar o objeto e usar o método.
R: Comece a usá -lo diretamente, independentemente de o objeto estar vazio ou não.
(JSP) segmento 1:
out.println (request.getParameter ("nome de usuário"));Análise: A função do segmento de código 1 é muito simples, que é produzir o valor da entrada do usuário "Nome de usuário".
Nota: Parece que a instrução acima não pode encontrar erros de sintaxe e, na maioria dos casos, não há problema. No entanto, se um usuário não fornece o valor do campo de formulário "nome de usuário" ao inserir dados ou ignorar o formulário diretamente inserida por alguma maneira, o valor dessa solicitação. Exceção "java.lang.nullpointerException". Além disso, mesmo que o objeto possa estar vazio, alguns métodos do Java.Lang.Object ou objeto em si são chamados, como ToString (), igual (objeto obj) e outras operações.
(JSP) Snippet 2:
String userName = request.getParameter ("nome de usuário"); If (nome de usuário.equals ("root")) {...}Análise: A função do segmento de código 2 é detectar o nome de usuário fornecido pelo usuário. Se for um usuário cujo nome de usuário é "root", algumas operações especiais serão executadas.
Nota: No segmento de código 2, se um usuário não fornecer o valor do campo de formulário "nome de usuário", o nome de usuário do objeto String é um valor nulo e um objeto nulo não pode ser comparado diretamente com outro objeto. Da mesma forma, a página JSP onde o segmento de código 2 está localizado lançará um erro de ponteiro nulo (java.lang.nullpointerException).
(JSP) Snippet 3:
String userName = session.getAttribute ("session.username"). ToString ();Análise: A função do segmento de código 3 é retirar o valor da sessão.username na sessão e atribuir o valor ao nome de usuário do objeto String.
NOTA: Em geral, se o usuário já teve uma sessão, nenhum problema ocorrerá; No entanto, se o servidor de aplicativos reiniciar no momento e o usuário não tiver logado novamente (também pode ser que o usuário feche o navegador, mas ainda abre a página original.) Então, o valor da sessão será inválido neste momento, fazendo com que o valor da sessão.username na sessão esteja vazio. A execução direta da operação do tostring () em um objeto que é nulo fará com que o sistema jogue um (java.lang.nullpointerException) exceção do ponteiro nulo.
O exposto acima é o conteúdo completo da breve discussão sobre o manuseio de exceções de Java de exceções de ponteiro nulo trazidas a você pelo editor. Espero que todos apoiem mais wulin.com ~