Nova maneira de lidar com NullPointerException, Java14 é realmente perfumado

Na linguagem Java, lidar com ponteiros nulos costuma ser uma dor de cabeça.Se você não for cuidadoso, poderá encontrar um bug on-line para obter sua avaliação de desempenho em 3,25. Acredito que todos tenham ouvido falar sobre o recém-lançado Java14 recentemente, então vamos dar uma olhada hoje. Diante do NullPointerException, que maneiras melhores de lidar com o Java14?

1. NullPointerException Tradicional

Em nosso processo de codificação, geralmente usamos chamadas encadeadas para escrever código, o que é muito conveniente e claro de escrever, mas uma vez que ocorre uma NullPointerException, ela é muito grande, porque é difícil saber quando é a exceção. Começou a acontecer.
Para um exemplo simples, como o código a seguir, para encontrar a localização do registro doméstico de um funcionário da empresa, chamamos

String city = employee.getDetailInfos().getRegistryAddress().getCity();

No processo de chamadas encadeadas, se employee, getDetailInfos()ou getRegistryAddress()está vazio, JVM lança NullPointerException,
em seguida, levou a que a causa raiz é anormal? Sem um depurador, é difícil determinar qual variável está vazia. Além disso, a JVM imprimirá apenas o método, o nome do arquivo e o número da linha que causou a exceção, só isso.
Em seguida, o seguinte, eu vou levá-lo para encontrar Java 14 como JEP 358resolver este problema.

2. NullPointerException aprimorada

A SAP implementou uma NullPointerException aprimorada para sua JVM comercial em 2006 . Em fevereiro de 2019, foi proposto como um aprimoramento para a comunidade OpenJDK e, logo depois, tornou-se um JEP. Portanto, esse recurso foi concluído em outubro de 2019 e lançado no JDK 14 .
Essencialmente, o JEP 358 visa melhorar a legibilidade da "NullPointerException" gerada pela JVM , descrevendo uma variável como " nula" .
O JEP 358 traz uma mensagem detalhada de NullPointerException , descrevendo a variável como nula ao lado do método, nome do arquivo e número da linha . Ele funciona analisando as instruções de bytecode do programa. Portanto, ele pode determinar com precisão qual variável ou expressão é nula . Mais importante, as mensagens de exceção detalhadas são desativadas por padrão no JDK 14 . Para habilitá-lo, precisamos usar opções de linha de comando:

-XX:+ShowCodeDetailsInExceptionMessages

2.1 Informações detalhadas sobre exceções

Considere ativar ShowCodeDetailsInExceptionMessagesexecute o código novamente sob a bandeira de:

Exception in thread "main" java.lang.NullPointerException: 
  Cannot invoke "RegistryAddress.getCity()" because the return value of 
"com.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException$DetailInfos.getRegistryAddress()" is null
  at com.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException.main(HelpfulNullPointerException.java:10)

Desta vez, pelas informações adicionais, sabemos que a perda do endereço registrado dos dados pessoais do funcionário causou nossa anomalia. As informações obtidas com esse aprimoramento podem economizar tempo na depuração.

A JVM consiste em duas partes para criar mensagens de exceção detalhadas. A primeira parte representa o fracasso operação, que é referido como nulo resultado, enquanto o segundo identifica parte do nulo citou razões:

Cannot invoke "String.toLowerCase()" because the return value of "getEmailAddress()" is null

Para gerar mensagens de exceção, o JEP 358 refatorou parte do código-fonte que empurrou referências nulas para a pilha de operandos.

3. Aspectos técnicos

Agora que temos um bom entendimento de como usar NullPointerException s aprimoradas para identificar referências nulas , vamos dar uma olhada em alguns de seus aspectos técnicos.

Primeiro, somente quando a própria JVM lança uma NullPointerException , o cálculo detalhado da mensagem será executado.Se lançarmos explicitamente uma exceção no código Java, o cálculo não será executado. O motivo é que: nesses casos, é provável que uma mensagem significativa tenha sido passada no construtor de exceções.

Em segundo lugar, o ** JEP 358 ** calcula as mensagens preguiçosamente, o que significa que a NullPointerException aprimorada é chamada apenas quando imprimimos a mensagem de exceção, não quando a exceção ocorre. Portanto, não deve haver nenhum impacto no desempenho no processo comum da JVM, onde podemos capturar e repetir exceções, porque não queremos apenas imprimir mensagens de exceção.

Finalmente, as mensagens de exceção detalhadas podem conter nomes de variáveis ​​locais no código-fonte . Portanto, podemos considerar esse risco potencial à segurança. No entanto, isso acontece apenas ao executar o código compilado com o sinalizador -g ativado , que gera informações de depuração e as adiciona ao arquivo de classe.
Considere um exemplo simples, que compilamos para incluir as seguintes informações adicionais de depuração:

Employee employee = null;
employee.getName();

Quando o código acima é executado, o nome da variável local será impresso nas informações da exceção:

"com.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException$Employee.getName()"
because "employee" is null

Pelo contrário, sem informações adicionais de depuração, a JVM fornece apenas as variáveis ​​que conhece na mensagem detalhada:

Cannot invoke 
  "com.developlee.java14.helpfulnullpointerexceptions.HelpfulNullPointerException$Employee.getName()"
because "<local1>" is null

A JVM imprime o índice de variável designado pelo compilador em vez do nome da variável local (funcionário).

O processamento do NullPointerException está aqui: com o NullPointerException aprimorado para Java14, podemos localizar rapidamente a causa dos problemas de código, depurar o código mais rapidamente, economizar tempo e melhorar a eficiência.

Amigos que instalaram o Java14 podem experimentá-lo ~

Ding Ding Ding! Preste atenção ao número público: o grandalhão do lado de fora do pote, junte-se ao círculo externo do pote, e o resultado do bem-estar é irregular. Olá, recebê-lo para participar
Endereço do blog: http://www.developlee.top

Acho que você gosta

Origin www.cnblogs.com/liululee/p/12702993.html
Recomendado
Clasificación