Recurso | Descrição | Exemplo | Benefícios |
---|---|---|---|
Sintaxe de variável local para parâmetros Lambda | Permite o uso de var em expressões lambda para melhorar a legibilidade. | (var x, var y) -> x + y | Consistência no código. |
Cliente HTTP (padrão) | Nova API de cliente HTTP com suporte para HTTP/1.1 e HTTP/2. | Cliente HttpClient = HttpClient.newHttpClient(); | API moderna e rica em recursos. |
Epsilon: um coletor de lixo autônomo | Um coletor de lixo que não recupera memória. | java -XX:+UseEpsilonGC MyApp | Útil para testes de desempenho. |
Controle de acesso baseado em Nest | Simplifica o controle de acesso para tipos aninhados. | classe estática privada NestedClass {} | Performance melhorada. |
Constantes dinâmicas de arquivo de classe | Novo formulário de pool constante CONSTANT_Dynamic . | N / D | Custos e limitações reduzidos. |
Aprimoramentos da API de strings | Novos métodos como linhas() , faixa() , e repetir (int) . | texto.strip() | Manipulação de strings mais poderosa. |
Melhorias na API de arquivos | Métodos para ler e escrever arquivos como strings. | Files.writeString(caminho, "Olá!"); | Simplifica as operações de arquivo. |
Unicode10 | Suporta o padrão Unicode mais recente. | N / D | Suporte de personagem mais abrangente. |
Gravador de voo | Ferramenta de perfil integrada. | N / D | Monitoramento de desempenho aprimorado. |
Remoção de módulos Java EE e CORBA | Módulos Java EE e CORBA removidos. | N / D | JDK simplificado. |
Descontinuar ferramentas e API do Pack200 | Ferramentas de compactação e APIs Pack200 obsoletas. | N / D | Sinalizando remoção futura. |
O Java 11 introduziu vários recursos e melhorias que valem a pena explorar. A seguir, nos aprofundaremos em cada um desses novos recursos, fornecendo descrições detalhadas, exemplos práticos e os benefícios que eles trazem aos desenvolvedores.
Sintaxe de variável local para parâmetros Lambda
Uma das adições mais notáveis no Java 11 é o suporte para o var
palavra-chave em expressões lambda. Este recurso simplifica a sintaxe e melhora a legibilidade do código, permitindo que os desenvolvedores usem var
para declarar os parâmetros formais de expressões lambda digitadas implicitamente.
Exemplo:
(var x, var y) -> x + y
Benefícios:
- Consistência: Usando
var
nos parâmetros lambda torna o código consistente com as declarações de variáveis locais, reduzindo a carga cognitiva dos desenvolvedores.
Cliente HTTP (padrão)
A nova API HTTP Client, padronizada em Java 11, suporta HTTP/1.1 e HTTP/2. Essa API moderna e rica em recursos facilita a execução de operações HTTP.
Exemplo:
Cliente HttpClient = HttpClient.newHttpClient(); Solicitação HttpRequest = HttpRequest.newBuilder() .uri(URI.create("https://example.com")) .build(); Resposta HTTP resposta = cliente.send(solicitação, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
Benefícios:
- API moderna: Oferece uma maneira mais poderosa e flexível de lidar com solicitações e respostas HTTP.
- Performance melhorada: Suporta HTTP/2, que pode melhorar o desempenho com recursos como multiplexação.
Epsilon: um coletor de lixo autônomo
O Java 11 apresenta o Epsilon, um coletor de lixo autônomo que não recupera memória. Isto é particularmente útil para testes de desempenho e avaliação de pressão de memória.
Exemplo:
java -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC -Xmx2g MyApp
Benefícios:
- Teste de performance: Ajuda em benchmarking e testes de desempenho, removendo a sobrecarga da coleta de lixo.
- Gerenciamento de memória: Útil em cenários onde a alocação de memória é gerenciada externamente.
Controle de acesso baseado em Nest
O controle de acesso baseado em ninho em Java 11 simplifica as regras de acesso para tipos aninhados, permitindo melhor encapsulamento e controle de acesso dentro de classes aninhadas.
Exemplo:
classe pública OuterClass { classe estática privada NestedClass { private void nestedMethod() { System.out.println("Dentro de NestedClass"); } } }
Benefícios:
- Encapsulamento Melhorado: Fornece melhor controle sobre o acesso de membros de classe aninhados.
- Desempenho: Melhora o desempenho simplificando as regras de controle de acesso.
Constantes dinâmicas de arquivo de classe
A introdução de CONSTANT_Dynamic
no pool de constantes permite constantes mais flexíveis e eficientes em arquivos de classe.
Benefícios:
- Custo reduzido: Reduz o custo e as limitações associadas à criação de novos tipos de constantes de arquivo de classe.
- Flexibilidade: Fornece maneiras mais dinâmicas e flexíveis de lidar com constantes no bytecode Java.
Aprimoramentos da API de strings
Java 11 traz diversas melhorias para o Corda
classe, incluindo novos métodos como linhas()
, faixa()
, stripLeading()
, stripTrailing()
, repetir (int)
, e está em branco()
.
Exemplos:
String multilinha = "linha1\nlinha2\nlinha3"; multiline.lines().forEach(System.out::println); String texto = "olá"; System.out.println(texto.strip()); // "olá" System.out.println(text.stripLeading()); // "olá " System.out.println(text.stripTrailing()); // "olá" System.out.println("=".repeat(5)); // "====="
Benefícios:
- Manipulação poderosa de cordas: Novos métodos fornecem maneiras mais poderosas e convenientes de manipular strings.
- Limpeza de código: Simplifica operações comuns de strings, resultando em um código mais limpo e legível.
Melhorias na API de arquivos
O arquivos
classe em Java 11 inclui novos métodos como readString(Caminho)
e writeString (Caminho, CharSequence)
para ler e gravar arquivos como strings.
Exemplo:
Caminho caminho = Paths.get("arquivo.txt"); Files.writeString(caminho, "Olá, mundo!"); String conteúdo = Files.readString(caminho); System.out.println(conteúdo);
Benefícios:
- Operações de arquivo simplificadas: Torna a leitura e gravação em arquivos mais simples e menos propensa a erros.
- Produtividade aprimorada: Reduz o código clichê, aumentando a produtividade do desenvolvedor.
Unicode10
Java 11 suporta Unicode 10, que inclui novos caracteres e scripts, garantindo que os aplicativos Java possam lidar com os caracteres internacionais mais recentes.
Benefícios:
- Suporte abrangente a personagens: Fornece melhor suporte para internacionalização e localização.
Gravador de voo
Java Flight Recorder (JFR) agora está incluído no OpenJDK, fornecendo uma ferramenta poderosa para criação de perfil e monitoramento de aplicativos Java.
Benefícios:
- Monitoramento de desempenho: Ajuda no diagnóstico de problemas de desempenho registrando informações detalhadas sobre a execução da aplicação.
- Ferramenta integrada: Integrado ao JDK, tornando-o prontamente disponível sem a necessidade de ferramentas externas.
Remoção de módulos Java EE e CORBA
Java 11 removeu os módulos Java EE e CORBA, que estavam obsoletos em versões anteriores. Estas APIs estão agora disponíveis como bibliotecas separadas.
Benefícios:
- JDK simplificado: Reduz o tamanho e a complexidade do JDK, tornando-o mais leve e eficiente.
Descontinuar as ferramentas e API do Pack200
As ferramentas de compactação e APIs Pack200 foram descontinuadas no Java 11, sinalizando sua remoção em uma versão futura.
Benefícios:
- Preparado para o futuro: Incentiva os desenvolvedores a migrar para ferramentas de compactação mais modernas, preparando-se para a eventual remoção do Pack200.
Conclusão
Java 11 traz uma série de novos recursos e melhorias que aprimoram os recursos da linguagem e a produtividade do desenvolvedor. Desde a moderna API do cliente HTTP até os poderosos aprimoramentos da API de strings e arquivos, essas atualizações tornam o Java uma plataforma mais robusta e eficiente. Embora a remoção de módulos desatualizados e a introdução de novos coletores de lixo como o Epsilon mostrem um foco claro no desempenho e na modernização, os desenvolvedores devem adotar essas mudanças para aproveitar todo o potencial do Java 11.
Tabelas e descrições detalhadas: Para fornecer uma compreensão mais abrangente, abaixo estão descrições detalhadas e exemplos de alguns recursos com tabelas incorporadas:
Tabela de aprimoramentos de API de string
Método | Descrição | Exemplo |
---|---|---|
linhas() | Divide a string em linhas. | multiline.lines().forEach(System.out::println); |
faixa() | Remove espaços em branco à esquerda e à direita. | texto.strip() |
stripLeading() | Remove os espaços em branco iniciais. | text.stripLeading() |
stripTrailing() | Remove espaços em branco à direita. | text.stripTrailing() |
repetir (int) | Repete a string determinada vezes. | "=".repetir(5) |
Os novos recursos do Java 11 garantem que os desenvolvedores tenham acesso a ferramentas e APIs modernas e eficientes, tornando-o uma atualização essencial para qualquer projeto de desenvolvimento Java.