Primeiras aulas do curso Novidades do Java: Produtividade com novos recursos

Novidades do Java: Produtividade com novos recursos

Atualizações da linguagem - Introdução

Olá, aluno, tudo bem? Para você que está querendo adquirir um conhecimento nas principais novidades do Java, está no lugar certo. Neste curso vamos tratar das novidades das versões 9, 10, 11, 12, 13 e 14. Aqui vamos ver três das minors, que são aquelas novidades que foram apenas melhorias nas APIs, algumas inserções de métodos nas APIs, até também grandes mudanças, como foi o caso do Java modular.

Aqui já conseguimos ver uma novidade do Java 14, que foi uma forma melhor, mais sucinta de escrever os switch expressions. Vamos ver também a nova API para requisições http, onde vamos ver uma escrita muito menos verbosa para se trabalhar com requisições http.

Vamos ver também um pouco sobre fluxos reativos, onde vamos conseguir fazer requisições assíncronas, fazendo com que nossa aplicação não fique naquele fluxo bloqueante que estamos acostumados a trabalhar. E vamos ver também como conseguir modularizar nossa aplicação, que talvez tenha sido a novidade mais aguardada dessas últimas versões do Java.

Aqui vamos conseguir ver um exemplo de como funcionam os módulos no Java, só que é bem por alto. Para você que quer aprofundar seu conhecimento e quer ver as principais vantagens dessas novas versões, espero você nos próximos vídeos.

Atualizações da linguagem - Versões do Java

Sejam bem-vindos ao curso de novidades do Java. Antes de colocarmos a mão na massa e já partirmos para a codificação, eu gostaria de mostrar primeiro um slide com as novidades que tivemos no Java nos últimos anos.

É importante ressaltar que nem tudo que vai ser falado aqui nos slides vai estar no curso e não são todas as novidades de cada versão que estão disponíveis nos slides, porque seriam muitas novidades e muitas vezes não são tão focadas para o desenvolvedor. Então para quem tem interessante em conhecer melhor as outras novidades, recomendo entrar no site da Oracle, procurar a documentação daquela versão que lá vai ter tudo disponível que você precisa saber.

Começando pelo Java 8, a versão de 2014, temos default methods. A motivação dos default methods foi na necessidade de criar novas funcionalidades nas interfaces. Para não quebrar contratos, as classes que já implementavam aquelas interfaces, foram criados métodos com a implementação padrão e esses métodos foram chamado de default methods. A partir do Java 8, quem implementava aquela interface agora vai levar também os default methods.

As expressões lambdas servem para você trabalhar com as interfaces funcionais. Conceitualmente uma interface funcional é uma interface que tem apenas um método abstrato. Então mesmo antes do Java 8, interface que tinha apenas um método abstrato vai se encaixar como uma interface funcional. E isso vai ajudar a trabalhar com as expressões Lambda, que veio para atacar a verbosidade que tínhamos no Java. É uma maneira de você escrever mais simples no seu código.

E tem também a API de streams, que julgo ser uma das melhores APIs que entraram ultimamente no Java, vem mostrando mais essa pegada funcional do Java, que é uma série de métodos para você trabalhar com as collections que te auxilia no manuseio dos dados daquela collection, então você pode encadear em vários métodos da API de streams dentro de uma coleção, e a cada iteração, a cada passada na pip line, que é o que chama esse encadeamento de métodos, vai gerando um novo objeto, uma nova collection respeitando o conceito de mutabilidade, então é bem legal. E ela é uma versão LTS, long term support, que significa que ela tem um suporte longo da Oracle.

Passando para o Java 9 temos os factory methods para coleções. Ao invés agora de ficar dando new array list, new hash set, temos um método que constrói um objeto, uma collection imutável para nós. Também é uma novidade bem interessante do Java 9.

O Jshell, que é um terminal interativo, que assim como o Python, que o hub, que já tinham esses terminais interativos, agora temos no Java também. A ideia é que ao executar um código já temos aquele resultado instantâneo, logo depois da execução da linha de código escrita.

Vamos trabalhar com fluxo reativo, que é a flow API, a questão de fluxo assíncrono, então também é uma coisa bem interessante que vai ter no Java 9. E talvez a mudança que mais as pessoas estão aguardando, que mais aguardaram, na verdade, que é o Java modular. Começaram a pensar nele no Java 7, depois tentou-se colocar no Java 8 e vem enfim no Java 9.

