um tipo de variável • Não é um atributo de classe • Não tem relação com var/val from Scala/Kotlin • Deve ser inicializado • Não é uma palavra reservada Antes: String name = “Java”; Depois: var name = “Java”; 12
imutável se seu estado não pode mudar depois de ser construído • Depois de criar uma instância de uma collection imutável, ela irá possuir os mesmos dados enquanto a collection existir • São mais eficientes já que não precisam se preocupar com alteração dos dados • Geralmente consumem menos memória que collections mutáveis 17
em partes - módulos • Módulo principal é o java.base • NÃO É MANDATÓRIO usar módulos • Java 100% backward compatible Por que módulos? • Configuração é confiável • Forte encapsulamento • Permite que a plataforma Java seja escalável • Maior integridade da plataforma • Melhoria de performance 18
• Interfaces pode ter métodos privados (estáticos e não estáticos) • Melhorias a Optional, try-with resources, Streams e Javadoc (HTML 5) • Reactive Streams API • HTTP2 • Flight Recorder • JShell • Single file source code programs 19
interface ter o controle de qual código é responsável por implementá-lo • Provém um modo mais declarativo do que modificadores de acesso para restringir o uso de uma superclasse • Suporte para futuras implementações do pattern matching ao prover uma fundação para padrão de análises exaustivas • Possibilidade de ter uma super classe ser largamente acessível mas não largamente extensível 22
o tipo e nome das propriedades • Records não podem usar "extends" a não ser ao implementar interfaces • Records não são serializáveis por padrão • java.lang.Class API foi modificada para suportar. Por exemplo, dado Class<?>, podemos verificar se é um Record ou não usando o novo método isRecord() • Records geram getters públicos em que o nome é igual ao nome da propriedade (instead of getAge(), age()) 24
tem uma dada estrutura, extraindo dados desse objeto. • Você já pode fazer isso com Java, contudo pattern matching introduz melhorias que possibilitam extrair condicionalmente os dados de uma forma mais concisa e robusta. 27
JUNE, JULY -> 3; case FEBRUARY, SEPTEMBER, OCTOBER, NOVEMBER, DECEMBER -> 1; case MARCH, MAY, APRIL, AUGUST -> { int monthLength = month.toString().length(); yield monthLength * 4; } default -> 0; }; 29
explore, incubate and deliver Java VM features and APIs built on top of them for the purpose of supporting easy-to-use, high-throughput lightweight concurrency and new programming models on the Java platform. • Virtual threads • Not mapped to OS threads 36