novidades java 7

Download Novidades java 7

Post on 14-Jul-2015

138 views

Category:

Documents

0 download

Embed Size (px)

TRANSCRIPT

  • Project Coin: Pequenasmudanas, grandes

    facilidadesMarcelo de Castro

    Wellington Ricardo Pinheiro

    domingo, 31 de maro de 2013

  • Melhorias na Linguagem Java

    Mquina Virtual Linguagem (sintaxe e semntica) Class Loader Internacionalizao I/O e Rede Segurana e Criptografia JDBC Camada Cliente Gerenciamento (JMX e MBeans)

    domingo, 31 de maro de 2013

  • Melhorias na Linguagem Java

    Mquina Virtual Linguagem (sintaxe e semntica) Class Loader Internacionalizao I/O e Rede Segurana e Criptografia JDBC Camada Cliente Gerenciamento (JMX e MBeans)

    domingo, 31 de maro de 2013

  • Melhorias na Linguagem Java(sintaxe e semntica)

    JSR 334: Small Enhancements to the JavaTM Programming Language

    Especificao do projeto Coin (subprojeto do OpenJDK)

    O objetivo do projeto prover melhorias para a linguagem Java

    domingo, 31 de maro de 2013

  • Separador de dgitos em literais numricos

    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 maro de 2013

  • Separador de dgitos em literais numricos

    Tambm possvel fazer isso:

    float f1 = 123_456.7_5F;double d1 = 12____345D;double d2 = 0x1.ffff_ffff_ffff_fP1_023;

    domingo, 31 de maro de 2013

  • Separador de dgitos em literais numricos

    Tambm possvel fazer isso:

    float f1 = 123_456.7_5F;double d1 = 12____345D;double d2 = 0x1.ffff_ffff_ffff_fP1_023;

    Isso no compila:

    int intRuim1 = _1234;int intRuim2 = 1234_;float zuado = 123_456.75_F;

    domingo, 31 de maro de 2013

  • Literais binriosTarefa: Construir um mtodo para imprimir os estados de uma vlvula, que podem ser:

    001 Alarme

    010 Fechada

    100 Aberta

    o mtodo recebe como entrada um inteiro com obtido na ltima leitura e devero ser verificados quais os bits de estado esto com o valor 1.

    domingo, 31 de maro de 2013

  • Literais binrios

    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 maro de 2013

  • Os compiladores so responsveis por traduzir um switch de strings em bytecode com a semntica adequada

    Suporte direto a strings no switch pode ser adicionado em uma futura verso da plataforma

    String na condio do switch

    domingo, 31 de maro de 2013

  • String na condio 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 otimizao (+lento)"); 6 break; 7 case "-o0": 8 System.out.println("modo de baixa otimizao (+rpido)"); 9 break;10 default:11 System.err.printf("Parmetro %s invlido. \n", param);12 System.exit(-1);13 }14 }15 }

    domingo, 31 de maro de 2013

  • Desde a introduo dos tipos genricos, construes com tipos genricos explcitos podem ser atribudos variveis raw type (sem generics) ou com um wildcard:

    Inferncia na criao de objetos com tipos genricos

    // Java 5+// desencorajado, mas legalList rawList = new ArrayList();List wildList = new ArrayList();

    // consequentemente, no Java 7:List rawList = new ArrayList();List wildList = new ArrayList();

    domingo, 31 de maro de 2013

  • Inferncia na criao de objetos com tipos genricos

    1 public class InferenciaCriacao {2 public static void main(String[] args) { 3 Map mapOfIntegers = 4 new HashMap(); 5 Integer aKey = 10;

    6 Set aSet = new HashSet();7 mapOfIntegers.put(aKey, aSet);8 }9 }

    domingo, 31 de maro de 2013

  • Inferncia na criao de objetos com tipos genricos

    1 public class InferenciaCriacao {2 public static void main(String[] args) {

    3 Map mapOfIntegers = 4 new HashMap(); 5 Integer aKey = 10;

    6 Set aSet = new HashSet();7 mapOfIntegers.put(aKey, aSet);8 }9 }

    domingo, 31 de maro de 2013

  • Inferncia na criao de objetos com tipos genricos

    1 public class InferenciaCriacao {2 public static void main(String[] args) {

    3 Map mapOfIntegers = 4 new HashMap(); 5 Integer aKey = 10;

    6 Set aSet = new HashSet();7 mapOfIntegers.put(aKey, aSet);8 }9 }

    domingo, 31 de maro de 2013

  • Inferncia na criao de objetos com tipos genricos

    1 public class InferenciaCriacao {2 public static void main(String[] args) {

    3 Map mapOfIntegers = 4 new HashMap(); 5 Integer aKey = 10;

    6 Set aSet;7 mapOfIntegers.put(aKey, aSet = new HashSet());8 }9 }

    domingo, 31 de maro de 2013

  • Simplificao na invocao de mtodos varargs

    public class TesteVarargs { public static void main(String[] args) { Set aSet = new HashSet(); List listOfSets = Arrays.asList(aSet); }}

    domingo, 31 de maro de 2013

  • Simplificao na invocao de mtodos varargs

    public class TesteVarargs { public static void main(String[] args) { Set aSet = new HashSet(); List listOfSets = Arrays.asList(aSet); }}

    creation of type java.util.Set[] for varargs parameter List listOfSets = Arrays.asList(aSet);

    O seguinte warning apresentado ao compilarmos a classe:

    domingo, 31 de maro de 2013

  • Simplificao na invocao de mtodos varargs

    public class TesteVarargs { public static void main(String[] args) { Set aSet = new HashSet(); List listOfSets = Arrays.asList(aSet); }}

    Compilando o programa com a opo -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 maro de 2013

  • Simplificao na invocao de mtodos varargs

    Mtodo asList da classe Arrays

    public static List asList(T... a) { return new ArrayList(a); }

    Mas esse warning gerado na chamada de qualquer mtodo com assinatura do tipo:

    Tipo metodo(T... params)

    domingo, 31 de maro de 2013

  • Simplificao na invocao de mtodos varargs

    A soluo para o problema criar uma forma de informar ao compilador que a chamada ao mtodo asList no corre o risco de dar problemas

    domingo, 31 de maro de 2013

  • Simplificao na invocao de mtodos varargs

    A soluo para o problema criar uma forma de informar ao compilador que a chamada ao mtodo asList no corre o risco de dar problemas

    @SafeVarargs

    @SafeVarargspublic static List asList(T... a) { return new ArrayList(a); }

    domingo, 31 de maro de 2013

  • Os mtodos e construtores da plataforma anotados com @SafeVarargs so:

    Simplificao na invocao de mtodos varargs

    public static List java.util.Arrays.asList(T... a)

    public static boolean java.util.Collections.addAll(Collection

  • Criao da nova interface java.lang.AutoCloseable

    Bibliotecas adaptadas para implementar a nova interface

    java.lang.Throwable, um novo construtor e dois novos mtodos, para facilitar o gerenciamento de excees suprimidas

    Gerenciamento automtico de recursos

    domingo, 31 de maro de 2013

  • Gerenciamento automtico 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 exceo 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 maro de 2013

  • Gerenciamento automtico 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 exceo 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 maro de 2013

  • Gerenciamento automtico 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 exceo 8 } 9 }

    domingo, 31 de maro de 2013

  • Gerenciamento automtico de recursos

    Qualquer classe que implementa a interface java.lang.AutoCloseable

    pode ser gerenciada pelo try!

    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 exceo 8 } 9 }

    domingo, 31 de maro de 2013

  • Multicatch e Rethrow mais preciso

    A clusula catch est habilitada para uma srie de tipos excees separadas pelo operador OR, smbolo |, na declarao do parmetro

    Se o parmetro de uma exceo no for