Trabalhar com Java modular tem uma série de vantagens, como encapsulamento da API, diAPIs, então vamos ter também resolução de problemas que tínhamos com class path, uma série de problemas que modularizar o Java é vantajoso para o desenvolvedor e para a própria linguagem.

Passando para o Java 10 vamos ter as releases baseadas em tempo. O que isso significa? A partir do Java 10 toda versão ia sair de seis em seis meses. Essa foi uma ideia da Oracle para trazer mais informações, mais novidades para o desenvolvedor em menos tempo. Ao invés de esperar três, quatro anos para uma versão com várias novidades, agora de seis em seis meses temos um pouco de novidade e já temos aquela vontade de atualizar nossos códigos, aprender sobre essas novidades.

Temos a polêmica inferência de variável, que significa que agora temos uma palavra reservada var no Java. O que isso quer dizer? Em variável local, dentro de um método, quando vamos instanciar, por exemplo, um objeto conta, temos que fazer um conta c igual new conta. Agora podemos usar um var c igual a new conta e o Java por debaixo dos panos vai conseguir inferir esse tipo para nós sem precisarmos explicitar esse cara. Tem pessoas que gostam, tem pessoas que não gostam, mas está aí, nasceu no Java 10.

E temos também uma interface para o garbage collector. É aquela questão de desenvolver voltado para interface. Isso significa que você pode trocar o garbage collector sem sofrer mudanças no seu código.

No Java 11 tivemos a execução de um arquivo Java com um único comando, que é quando estamos escrevendo em um bloco de notas, no editor de texto um código Java salvávamos e precisávamos primeiro compilar esse arquivo para depois executar. Era o Java c e depois o Java. Agora apenas com o comando Java e o nome do arquivo com a extensão .java ele já vai compilar por debaixo dos panos e já vai mostrar para você o resultado das linhas de código que você implementou no seu arquivo.

Entramos também com a parte do http client, que é com suporte do http 2. Agora temos uma API http 2 client API, que atingiu entre outras coisas a verbosidade que tinha da primeira edição da API, que era muito antiga, então tinha alguns problemas de segurança. Agora com o http 2, com o client API conseguimos fazer requisições, respostas paralelas, conseguimos fazer requisições assíncronas. Tem uma série de mudanças que ficaram bem bacanas nessa nova API. E ela até o presente momento dessa gravação do curso foi a última versão LTS, ou seja, com longo suporte pela Oracle.

No Java 12 tivemos uma inclusão de um novo garbage collector. Passando para o 13, assim como no http client, tivemos mudanças na socket API, porque assim como http client era uma API muito antiga e precisava dessa melhoria para evoluir junto com a linguagem. Entrou no Java 13 junto com a questão dos text blocks.

Text blocks foi mais para facilitar a escrita de blocos de texto no Java. Quando tínhamos que escrever uma query SQL longa tínhamos que ficar nos preocupando em quebra de linha, concatenação de strings, isso muitas vezes ficava muito poluído, o código ficava de difícil entendimento.

Com o text blocks agora você tem um bloco de texto que você pode endentar da forma que você quer que sua string SQL, por exemplo, fique, e o Java no momento de executar esse código vai respeitar a sua escrita, então você não precisa ficar se preocupando com caracteres especiais.

Temos o Java 14, que foi a última versão até a gravação desse curso. Vamos ter o helpful nullpointer exceptions, que foi uma forma de ajudar o desenvolvedor a identificar de forma mais rápida onde está ocorrendo no pointer. É uma exceção bem comum, uma exceção corriqueira, e muitas vezes você perde tempo debugando para saber o que de fato está vindo nulo, para você conseguir fazer sua validação. Então agora com o Java 14 vamos ter uma melhoria nesse quesito, que vai mostrar o ponto exato de onde deu o null pointer.

E o Java 14 veio com a situação de melhorar a verbosidade do código Java. Se olharmos o switch expressions, ele foi melhorado e com bem menos linhas conseguimos desenvolver um switch com lambdas, uma série de melhorias que teve, e acredito que vamos passar a ver mais switchs nos códigos.

Temos o records, que também ataca essa questão da verbosidade. É um preview, ou seja, pode ser que não esteja na próxima versão, mas eu acredito que estará, porque foi uma novidade que mexeu com a comunidade, que é uma forma de melhorar o seu DTO, sua entidade. Ao invés de você declarar uma entidade com os getters e setters, com hash code equals, você habilitando esse records consegue declarar o tipo do seu atributo e qual o nome do atributo do seu DTO e da sua entidade, e por debaixo dos panos ele já vai criar toda aquela estrutura de entidade, de DTO que conhecemos, que são os getters e setters, enfim. Ficou bem bacana também, ficou uma classe bem sucinta.

