as modificações na linguagem: java 7 e java 8
DESCRIPTION
Apresentação realizada durante o JustJava 2012.TRANSCRIPT
Globalcode – Open4education
As modificações na linguagem:Java 7 e 8Eder Magalhães
@edermagwww.yaw.com.br
2012
Saturday, May 19, 12
Globalcode – Open4education
Agenda
Expectativa na evolução da Linguagem JavaDolphin: o Java 7Mudanças na linguagem: Projeto CoinNew IO no Java 7 (NIO.2)JDBC 4.1;Outras características do Java 7;Conclusão do plano B: Java 8;Type Annotations + Jigsaw + Lambda;Links
Saturday, May 19, 12
Globalcode – Open4education
Histórico
Última versão com mudanças na linguagem:Java 5 (Tiger) – 30/09/2004;
Java 6 (Mustang) foi disponibilizado em 11/12/2006;
Java 7 (Dolphin) começou em 08/2006 e foi disponibilizado em 07/2011;
Saturday, May 19, 12
Globalcode – Open4education
Durante esses 5 anos
Expectativa por novas funcionalidades;
Oracle adquire a Sun;
Novo planejamento de entrega:Plano A:
JDK 7 completo com previsão para 2012;Plano B:
JDK 7 com algumas features com previsão para 2011;JDK 8 com funcionalidades complementares com previsão para o final de 2012;
Saturday, May 19, 12
Globalcode – Open4education
Dolphin, o Java 7 !
Saturday, May 19, 12
Globalcode – Open4education
Java 7 (JSR 336)
Melhorias:Linguagem;Virtual Machine;Class loader;I/O, Rede e Concorrência;JDBC;Swing;Web;Javadoc;
Saturday, May 19, 12
Globalcode – Open4education
Projeto Coin
Implementa a especificação JSR 334;
O objetivo do projeto é prover melhorias para a linguagem Java;
Reduz, um pouco, a verbosidade da linguagem;
Subprojeto do OpenJDK;
Saturday, May 19, 12
Globalcode – Open4education
Separador de dígitos e literal binária
// isso é esquisito... mas compila!int i = 1_234_567_890;Integer i1 = new Integer(12_34_56_78_90);
float f1 = 123_456.7_5F;double d1 = 12____345D;double d2 = 0x1.ffff_ffff_ffff_fP1_023;
// isso não compila:int intRuim1 = _1234, intRuim2 = 1234_;float outroRuim = 123_456.75_F;
// literal binária:int x = 0b001; // o valor é 1 int y = 0b010; // o valor é 2
Saturday, May 19, 12
Globalcode – Open4education
String na condição do switch
public static void main(String[] args) { String msg = "oi"; switch(msg) { case "oi": System.out.println("Ola, bem vindo"); break; case "tchau": System.out.println("Tchau, ate mais"); break; default: System.out.println("mal educado..."); }}
O compilador realiza a comparação pelo hashcode!
Saturday, May 19, 12
Globalcode – Open4education
Tipos genéricos sem operador Diamond
Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<Integer, Set<Integer>>();
Integer aKey = 10;Set<Integer> aSet = new HashSet<Integer>(); mapOfIntegers.put(aKey, aSet);
Saturday, May 19, 12
Globalcode – Open4education
Tipos genéricos com operador Diamond
Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<>();
Integer aKey = 10;Set<Integer> aSet = new HashSet<>(); mapOfIntegers.put(aKey, aSet);
Saturday, May 19, 12
Globalcode – Open4education
Tipos genéricos com operador Diamond
Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<>();
Integer aKey = 10;Set<Integer> aSet; mapOfIntegers.put(aKey, aSet = new HashSet<>());
// a instrução a seguir não compila! mapOfIntegers.put(aKey, new HashSet<>());
Saturday, May 19, 12
Globalcode – Open4education
Simplificação na chamada de métodos com varargs
public static <T> List<T> asList(T... a) { return new ArrayList<>(a);}
<T> Tipo<T> nomeDoMetodo(T... params)
O warning é gerado para qualquer método com esse tipo de assinatura:
Método asList da classe Arrays:
Saturday, May 19, 12
Globalcode – Open4education
Simplificação na chamada de métodos com varargs
@SafeVarargspublic static <T> List<T> asList(T... a) { return new ArrayList<>(a);}
Solução: criar uma forma de informar o compilador que a chamada ao método asList não corre risco de problemas com tipo de dado!
Saturday, May 19, 12
Globalcode – Open4education
Gerenciamento automático de recursos
Nova interface java.lang.AutoCloseable;
Bibliotecas adaptadas para implementar essa nova interface;
Mudanças em java.lang.Throwable:Novo construtor;Dois novos métodos;
Saturday, May 19, 12
Globalcode – Open4education
Sem o gerenciamento automático…
public void lerArquivo() { FileReader reader = null; try { reader = new FileReader("arquivo"); // faz o processamento do arquivo } catch (IOException e) { // trata a exceção } finally { if(reader != null) { try { reader.close(); } catch (IOException e) { // tenta fazer alguma outra coisa aqui! } } }}
Saturday, May 19, 12
Globalcode – Open4education
Sem o gerenciamento automático...
public void lerArquivo() { FileReader reader = null; try { reader = new FileReader("arquivo"); // faz o processamento do arquivo } catch (IOException e) { // trata a exceção } finally { if(reader != null) { try { reader.close(); } catch (IOException e) { // tenta fazer alguma outra coisa aqui! } } }}
Saturday, May 19, 12
Globalcode – Open4education
Com o gerenciamento automático!
public void lerArquivo() {
try (FileReader reader = new FileReader("arquivo”)) { // faz o processamento do arquivo } catch (IOException e) { // trata a exceção }}
Saturday, May 19, 12
Globalcode – Open4education
Gerenciamento automático de recursos
protected Throwable(String message, Throwable cause, boolean enableSuppresion, boolean writableStackTrace)
public final void addSuppressed(Throwable exception)
public final Throwable[] getSuppressed()
Throwable passa a suportar exceções suprimidas:
Saturday, May 19, 12
Globalcode – Open4education
Multicatch
A cláusula catch está habilitada para uma série de tipos exceções separadas pelo operador “OR”, símbolo “|”, na declaração do paramêtro (tipo da exceção);
Dessa forma diferentes tipos de exceções podem ser tratados da mesma forma;
Saturday, May 19, 12
Globalcode – Open4education
Sem o Multicatch
private Object novoObjeto(Class<?> clazz) { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); } catch (IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); }}
Saturday, May 19, 12
Globalcode – Open4education
Com Multicatch
private Object novoObjeto(Class<?> clazz) { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw new RuntimeException(e); }}
Saturday, May 19, 12
Globalcode – Open4education
Rethrow
Se o parâmetro de uma exceção não for modificado e for relançado dentro do bloco catch, o compilador aplica uma análise mais precisa dos tipos que podem ser lançados;
Saturday, May 19, 12
Globalcode – Open4education
Rethrow específico
private Object novoObjeto(Class<?> clazz)throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (Exception e) { System.err.println("Erro na criação do objeto"); throw e; }}
Saturday, May 19, 12
Globalcode – Open4education
Novidades na API do Java 7
Saturday, May 19, 12
Globalcode – Open4education
Novidades na API do Java 7
Saturday, May 19, 12
Globalcode – Open4education
New I/O do Java 7
JSR 203: Nova API para New I/O (“NIO.2”):FileSystem, PathFileSystems, Files, Paths;FileStore;BasicFileAttributes;
Melhorias na infra-estrutura I/O:Acesso assíncrono a sockets e arquivos;API para socket endereçado a multicasting;Suporte a multitarefa com sockets;
Saturday, May 19, 12
Globalcode – Open4education
NIO.2: API de I/O + eficaz Path home = Paths.get("/home/yaw"); Path foto = home.resolve("foto.jpg"); Path backup = home.resolve("foto_backup.jpg");
//backup de um aquivo Files.copy(foto, backup); //move o arquivo para outro diretório Path destino = Paths.get("/home/yaw/backup"); Files.move(backup, destino.resolve(backup.getFileName()));
//lista e imprime o conteúdo do diretório DirectoryStream<Path> stream = Files.newDirectoryStream(home); for (Path p : stream) { System.out.println("\t -" + p ); }
Saturday, May 19, 12
Globalcode – Open4education
JDBC 4.1
Suporte a AutoCloseable;Nova interface: RowSetProvider;
String query = "select nome, cpf from pessoa";
try (Connection con = DriverManager.getConnection(...); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery(query)) {
while (rs.next()) { String nome = rs.getString("nome"); String cpf = rs.getString("cpf"); System.out.printf("Nome:%s\t Cpf:%s %n", nome, cpf); }
}
Saturday, May 19, 12
Globalcode – Open4education
Outras melhorias
Fork/Join framework (JSR 166)Melhorias em alguns componentes Swing;Ajustes na arquitetura do Class loader;Javadoc com visual mais interessante;Internacionalização:
Suporte a Unicode 6.0, IETF BCP47 e UTR35;Re-organização nas formas de locale;
Melhorias na JVM:Invoke Dynamic (JSR 292);G1: Garbage First;
Saturday, May 19, 12
Globalcode – Open4education
Atualizações recentes do Java 7
JDK 7 update 4
Kit do Java 7 disponível para Mac OS;
Termino da fusão entre JRockit e HotSpot;
Saturday, May 19, 12
Globalcode – Open4education
Fechando o plano B: Java 8!
Saturday, May 19, 12
Globalcode – Open4education
Fechando o plano B: Java 8!
Saturday, May 19, 12
Globalcode – Open4education
Java 8 (JSR 338)
Conclusão do Projeto Coin;Nova API para datas no Java;
Type Annotations;Projeto Jigsaw: suporte a definição de módulos;Projeto Lambda: uma linguagem mais eficiente;
Saturday, May 19, 12
Globalcode – Open4education
Type Annotations (JSR 308)
Utilizar anotações em outros trechos do código;
Criar um mecanismo eficiente com regras e validação de tipos do Java baseado em anotações. A evolução da idéia implementada com @Override;
Saturday, May 19, 12
Globalcode – Open4education
Type Annotations Demopublic void execute(@NonNull Object ref) { //algum processamento}
...
execute(new Object()); //ok!execute(null); //ñ compila!
@NonNull Object ref = getObject();
List<@NonNull String> nomes = ...nomes.add(null); //ñ compila!
class ValorNumerico<T extends @Nullable Number> { ...}
ValorNumerico<@Nullable Integer> v1; //ok!ValorNumerico<@NonNull Integer> v2; //ñ compila!
Saturday, May 19, 12
Globalcode – Open4education
Projeto Jigsaw
Suporte a modularização da linguagem Java;Tornar o modelo de distribuição e execução do Java mais eficaz;Cada módulo:
é formado por conjunto de classes e interfaces;pode determinar sua versão;mantém arquivos de configurações/recursos;indica dependência a outros módulos, se existir;
Saturday, May 19, 12
Globalcode – Open4education
Projeto Jigsaw Demo
//Arquivo modules-info.java
module yaw.projetos @ 1.2 { class yaw.projetos.Main; //entry-point (java -m ...) requires yaw.core @ 1.0; //dependência
exports yaw.projetos; permits yaw.financeiro;}
Saturday, May 19, 12
Globalcode – Open4education
Projeto Lambda (JSR 335)
O Java mais poderoso em ambientes multi-core;Emprega ao Java um modelo de programação funcional;Definição de funções anônimas;Permite a referência a métodos;Interfaces com default methods;SAM são consideradas interfaces funcionais;Mudanças na bibliotecas do Java (Collection) para se adequar ao Lambda;
Saturday, May 19, 12
Globalcode – Open4education
Projeto Lambda Demo
String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};
//lambda expressionsArrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2));
//target typingComparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
Arrays.sort(nomes, c);
//method referenceArrays.sort(nomes, String::compareToIgnoreCase);
Saturday, May 19, 12
Globalcode – Open4education
Experimente:http://jdk8.java.nethttp://jdk8.java.net/lambda
Saturday, May 19, 12
Globalcode – Open4education
Rumores sobre o Java 9
VM auto ajustável (self tuning);Suporte a Big Data;Reificação dos tipos genéricos;Criar um protocolo de meta-objetos para comunicação com outras linguagens;Suporte a continuations;
Saturday, May 19, 12
Globalcode – Open4education
Rumores sobre o Java 9
VM auto ajustável (self tuning);Suporte a Big Data;Reificação dos tipos genéricos;Criar um protocolo de meta-objetos para comunicação com outras linguagens;Suporte a continuations;
Saturday, May 19, 12
Globalcode – Open4education
Blog
http://blog.globalcode.com.br/search/label/java
#open4education
http://www.globalcode.com.br/gratuitos/minicursos/minicurso-JDK7-modificacoes-na-linguagem
https://github.com/edermag/jdk7.minicurso/
Minicurso
Projeto com exemplos
http://www.yaw.com.br/screencast/tag/JDK7/
Vídeos
Saturday, May 19, 12
Globalcode – Open4education
Linkshttp://openjdk.java.net/http://openjdk.java.net/projects/jdk7/
http://openjdk.java.net/projects/jdk8/http://openjdk.java.net/projects/jigsaw/doc/quickstart.html
http://openjdk.java.net/projects/lambda/http://www.infoq.com/br/articles/java7coinhttp://www.infoq.com/br/news/2012/04/jdk-8-milestone-release-dates
http://openjdk.java.net/jeps/104http://slideshare.net/edermag
Saturday, May 19, 12