Novidades do Java7

8.810 visualizações

Publicada em

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.

Publicada em: Tecnologia
0 comentários
6 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
8.810
No SlideShare
0
A partir de incorporações
0
Número de incorporações
316
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
6
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Novidades do Java7

  1. 1. As novidades do Java 7 Leandro Nunes - RSJUG [email_address] FLISOL 2010 – Porto Alegre/RS
  2. 2. #whoami <ul><li>Leandro Nunes </li><ul><li>Programador Java (SCJP)
  3. 3. Coordenador do RSJUG - www.rsjug.org
  4. 4. Membro do Grupo de Usuários OpenSolaris/POA
  5. 5. Palestrante no FISL 10, JUGDay, Software Freedom Day...
  6. 6. Blog
  7. 7. http://leandron.wordpress.com - essa apresentação está lá </li></ul></ul>
  8. 8. Sobre o que vamos falar... <ul><li>Java e software livre </li><ul><li>O projeto OpenJDK </li></ul><li>Java 7 </li><ul><li>Mudanças na linguagem
  9. 9. Suporte à linguagens dinâmicas
  10. 10. Modularização [JSR-294]
  11. 11. Cronograma da JDK7 </li></ul><li>Referências e Links </li></ul>
  12. 12. Java e Software Livre OpenJDK http://openjdk.dev.java.net
  13. 13. O projeto OpenJDK <ul><li>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. 14. Hoje isso é realidade... </li></ul>
  15. 15. Java 7 Mudanças na linguagem Project Coin http://openjdk.java.net/projects/coin
  16. 16. String em switch String s = &quot;abc&quot;; switch(s) { case &quot;abc&quot;: processAbc(s); break; case &quot;def&quot;: case &quot;DEF&quot;: processDef(s); break; case &quot;ghi&quot;: processGhi(s); default: processDefault(s); break; } <ul><li>Antes só era permitido com tipos inteiros e enums </li></ul>
  17. 17. Verificação de null s <ul><li>Antes, para verificar se um objeto tem referência nula... </li></ul>String aMember = null; if ( g != null && g.members != null && g.members[0].name != null ) {     aMember = g.members[0].name; } else {     aMember = &quot;nobody&quot;; }
  18. 18. Verificação de null s <ul><li>Agora existe um operador exclusivo para essa verificação, inline
  19. 19. E o mesmo código do slide anterior ficaria assim </li></ul>final String aMember = g?.members?[0]?.name ?: &quot;nobody&quot;;
  20. 20. Tipos inteiros <ul><li>Suporte à representação de binários
  21. 21. Separadores “ _ ” (para aumentar a legibilidade)
  22. 22. Novos sufixos para tipos inteiros </li><ul><li>Byte: y
  23. 23. Short: s
  24. 24. Obs: no build atual, ainda não implementado. </li></ul></ul>
  25. 25. Tipos inteiros <ul><li>Binários
  26. 26. Separadores </li></ul>//equivalente ao numero 12, em decimal int numeroBinario = 0b1100; int numeroDoTelefone = 555_555_1212; int numeroDoCartao = 5555_5555_5555_5555;
  27. 27. Tipos inteiros <ul><li>Sufixos para byte e short
  28. 28. Antes
  29. 29. Agora </li></ul>byte[] stuff = { (byte)0x80,  (byte)0xFF}; byte[] ufum7 = { 0x80y, 0xFFy }; puro overhead! Simples, prático, elegante!
  30. 30. Acesso indexado à listas e mapas <ul><li>Podemos fazer acesso direto a um membro de lista um mapa, através de seu indice ou chave
  31. 31. Lista
  32. 32. Mapa </li></ul>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. 33. Declaração literal de Collection <ul><li>Para declarar uma collection inicializada...
  34. 34. Antes
  35. 35. Java 7 </li></ul>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. 36. Declaração literal de Collection <ul><li>Para os mapas, não existia uma declaração que em uma mesma linha inicializasse os itens
  37. 37. Antes </li></ul>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. 38. Declaração literal de Collection <ul><li>Em Java 7, o mesmo mapa pode ser inicializado da seguinte forma </li></ul>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. 39. Simplificação em generics <ul><li>Não precisamos mais ser redundantes!
  40. 40. ANTES
  41. 41. Java 7 </li></ul>Map <String, List<String>> anagrams = new HashMap <String, List<String>> (); Map <String, List<String>> anagrams = new HashMap <> (); Igual! Lógico!
  42. 42. Tratamento de exceções <ul><li>Quando queríamos tratar várias exceções com um código em comum... </li></ul>} catch (Exception1 ex) {     LOGGER.log(Level.SEVERE, ex);     throw ex; } catch (Exception2 ex) {     LOGGER.log(Level.SEVERE, ex);     throw ex; }
  43. 43. Tratamento de exceções <ul><li>Em Java 7 é possível tratar várias exceções num mesmo bloco... </li></ul>} catch (Exception1 | Exception2 ex) {     LOGGER.log(Level.SEVERE, ex);     throw ex; } Várias exceções aqui!
  44. 44. Gerenciamento de recursos <ul><li>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. 45. Versão Java <= 6 </li></ul>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. 46. Gerenciamento de recursos <ul><li>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. 47. Versão Java 7 </li></ul>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. 48. Outras melhorias <ul><li>Indexação de arrays com 64-bits </li><ul><li>Mais de 3.000.000 de elementos </li></ul></ul>
  49. 49. Java 7 Indo além...
  50. 50. Suporte à linguagens dinâmicas <ul><li>Da Vinci Machine Project (JSR 292)
  51. 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.” </li></ul>
  52. 52. Suporte à linguagens dinâmicas <ul><li>Hoje são dezenas de linguagens que rodam na JVM </li></ul>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. 53. Suporte à linguagens dinâmicas <ul><li>O objetivo deste projeto é criar instruções na JVM para ativar bytecodes externos
  54. 54. O nome dessa instrução é invokeDynamic </li></ul>
  55. 55. Modularização <ul><li>Project Jigsaw (JSR-294)
  56. 56. O objetivo deste projeto é criar um sistema para modularização para projetos Java
  57. 57. De acordo com as especificações, esse sistema de módulos deve ser capaz de suportar </li><ul><li>Módulos da JVM
  58. 58. Módulos de pacotes nativos
  59. 59. Módulos dentro de sua estrutura de pacotes </li></ul></ul>
  60. 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. 61. Modularização <ul><li>Todos esses dados ficam num arquivo chamado </li><ul><li>module-info.java
  62. 62. No diretório raiz do seu código fonte </li></ul></ul>
  63. 63. Cronograma JDK7 <ul><li>Atualmente : b89 (15/04/2010)
  64. 64. M8 2010/04/16 – 2010/06/03 (b96)
  65. 65. M9 2010/06/04 – 2010/07/22 (b103)
  66. 66. M10 2010/07/23 – 2010/09/09 (b110) </li></ul>
  67. 67. Referências e links <ul><li>Palestra do Simon Ritter sobre Java 7, apresentada no Sun Tech Days 2009-2010 </li><ul><li>http://uk.sun.com/sunnews/events/2009/dec/java/pdf/6a%20-%20JDK7%20-%20Simon%20Ritter.pdf </li></ul><li>http://openjdk.java.net/
  68. 68. http://jdk7.dev.java.net/
  69. 69. http://www.rsjug.org
  70. 70. http://java.sun.com/features/jdk/7/
  71. 71. http://www.jcp.org </li></ul>
  72. 72. As novidades do Java 7 Leandro Nunes - RSJUG [email_address] FLISOL 2010 – Porto Alegre/RS ?

×