Para o nosso curso vamos tratar basicamente do Jshell, vamos falar sobre as novidades no http 2, fluxo reativo, que é bem bacana, Java modular, que não poderia ficar de forma, e alguns minors, que são os métodos que entraram na API para melhoria da verbosidade. Tem alguns fatores que vamos tratar ao longo do curso.

Espero que vocês tenham gostado e vejo vocês nos próximos vídeos.

Atualizações da linguagem - Fábrica para Collections

Vamos dar continuidade ao nosso curso de novidades do Java, e agora já colocando a mão na massa. Criei uma classe de teste onde minha intenção com o método main era transformar uma ArrayList em um objeto imutável. Consegui, adicionei alguns nomes, transformei meu objeto imutável. Se eu executar esse cara não está me trazendo nenhum problema.

Só que ele estar executando sem nenhum problema não significa que não possa ser melhorado. O que eu queria que analisássemos aqui é a quantidade de linhas que estamos escrevendo apenas para adicionar alguns nomes na minha lista e transformar esse objeto em imutável.

O que eu gostaria de analisar é, será que não tem uma forma de melhorarmos isso, de escrevermos um código um pouco mais enxuto? E aí o Java vem trabalhando com a questão da verbosidade da linguagem. Conseguimos fazer coisas com menos escrita. Agora vamos ter no caso do list o método of, e esse método of vai ser sobrecarregado várias vezes, porque pode receber uma quantidade de parâmetros.

Vamos pegar esse vazio. Agora vamos começar a ver já a primeira novidade, a primeira melhoria para trabalhar com collection. É que agora não preciso usando o método of do método edge. Quando já abri o of já vou passar os parâmetros e já vamos criar esses objetos na lista para mim.

O retorno vai ser normal, uma lista de string que vai se chamar nomes. Aqui agora, com essa linha já substituímos todo esse trecho. Se eu quiser adicionar outro nome e mandar executar esse cara, ele vai quebrar, e ele quebra porque está falando que a operação é suportada, porque esse cara é uma coleção imutável.

Além de com essa linha matar essas quatros linhas ainda vou matar onde tinha que explicitar que meu objeto estava sendo transformado em imutável. Olha que maravilha. Com apenas uma linha consigo substituir pelo menos cinco linhas.

E aqui o processamento é a mesma coisa. Se eu chamar um system out println e chamar nomes ele vai trazer os nomes que inseri na minha lista. Tudo que é bom pode melhorar. Trabalhei com o list, mas nada me impede de trabalhar com set. Com esse set posso usar o of, que tem os mesmos métodos sobrecarregados. Posso criar também o terceiro nome, e ele vai retornar um set de string.

Ainda posso usar também em uma collection de chave valor. Com o map posso só declarar nome, valor, chave, e ambos vão retornar também os seus respectivos tipos, suas referências.

Essa foi uma novidade do Java 9, que veio para atacar essa questão da verbosidade das escritas, das criações das collections, e ela é aquela factory method que nós comentamos na aula dos slides, factory method para collection.

Espero que vocês tenham gostado do resultado do código, vejo vocês no próximo vídeo.

Sobre o curso Novidades do Java: Produtividade com novos recursos

O curso Novidades do Java: Produtividade com novos recursos possui 126 minutos de vídeos, em um total de 54 atividades. Gostou? Conheça nossos outros cursos de Java em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Java acessando integralmente esse e outros cursos, comece hoje!

Plus

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$85
à vista R$1.020
Matricule-se

Pro

  • Acesso a TODOS os cursos da plataforma

    Mais de 1200 cursos completamente atualizados, com novos lançamentos todas as semanas, em Programação, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.

  • Alura Challenges

    Desafios temáticos para você turbinar seu portfólio. Você aprende na prática, com exercícios e projetos que simulam o dia a dia profissional.

  • Alura Cases

    Webséries exclusivas com discussões avançadas sobre arquitetura de sistemas com profissionais de grandes corporações e startups.

  • Certificado

    Emitimos certificados para atestar que você finalizou nossos cursos e formações.

  • Alura Língua (incluindo curso Inglês para Devs)

    Estude a língua inglesa com um curso 100% focado em tecnologia e expanda seus horizontes profissionais.

12X
R$120
à vista R$1.440
Matricule-se
Conheça os Planos para Empresas

Acesso completo
durante 1 ano

Estude 24h/dia
onde e quando quiser

Novos cursos
todas as semanas