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.
Project Coin: Pequenas                    mudanças, grandes                        facilidades                            ...
Melhorias na Linguagem Java                    •      Máquina Virtual                    •      Linguagem (sintaxe e semân...
Melhorias na Linguagem Java                    •      Máquina Virtual                    •      Linguagem (sintaxe e semân...
Melhorias na Linguagem Java                    (sintaxe e semântica)                    • JSR 334: Small Enhancements to t...
Separador de dígitos em                             literais numéricos                public class SeparadorDigitos {     ...
Separador de dígitos em                             literais numéricos                Também é possível fazer isso:       ...
Separador de dígitos em                             literais numéricos                Também é possível fazer isso:       ...
Literais binários                Tarefa: Construir um método para imprimir os estados de uma                válvula, que p...
Literais binários       1      public static final int ALARME = 0b001; // o valor é 1       2      public static final int...
String na condição do switch                    • Os compiladores são responsáveis por                           traduzir ...
String na condição do switch      1       public static void main(String[] args) {      2         for (String arg : args) ...
Inferência na criação de                 objetos com tipos genéricos                    •      Desde a introdução dos tipo...
Inferência na criação de                 objetos com tipos genéricos                      1 public class InferenciaCriacao...
Inferência na criação de                 objetos com tipos genéricos                      1 public class InferenciaCriacao...
Inferência na criação de                 objetos com tipos genéricos                      1 public class InferenciaCriacao...
Inferência na criação de                 objetos com tipos genéricos                      1 public class InferenciaCriacao...
Simplificação na invocação                         de métodos varargs               public class TesteVarargs {            ...
Simplificação na invocação                         de métodos varargs               public class TesteVarargs {            ...
Simplificação na invocação                         de métodos varargs               public class TesteVarargs {            ...
Simplificação na invocação                         de métodos varargs               Método asList da classe Arrays         ...
Simplificação na invocação                         de métodos varargs               A solução para o problema é criar uma f...
Simplificação na invocação                         de métodos varargs               A solução para o problema é criar uma f...
Simplificação na invocação                         de métodos varargs                    • Os métodos e construtores da pla...
Gerenciamento automático                          de recursos                    • Criação da nova interface              ...
Gerenciamento automático                          de recursos               1 public void lerArquivo() {               2  ...
Gerenciamento automático                          de recursos               1 public void lerArquivo() {               2  ...
Gerenciamento automático                          de recursos                 1 public void lerArquivo() {                ...
Gerenciamento automático                          de recursos                 1 public void lerArquivo() {                ...
Multicatch e Rethrow                          mais preciso                    • A cláusula catch está habilitada para uma ...
Multicatch           private Object instantiate(Class<?> clazz) {             try {               Object o = clazz.newInst...
Multicatch           private Object instantiate(Class<?> clazz) {             try {               Object o = clazz.newInst...
Rethrow mais preciso           private Object instantiate(Class<?> clazz) {             try {               Object o = cla...
Rethrow mais preciso           private Object instantiate(Class<?> clazz) throws             InstantiationException, Illeg...
Rethrow mais preciso           private Object instantiate(Class<?> clazz) throws             InstantiationException, Illeg...
Rethrow mais preciso           private Object instantiate(Class<?> clazz) throws             InstantiationException, Illeg...
Rethrow mais preciso           private Object instantiate(Class<?> clazz) throws             InstantiationException, Illeg...
Conclusões                    • Com a nova versão do Java pretende-se                           reduzir a verbosidade da l...
FIM                               Perguntas?                                         Marcelo de Castro                    ...
Upcoming SlideShare
Loading in …5
×

Novidades java 7

344 views

Published on

Apresentação feita em conjunto com o Marcelo de Castro no TDC 2011 sobre as novidades do Java 7.

  • Be the first to comment

  • Be the first to like this

Novidades java 7

  1. 1. Project Coin: Pequenas mudanças, grandes facilidades Marcelo de Castro Wellington Ricardo Pinheirodomingo, 31 de março de 2013
  2. 2. Melhorias na Linguagem Java • Máquina Virtual • Linguagem (sintaxe e semântica) • Class Loader • Internacionalização • I/O e Rede • Segurança e Criptografia • JDBC • Camada Cliente • Gerenciamento (JMX e MBeans)domingo, 31 de março de 2013
  3. 3. Melhorias na Linguagem Java • Máquina Virtual • Linguagem (sintaxe e semântica) • Class Loader • Internacionalização • I/O e Rede • Segurança e Criptografia • JDBC • Camada Cliente • Gerenciamento (JMX e MBeans)domingo, 31 de março de 2013
  4. 4. Melhorias na Linguagem Java (sintaxe e semântica) • JSR 334: Small Enhancements to the JavaTM Programming Language • Especificação do projeto Coin (subprojeto do OpenJDK) • O objetivo do projeto é prover melhorias para a linguagem Javadomingo, 31 de março de 2013
  5. 5. Separador de dígitos em literais numéricos public class SeparadorDigitos { public static void main(String[] args) { int i = 1_234_567_890; // isso é medonho...mas compila! Integer i1 = new Integer(12_34_56_78_90); Integer i2 = new Integer(1_2_3_4_5_6_7_8_9_0); System.out.println(i == i1); // imprime true System.out.println(i1.equals(i2)); // imprime true } }domingo, 31 de março de 2013
  6. 6. Separador de dígitos em literais numéricos Também é possível fazer isso: float f1 = 123_456.7_5F; double d1 = 12____345D; double d2 = 0x1.ffff_ffff_ffff_fP1_023;domingo, 31 de março de 2013
  7. 7. Separador de dígitos em literais numéricos Também é possível fazer isso: 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; int intRuim2 = 1234_; float zuado = 123_456.75_F;domingo, 31 de março de 2013
  8. 8. Literais binários Tarefa: Construir um método para imprimir os estados de uma válvula, que podem ser: 001 Alarme 010 Fechada 100 Aberta o método recebe como entrada um inteiro com obtido na última leitura e deverão ser verificados quais os bits de estado estão com o valor 1.domingo, 31 de março de 2013
  9. 9. Literais binários 1 public static final int ALARME = 0b001; // o valor é 1 2 public static final int FECHADA = 0b010; // o valor é 2 3 public static final int ABERTA = 0b100; // o valor é 4 4 public void mostraEstado(int ultimaLeitura) { 5 final int[] mascaras = {ALARME, FECHADA, ABERTA}; 6 final String[] mensagens = {"alarme", "fechada", "aberta"}; 7 for (int i = 0; i < mascaras.length; i++) { 8 if ((ultimaLeitura & mascaras[i]) == mascaras[i]) 9 System.out.print(mensagens[i] + " "); 10 } 11 System.out.println(); 12 }domingo, 31 de março de 2013
  10. 10. String na condição do switch • Os compiladores são responsáveis por traduzir um switch de strings em bytecode com a semântica adequada • Suporte direto a strings no switch pode ser adicionado em uma futura versão da plataformadomingo, 31 de março de 2013
  11. 11. String na condição do switch 1 public static void main(String[] args) { 2 for (String arg : args) { 3 switch(arg) { 4 case "-o1": 5 System.out.println("modo de alta otimização (+lento)"); 6 break; 7 case "-o0": 8 System.out.println("modo de baixa otimização (+rápido)"); 9 break; 10 default: 11 System.err.printf("Parâmetro %s inválido. n", param); 12 System.exit(-1); 13 } 14 } 15 }domingo, 31 de março de 2013
  12. 12. Inferência na criação de objetos com tipos genéricos • Desde a introdução dos tipos genéricos, construções com tipos genéricos explícitos podem ser atribuídos à variáveis raw type (sem generics) ou com um wildcard: // Java 5+ // desencorajado, mas legal List rawList = new ArrayList<Object>(); List<?> wildList = new ArrayList<Object>(); // consequentemente, no Java 7: List rawList = new ArrayList<>(); List<?> wildList = new ArrayList<>();domingo, 31 de março de 2013
  13. 13. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<Integer, Set<Integer>>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<Integer>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 }domingo, 31 de março de 2013
  14. 14. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 }domingo, 31 de março de 2013
  15. 15. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 }domingo, 31 de março de 2013
  16. 16. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet; 7 mapOfIntegers.put(aKey, aSet = new HashSet<>()); 8 } 9 }domingo, 31 de março de 2013
  17. 17. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } }domingo, 31 de março de 2013
  18. 18. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } } O seguinte warning é apresentado ao compilarmos a classe: creation of type java.util.Set<java.lang.Integer>[] for varargs parameter List<Set<Integer>> listOfSets = Arrays.asList(aSet);domingo, 31 de março de 2013
  19. 19. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } } Compilando o programa com a opção -XD-printflat public class TesteVarargs { public static void main(String[] args) { Set aSet = new HashSet(); List listOfSets = Arrays.asList(new Set[]{aSet}); } }domingo, 31 de março de 2013
  20. 20. Simplificação na invocação de métodos varargs Método asList da classe Arrays public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } Mas esse warning é gerado na chamada de qualquer método com assinatura do tipo: <T> Tipo<T> metodo(T... params)domingo, 31 de março de 2013
  21. 21. Simplificação na invocação de métodos varargs A solução para o problema é criar uma forma de informar ao compilador que a chamada ao método asList não corre o risco de dar problemasdomingo, 31 de março de 2013
  22. 22. Simplificação na invocação de métodos varargs A solução para o problema é criar uma forma de informar ao compilador que a chamada ao método asList não corre o risco de dar problemas @SafeVarargs @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); }domingo, 31 de março de 2013
  23. 23. Simplificação na invocação de métodos varargs • Os métodos e construtores da plataforma anotados com @SafeVarargs são: public static <T> List<T> java.util.Arrays.asList(T... a) public static <T> boolean java.util.Collections.addAll( Collection<? super T>, c, T ... elements) public static <E extends Enum<E>> java.util.EnumSet<E> EnumSet.of(E first, E .... rest) protected final void javax.swing.SwingWorker.publish( V ... chunks)domingo, 31 de março de 2013
  24. 24. Gerenciamento automático de recursos • Criação da nova interface java.lang.AutoCloseable • Bibliotecas adaptadas para implementar a nova interface • java.lang.Throwable, um novo construtor e dois novos métodos, para facilitar o gerenciamento de exceções suprimidasdomingo, 31 de março de 2013
  25. 25. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 FileReader reader = null; 3 try { 4 reader = new FileReader("arquivo"); 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } finally { 9 if(reader != null) { 10 try { 11 reader.close(); 12 } catch (IOException e) { 13 // tenta fazer alguma outra coisa aqui! 14 } 15 } 16 } 17 }domingo, 31 de março de 2013
  26. 26. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 FileReader reader = null; 3 try { 4 reader = new FileReader("arquivo"); 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } finally { 9 if(reader != null) { 10 try { 11 reader.close(); 12 } catch (IOException e) { 13 // tenta fazer alguma outra coisa aqui! 14 } 15 } 16 } 17 }domingo, 31 de março de 2013
  27. 27. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 3 try(FileReader reader = new FileReader("arquivo")) { 4 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } 9 }domingo, 31 de março de 2013
  28. 28. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 3 try(FileReader reader = new FileReader("arquivo")) { 4 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } 9 } Qualquer classe que implementa a interface java.lang.AutoCloseable pode ser “gerenciada” pelo try!domingo, 31 de março de 2013
  29. 29. Multicatch e Rethrow mais preciso • A cláusula catch está habilitada para uma série de tipos exceções separadas pelo operador “OR”, símbolo “|”, na declaração do parâmetro • 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çadosdomingo, 31 de março de 2013
  30. 30. Multicatch private Object instantiate(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); } }domingo, 31 de março de 2013
  31. 31. Multicatch private Object instantiate(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); } }domingo, 31 de março de 2013
  32. 32. Rethrow mais preciso private Object instantiate(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); } }domingo, 31 de março de 2013
  33. 33. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw e; } }domingo, 31 de março de 2013
  34. 34. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw e; } }domingo, 31 de março de 2013
  35. 35. Rethrow mais preciso private Object instantiate(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; } } Isso compila?domingo, 31 de março de 2013
  36. 36. Rethrow mais preciso private Object instantiate(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; } } Isso compila? No Java 6 não compila!! No Java 7 compila!!domingo, 31 de março de 2013
  37. 37. Conclusões • Com a nova versão do Java pretende-se reduzir a verbosidade da linguagem • Após o lançamento do Java 7, é sua vez de testar!! Baixe a versão e divirta-sedomingo, 31 de março de 2013
  38. 38. FIM Perguntas? Marcelo de Castro @mcastroinfo Wellington Pinheiro @wrpinheirodomingo, 31 de março de 2013

×