No próximo dia 7 de julho acontecerá o lançamento oficial do Java 7 que, depois de uma longa espera (quase cinco anos), trará várias mudanças importantes para a plataforma. De forma resumida, as alterações ocorrerão nos seguintes itens e especificações (JSRs): Máquina Virtual (JSR 292 e JSR 202), Linguagem (JSR 334), Class Loader, Concorrência, I18n, I/O (JSR 203), JDBC, Swing, Web (relacionadas às especificações JSR 206, JSR 222 e JSR 224) e JavaDoc.
Para celebrar o lançamento, acontecerão três eventos simultâneos, em São Francisco, São Paulo e Londres, nos quais serão apresentadas as novidades da nova versão e também os caminhos futuros da plataforma. Em São Paulo, o lançamento será coordenado pelo SouJava como parte da trilha de Java do The Developer's Conference (TDC 2011). Os interessados em participar deverão se inscrever na conferência em qualquer uma das trilhas disponíveis no dia 7 de julho. Quem não puder estar presente pessoalmente, poderá acompanhar as atividades de lançamento via web.
A seguir são descritas as principais mudanças no Java 7, agrupadas por JSR.
A JSR 203 ("APIs de New I/O adicionais para a plataforma Java, ou 'NIO.2' ") traz diversas melhorias em funcionalidades de I/O da plataforma. A mudança central proposta nessa JSR é a criação da classe java.nio.file.Path
, que deverá ser a sucessora da classe java.io.File
. Apesar de estar sendo utilizada nos últimos 10 anos (nos quais sofreu algumas atualizações), a classe File
possui limitações importantes:
- A maioria dos métodos devolve um valor booleano; quando a operação executada pelo método falha, somente é retornado um
false
, não sendo fornecida informação alguma sobre a falha; - A classe não funciona bem com links simbólicos (na verdade, essa é uma característica do pacote
java.io
inteiro); - Há limitações e lentidão para acesso às propriedades de arquivos e diretórios;
- Não permite acessar alguns tipos de sistemas de arquivos, como sistema de arquivos em memória;
- Ausência de métodos para copiar ou mover arquivos.
Essas limitações são resolvidas através da JSR 203. Serão também disponibilizadas novas funcionalidades de I/O, como o acesso assíncrono para sockets e arquivos, o suporte a multitarefa com sockets, assim como mudanças nas APIs de buffers de I/O.
Através da JSR 223 ("Scripting para a Plataforma Java") foi incluído no Java 6 o suporte a linguagens de script, tais como PHP, Python, Ruby, JavaScript, Groovy, entre outras. Um tópico não tratado nessa JSR, no entanto, é a chamada de métodos sem informação de tipos, muito comum em linguagens de script. No caso, a limitação reside nas instruções do bytecode, que esperam a informação completa dos tipos de parâmetros e do retorno dos métodos. Até o Java 6, esse problema tinha que ser resolvido de alguma forma pelos implementadores das linguagens de script.
A JSR 292 ("Suporte a Linguagens Dinamicamente Tipadas na Plataforma Java") resolve esse problema e complementa a JSR de Scripting, através da introdução da nova instrução de bytecode, invokeDynamic. A instrução invokeDynamic trata de forma diferente a chamada dos métodos, sendo capaz de fazer a resolução da chamada com informações obtidas somente em tempo de execução. Com essa modificação, o bytecode fica mais adequado para o trabalho com linguagens de tipagem dinâmica (como linguagens de scripting), permitindo o aumento de desempenho e ampliando ainda mais as possibilidades de implementação de novas linguagens que rodam na JVM.
Outras mudanças que certamente agradarão aos desenvolvedores foram feitas pelo projeto Coin (um subprojeto do OpenJDK), através da JSR 334 ("Pequenos Aperfeiçoamentos na Linguagem Java") que implementa uma série de pequenas alterações, com destaque para:
- Suporte ao uso de strings em condições do
switch
; - Inferência na criação de objetos com tipos genéricos;
- Simplificação na invocação de métodos com parâmetros varargs e tipos genéricos;
- Gerenciamento automático de recursos, tais como conexões a bancos de dados, I/O, entre outros;
- Possibilidade de tratar diversas exceções em um mesmo catch (Multicatch).
Essas alterações (que já foram exploradas em detalhes em um artigo no InfoQ Brasil) certamente ajudarão a diminuir a verbosidade da linguagem Java, além da quantidade de erros gerados no tratamento de exceções.
Mais informações sobre o Java 7 podem ser obtidas nos seguintes links:
- JSR 336: Java SE 7 Release Contents (JSR "guarda-chuva" do Java SE 7)
- Java Early Access Downloads (versões preliminares da Plataforma Java e o JDK)
- Lista das novas funcionalidades do JDK 7
- Mudanças no JavaDoc: Blog de Jonathan Gibbons
- More New I/O APIs for Java
A trilha de Java no TDC 2011 ainda está com inscrições abertas. O evento internacional de lançamento transmitido ao vivo será realizado entre 13:00 e 14:00.