Novidades do Java7

  • 8,255 views
Uploaded on

Palestra apresentada por Leandro Nunes, no FLISOL 2010, edição de Porto Alegre-RS. …

Palestra apresentada por Leandro Nunes, no FLISOL 2010, edição de Porto Alegre-RS.

Nesta palestra foram apresentadas as novidades do Java 7, OpenJDK 7 e alguns sub-projetos como Project Coin, Project Jigsaw e the Da Vinci Machine Project.

Para mais informações visite http://leandron.wordpress.com.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
8,255
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
5

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. As novidades do Java 7 Leandro Nunes - RSJUG [email_address] FLISOL 2010 – Porto Alegre/RS
  • 2. #whoami
    • Leandro Nunes
      • Programador Java (SCJP)
      • 3. Coordenador do RSJUG - www.rsjug.org
      • 4. Membro do Grupo de Usuários OpenSolaris/POA
      • 5. Palestrante no FISL 10, JUGDay, Software Freedom Day...
      • 6. Blog
      • 7. http://leandron.wordpress.com - essa apresentação está lá
  • 8. Sobre o que vamos falar...
    • Java e software livre
      • O projeto OpenJDK
    • Java 7
      • Mudanças na linguagem
      • 9. Suporte à linguagens dinâmicas
      • 10. Modularização [JSR-294]
      • 11. Cronograma da JDK7
    • Referências e Links
  • 12. Java e Software Livre OpenJDK http://openjdk.dev.java.net
  • 13. O projeto OpenJDK
    • Anunciado em 2006, o projeto tinha o objetivo de liberar o código da implementação de Java da Sun sob uma licença livre
    • 14. Hoje isso é realidade...
  • 15. Java 7 Mudanças na linguagem Project Coin http://openjdk.java.net/projects/coin
  • 16. String em switch String s = "abc"; switch(s) { case "abc": processAbc(s); break; case "def": case "DEF": processDef(s); break; case "ghi": processGhi(s); default: processDefault(s); break; }
    • Antes só era permitido com tipos inteiros e enums
  • 17. Verificação de null s
    • Antes, para verificar se um objeto tem referência nula...
    String aMember = null; if ( g != null && g.members != null && g.members[0].name != null ) {     aMember = g.members[0].name; } else {     aMember = "nobody"; }
  • 18. Verificação de null s
    • Agora existe um operador exclusivo para essa verificação, inline
    • 19. E o mesmo código do slide anterior ficaria assim
    final String aMember = g?.members?[0]?.name ?: "nobody";
  • 20. Tipos inteiros
    • Suporte à representação de binários
    • 21. Separadores “ _ ” (para aumentar a legibilidade)
    • 22. Novos sufixos para tipos inteiros
      • Byte: y
      • 23. Short: s
      • 24. Obs: no build atual, ainda não implementado.
  • 25. Tipos inteiros
    • Binários
    • 26. Separadores
    //equivalente ao numero 12, em decimal int numeroBinario = 0b1100; int numeroDoTelefone = 555_555_1212; int numeroDoCartao = 5555_5555_5555_5555;
  • 27. Tipos inteiros byte[] stuff = { (byte)0x80,  (byte)0xFF}; byte[] ufum7 = { 0x80y, 0xFFy }; puro overhead! Simples, prático, elegante!
  • 30. Acesso indexado à listas e mapas
    • Podemos fazer acesso direto a um membro de lista um mapa, através de seu indice ou chave
    • 31. Lista
    • 32. Mapa
    List<String> myList = Arrays.asList(new String[] {&quot;a&quot;, &quot;b&quot;, &quot;c&quot;}); String firstElement = myList[0] ; //retorna &quot;a&quot; Map<Integer, String> m1 = new HashMap<Integer, String>(4); m1[Integer.valueOf(1)] = &quot;One&quot;;
  • 33. Declaração literal de Collection
    • Para declarar uma collection inicializada...
    • 34. Antes
    • 35. Java 7
    final List<Integer> piDigits = Collections.unmodifiableList( Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9 )); final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];
  • 36. Declaração literal de Collection
    • Para os mapas, não existia uma declaração que em uma mesma linha inicializasse os itens
    • 37. Antes
    final Map<Integer, String> platonicSolids; static { solids = new LinkedHashMap<Map<Integer, String>; solids.put(4,  &quot;tetrahedron&quot;); solids.put(6,  &quot;cube&quot;); solids.put(8,  &quot;octahedron&quot;); solids.put(12, &quot;dodecahedron&quot;); solids.put(20, &quot;icosahedron&quot;); platonicSolids = Collections.immutableMap(solids); }
  • 38. Declaração literal de Collection
    • Em Java 7, o mesmo mapa pode ser inicializado da seguinte forma
    final Map<Integer, String> platonicSolids = { 4 : &quot;tetrahedron&quot;, 6 : &quot;cube&quot;, 8 : &quot;octahedron&quot;, 12 : &quot;dodecahedron&quot;, 20 : &quot;icosahedron&quot; };
  • 39. Simplificação em generics
    • Não precisamos mais ser redundantes!
    • 40. ANTES
    • 41. Java 7
    Map <String, List<String>> anagrams = new HashMap <String, List<String>> (); Map <String, List<String>> anagrams = new HashMap <> (); Igual! Lógico!
  • 42. Tratamento de exceções
    • Quando queríamos tratar várias exceções com um código em comum...
    } catch (Exception1 ex) {     LOGGER.log(Level.SEVERE, ex);     throw ex; } catch (Exception2 ex) {     LOGGER.log(Level.SEVERE, ex);     throw ex; }
  • 43. Tratamento de exceções
    • Em Java 7 é possível tratar várias exceções num mesmo bloco...
    } catch (Exception1 | Exception2 ex) {     LOGGER.log(Level.SEVERE, ex);     throw ex; } Várias exceções aqui!
  • 44. Gerenciamento de recursos
    • Uma variação do bloco try , permitirá que o Java faça o fechamento de um recurso tão logo estejamos fora de seu escopo
    • 45. Versão Java <= 6
    static String readFirstLineFromFile(String path) throws IOException { BufferedReader br = new BufferedReader(new FileReader(path)); try { return br .readLine(); } finally { br .close(); } } Temos que lembrar de fechar o recurso!
  • 46. Gerenciamento de recursos
    • Uma variação do bloco try , permitirá que o Java faça o fechamento de um recurso tão logo estejamos fora de seu escopo
    • 47. Versão Java 7
    static String readFirstLineFromFile2(String path) throws IOException { try ( BufferedReader br = new BufferedReader(new FileReader(path) ) { return br.readLine(); } } Aqui o recurso br será automaticamente fechado
  • 48. Outras melhorias
    • Indexação de arrays com 64-bits
      • Mais de 3.000.000 de elementos
  • 49. Java 7 Indo além...
  • 50. Suporte à linguagens dinâmicas
    • Da Vinci Machine Project (JSR 292)
    • 51. “ A Java Virtual Machine não conhece NADA sobre a linguagem de programação. Ela apenas sabe executar um bytecode que é gerado pelo compilador.”
  • 52. Suporte à linguagens dinâmicas
    • Hoje são dezenas de linguagens que rodam na JVM
    Groovy Jython JRuby JavaFX Script BeanShell Modula-2 Tea iScript Phobos FScript JESS Jickle PLAN Eiffel Tcl Yoix Drools JudoScript Nice WebL E Logo C# Scala Smalltalk
  • 53. Suporte à linguagens dinâmicas
    • O objetivo deste projeto é criar instruções na JVM para ativar bytecodes externos
    • 54. O nome dessa instrução é invokeDynamic
  • 55. Modularização
    • Project Jigsaw (JSR-294)
    • 56. O objetivo deste projeto é criar um sistema para modularização para projetos Java
    • 57. De acordo com as especificações, esse sistema de módulos deve ser capaz de suportar
      • Módulos da JVM
      • 58. Módulos de pacotes nativos
      • 59. Módulos dentro de sua estrutura de pacotes
  • 60. Modularização module org.rsjug.eventos { system jigsaw; requires module jdom; requires module tagsoup; requires module rome; requires module rome-fetcher; requires module java-xml @7.* ; requires module java-base @[1.6, 2] ; class org.rsjug.eventos.Main; } Nome do módulo D E P E N D Ê N C I A S Sistema de módulos Classe principal
  • 61. Modularização
    • Todos esses dados ficam num arquivo chamado
      • module-info.java
      • 62. No diretório raiz do seu código fonte
  • 63. Cronograma JDK7
    • Atualmente : b89 (15/04/2010)
    • 64. M8 2010/04/16 – 2010/06/03 (b96)
    • 65. M9 2010/06/04 – 2010/07/22 (b103)
    • 66. M10 2010/07/23 – 2010/09/09 (b110)
  • 67. Referências e links
    • Palestra do Simon Ritter sobre Java 7, apresentada no Sun Tech Days 2009-2010
      • http://uk.sun.com/sunnews/events/2009/dec/java/pdf/6a%20-%20JDK7%20-%20Simon%20Ritter.pdf
    • http://openjdk.java.net/
    • 68. http://jdk7.dev.java.net/
    • 69. http://www.rsjug.org
    • 70. http://java.sun.com/features/jdk/7/
    • 71. http://www.jcp.org
  • 72. As novidades do Java 7 Leandro Nunes - RSJUG [email_address] FLISOL 2010 – Porto Alegre/RS ?