Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

As modificações na Linguagem: Java 7 e Java 8

3,482 views

Published on

Apresentação realizada durante o JustJava 2012.

Published in: Technology

As modificações na Linguagem: Java 7 e Java 8

  1. 1. 2012 As modificações na linguagem: Java 7 e 8 Eder Magalhães @edermag www.yaw.com.br Globalcode  –  Open4educationSaturday, May 19, 12
  2. 2. Agenda Expectativa na evolução da Linguagem Java Dolphin: o Java 7 Mudanças na linguagem: Projeto Coin New 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 Globalcode  –  Open4educationSaturday, May 19, 12
  3. 3. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  4. 4. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  5. 5. Dolphin, o Java 7 ! Globalcode  –  Open4educationSaturday, May 19, 12
  6. 6. Java 7 (JSR 336) Melhorias: Linguagem; Virtual Machine; Class loader; I/O, Rede e Concorrência; JDBC; Swing; Web; Javadoc; Globalcode  –  Open4educationSaturday, May 19, 12
  7. 7. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  8. 8. 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 Globalcode  –  Open4educationSaturday, May 19, 12
  9. 9. 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! Globalcode  –  Open4educationSaturday, May 19, 12
  10. 10. 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); Globalcode  –  Open4educationSaturday, May 19, 12
  11. 11. 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); Globalcode  –  Open4educationSaturday, May 19, 12
  12. 12. 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<>()); Globalcode  –  Open4educationSaturday, May 19, 12
  13. 13. Simplificação na chamada de métodos com varargs Método asList da classe Arrays: public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } O warning é gerado para qualquer método com esse tipo de assinatura: <T> Tipo<T> nomeDoMetodo(T... params) Globalcode  –  Open4educationSaturday, May 19, 12
  14. 14. Simplificação na chamada de métodos com varargs 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! @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } Globalcode  –  Open4educationSaturday, May 19, 12
  15. 15. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  16. 16. 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! } } } } Globalcode  –  Open4educationSaturday, May 19, 12
  17. 17. 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! } } } } Globalcode  –  Open4educationSaturday, May 19, 12
  18. 18. 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 } } Globalcode  –  Open4educationSaturday, May 19, 12
  19. 19. Gerenciamento automático de recursos Throwable passa a suportar exceções suprimidas: protected Throwable(String message, Throwable cause, boolean enableSuppresion, boolean writableStackTrace) public final void addSuppressed(Throwable exception) public final Throwable[] getSuppressed() Globalcode  –  Open4educationSaturday, May 19, 12
  20. 20. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  21. 21. 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); } } Globalcode  –  Open4educationSaturday, May 19, 12
  22. 22. 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); } } Globalcode  –  Open4educationSaturday, May 19, 12
  23. 23. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  24. 24. 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; } } Globalcode  –  Open4educationSaturday, May 19, 12
  25. 25. Novidades na API do Java 7 Globalcode  –  Open4educationSaturday, May 19, 12
  26. 26. Novidades na API do Java 7 Globalcode  –  Open4educationSaturday, May 19, 12
  27. 27. New I/O do Java 7 JSR 203: Nova API para New I/O (“NIO.2”): FileSystem, Path FileSystems, 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; Globalcode  –  Open4educationSaturday, May 19, 12
  28. 28. 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 ); } Globalcode  –  Open4educationSaturday, May 19, 12
  29. 29. 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:%st Cpf:%s %n", nome, cpf); } } Globalcode  –  Open4educationSaturday, May 19, 12
  30. 30. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  31. 31. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  32. 32. Fechando o plano B: Java 8! Globalcode  –  Open4educationSaturday, May 19, 12
  33. 33. Fechando o plano B: Java 8! Globalcode  –  Open4educationSaturday, May 19, 12
  34. 34. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  35. 35. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  36. 36. Type Annotations Demo public 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! Globalcode  –  Open4educationSaturday, May 19, 12
  37. 37. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  38. 38. 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; } Globalcode  –  Open4educationSaturday, May 19, 12
  39. 39. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  40. 40. Projeto Lambda Demo String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; //lambda expressions Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2)); //target typing Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2); Arrays.sort(nomes, c); //method reference Arrays.sort(nomes, String::compareToIgnoreCase); Globalcode  –  Open4educationSaturday, May 19, 12
  41. 41. Experimente: http://jdk8.java.net http://jdk8.java.net/lambda Globalcode  –  Open4educationSaturday, May 19, 12
  42. 42. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  43. 43. 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; Globalcode  –  Open4educationSaturday, May 19, 12
  44. 44. Blog http://blog.globalcode.com.br/search/label/java Vídeos http://www.yaw.com.br/screencast/tag/JDK7/ Minicurso http://www.globalcode.com.br/gratuitos/minicursos/ minicurso-JDK7-modificacoes-na-linguagem Projeto com exemplos https://github.com/edermag/jdk7.minicurso/ #open4education Globalcode  –  Open4educationSaturday, May 19, 12
  45. 45. Links http://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/java7coin http://www.infoq.com/br/news/2012/04/jdk-8- milestone-release-dates http://openjdk.java.net/jeps/104 http://slideshare.net/edermag Globalcode  –  Open4educationSaturday, May 19, 12
  46. 46. Obrigado ! eder@yaw.com.br @edermag Globalcode  –  Open4educationSaturday, May 19, 12

×