1: Mensagem útil de exceção de ponteiro nulo
Helpful NullPointer Exception foi adicionado em Java 14 para melhorar a mensagem NPE para ajudar os desenvolvedores a depurar onde ocorreu o Null Pointer. Em Java 14, poderíamos adicionar um sinalizador para Helpful Null Pointer Exception. https://openjdk.java.net/jeps/358
— XX:ShowCodeDetailsInExceptionMessages.
No Java 15, não precisamos mais adicionar este sinalizador.
2: blocos de texto
Novas características
- Bloco de texto é um literal de string de várias linhas que evita a necessidade da maioria das sequências de escape, formata automaticamente a string de maneira previsível e dá ao desenvolvedor controle sobre o formato quando desejado
- Iniciado como um recurso de visualização em Java 13 e 14. Agora oficial em Java 15.
- Sem o bloco de texto, precisamos acrescentar o caractere de nova linha e escapar “.
// Without Text Block String jsnWithoutTxtBlck = "{\n"+ " \"a\": "+ "\"b\""+"\n"+ "}"; System.out.println(jsnWithoutTxtBlck);
- O código do bloco de texto se torna mais legível. Corte de espaços em branco, normalização de finais de linha e tradução de sequências de escape, tudo feito por Java.
//Text Block Example String jsn = """ { "a":"b" } """; System.out.println(jsn); //Text Block Example With Formatted String jsnFormatted = """ { "a":"%s" } """.formatted("b"); System.out.println(jsnFormatted);
- Mais informações: https://docs.oracle.com/en/java/javase/14/text-blocks/index.html
Recursos de visualização
1: Correspondência de padrões ( também estava em visualização para java 14)
- A correspondência de padrões torna o código mais conciso e menos prolixo. Não precisamos escrever testes de tipo e conversão de tipos repetidamente para cada caso. Com a correspondência de padrões, podemos fazer testes e lançar em uma linha.
//Traditional Style if(transaction instanceof DepositTransaction){ // type checking DepositTransaction dTx = (DepositTransaction) transaction; // type casting dTx.addAmount(transaction.getAmount()); }else if(transaction instanceof CreditTransaction ){ CreditTransaction cTx = (CreditTransaction) transaction; cTx.subAmount(transaction.getAmount()); } //In Java 15(Preview) if(transaction instanceof DepositTransaction dTx){ dTx.addAmount(transaction.getAmount()); }else if(transaction instanceof CreditTransaction cTx){ cTx.subAmount(transaction.getAmount()); }
As variáveis dTx e cTx são chamadas de variáveis padrão e só estão disponíveis no escopo do bloco em que foram utilizadas. Para o caso cTx, esta variável não pode ser usada fora do bloco else if, pois não é uma variável normal.
2: Classes Seladas
- Os tipos selados são classes e interfaces que permitem que apenas certas subclasses os estendam ou implementem.
Mas se outra subclasse que não está na lista de permissões tentar estendê-la, o compilador lançará um erro como mostrado na imagem.
Classes seladas fazem muito sentido quando as usamos com correspondência de padrões e Switch Case. Isso faria com que o compilador levantasse um erro se o caso não corresponder ao tipo de licença.
int getCenter (Shape shape) { return switch (shape) { case Círculo c -> ... c.center () ... case Retângulo r -> ... r.length () ... case Quadrado s -> ... s.side () ... }; }
3: Records ( também estava em pré-visualização para java 14 )
- Os registros são classes de dados cujo único propósito é usar como portador de dados (objeto de transferência de dados aks DTO’s).
- Em Java, frequentemente, quando criamos DTOs, precisamos criar um construtor, setters / getters, equals e hashcode. Essas tarefas são bastante repetitivas e frequentemente consideram o código clichê. Para tornar a introdução do Java menos detalhada para registrar em java é uma etapa esperada.
- Agora os desenvolvedores podem limpar sua intenção de fazer uma classe como portadora de dados, escrevendo uma palavra-chave de registro antes do nome da classe, o que torna o objeto um objeto de dados imutável. Veja o exemplo abaixo:
public record IncomeSource(String video, String salary, String blogging, String stocks){ };
- Agora, uma vez que o desenvolvedor faz a classe como um registro, todos os métodos como getter e equals (), hashcode () disponíveis prontos para uso. Este design certamente melhor economiza tempo dos desenvolvedores e remove algum nível de verbosidade do Java.
- Para obter mais informações, visite Java Enhancement Proposal (Jep): https://openjdk.java.net/jeps/359
Melhorias JVM (Pronto para Produção)
1: Coletores de lixo
- ZGC se tornou um recurso do produto e saiu do status experimental. (Jep: https://openjdk.java.net/jeps/377 )
- ZGC é um coletor de lixo de baixa latência que tem tempo de pausa abaixo de 10 ms e pode escalar para pilhas de terabyte. Oferece ótimo desempenho sem ajuste.
- O Shenandoah GC também se tornou um recurso do produto e saiu do status experimental. (Jep: https://openjdk.java.net/jeps/379 )
- Shenandoah GC desenvolvido pela equipe Redhat e também competir com ZGC em baixa latência e coletor de lixo concorrente.
-XX:+UseZGC // Sinalize para usar -XX:+UseShenandoahGC // Sinalizar para usar Shenandoah GC
2: Hidden Classes encontra seu caminho em java 15, é útil para frameworks que emitem bytecode dinamicamente e desejam usar várias propriedades, como Non-discovery, Access control, Lifecycle. (Jep: https://openjdk.java.net/jeps / 371 )
3: Edward Curve Digital Signature Algorithm foi adicionado ao Java 15. (Jep: https://openjdk.java.net/jeps/339 )
4: Legacy DatagramSocket API é reimplementada e adicionada ao Java 15 (Jep: https://openjdk.java.net/jeps/373 )
Suspensão de uso e remoções
- As portas JDK para Solaris e Sparc foram removidas: https://openjdk.java.net/jeps/381
- O mecanismo de ativação RMI era opcional desde o Java 8 e agora obsoleto no java 15 (Jep: https://openjdk.java.net/jeps/385 )
- O mecanismo de Javascript Nashorn foi removido junto com a ferramenta jjs. Devido às rápidas mudanças no script ECMA, o mantenedor do Java achou difícil acompanhar o ritmo. Agora, para encontrar uma alternativa para executar javascript, GraalVM pode ser uma opção. (Jep: https://openjdk.java.net/jeps/372 )
Destaques:
- O recurso de bloco de texto é adicionado.
- Classes seladas adicionadas como uma visualização para controlar a hierarquia de herança.
- Novos coletores de lixo ( ZGC & Shenandoah ) foram adicionados e estão prontos para produção.