SlideShare une entreprise Scribd logo
1  sur  44
Télécharger pour lire hors ligne
JDK 7 – Modificações na Linguagem
           Eder Magalhães
             @edermag
           www.yaw.com.br

                            Globalcode	
  –	
  Open4education
Agenda
!     Expectativa na evolução da Linguagem Java
!     Qual o papel do OpenJDK ?
!     Especificação do Java 7
!     Mudanças na linguagem (Projeto Coin)
!     New IO no Java 7 (NIO.2)
!     Suporte a linguagens com tipagem dinâmica
!     Fork/Join Framework;
!     JDBC 4.1;
!     Planejamento do Java 8;
                                         Globalcode	
  –	
  Open4education
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 28/07/2011;




                                         Globalcode	
  –	
  Open4education
Durante esses 5 anos
!   Grande 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
         fim de 2012;


                                                   Globalcode	
  –	
  Open4education
Qual papel do OpenJDK?
!   Tornar o desenvolvimento do JDK open source
    (código aberto e livre);

!   Criado pela Sun em 2007;

!   JDK 7 foi o segundo projeto do OpenJDK;

!   Organiza a evolução do JDK em sub-projetos;

!   Pode ser visto com uma opção mais agíl na
    evolução do Java, em relação demora/burocrácia
    do JCP;
                                       Globalcode	
  –	
  Open4education
JSR 336 – Especificação do Java 7
!   Melhorias:
   !     Linguagem;
   !     Virtual Machine;
   !     Class loader;
   !     I/O, Rede e Concorrência;
   !     JDBC;
   !     Swing;
   !     Web;
   !     Javadoc;



                                     Globalcode	
  –	
  Open4education
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	
  –	
  Open4education
Separador de dígitos em literais numéricos

  int i = 1_234_567_890;!
  !
  // isso eh esquisito...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!

  float f1 = 123_456.7_5F;!
  double d1 = 12____345D;!
  double d2 = 0x1.ffff_ffff_ffff_fP1_023;!
  !
  // isso nao compila:!
  int intRuim1 = _1234;!
  int intRuim2 = 1234_;!
  float zuado = 123_456.75_F;!
  !

                                               Globalcode	
  –	
  Open4education
Literais binários

public static final int ALARME = 0b001; // o valor é 1 !
public static final int FECHADA = 0b010; // o valor é 2 !
public static final int ABERTA = 0b100; // o valor é 4 !
!
public void mostraEstado(int ultimaLeitura) { !
   final int[] mascaras = {ALARME, FECHADA, ABERTA}; !
   final String[] mensagens = {"alarme", "fechada", "aberta"};!
!
   for (int i = 0; i < mascaras.length; i++) { !
      if ((ultimaLeitura & mascaras[i]) == mascaras[i]) !
        System.out.println(mensagens[i]);!
   }!
}!




                                                Globalcode	
  –	
  Open4education
String na condição do switch
public static void main(String[] args) {!
   for (String arg : args) {!
      switch(arg) {!
         case "-o1”:!
           System.out.println("modo de alta otimização (+lento)");!
           break;!
         case "-o0":!
           System.out.println("modo de baixa otimização (+rápido)");!
           break;!
         default:!
           System.err.printf("Parâmetro %s inválido. n", param);!
           System.exit(-1);!
      }!
   }!
}!

       O compilador considera comparação via hashcode!

                                                    Globalcode	
  –	
  Open4education
Inferência na criação de objetos com
tipos genéricos
 !   Desde sua introdução, construções com tipos
     genéricos explícitos podem ser atribuídos à
     variáveis raw type (sem generics) ou com um
     wildcard:

    // Java 5+!
    List    rawList = new ArrayList<Object>();!
    List<?> wildList = new ArrayList<Object>();!
    !
    // consequentemente, no Java 7 c/ diamond:!
    List    rawList = new ArrayList<>();!
    List<?> wildList = new ArrayList<>();!


                                              Globalcode	
  –	
  Open4education
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	
  –	
  Open4education
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	
  –	
  Open4education
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 instrucao a seguir nao compila! !
 mapOfIntegers.put(aKey, new HashSet<>());!




                                                Globalcode	
  –	
  Open4education
Simplificação na chamada de métodos
com varargs
 !   Considere o seguinte trecho de código:

 Set<Integer> aSet = new HashSet<Integer>();!
 aSet.add(100);!
 aSet.add(150);!
 !
 List<Set<Integer>> listOfSets = Arrays.asList(aSet);!




 !   Esse warning é apresentado ao compilar (-Xlint) a classe:

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


                                                         Globalcode	
  –	
  Open4education
Simplificação na chamada de métodos
com varargs
  !   Considere o seguinte trecho de código:

 Set<Integer> aSet = new HashSet<Integer>();!
 aSet.add(100);!
 aSet.add(150);!
 !
 List<Set<Integer>> listOfSets = Arrays.asList(aSet);!




  !   Código antes compilação, com a opção –XD-printflat:
 ...!
 List<Set<Integer>> listOfSets = Arrays.asList(new Set[]{aSet});!



                                                 Globalcode	
  –	
  Open4education
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	
  –	
  Open4education
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	
  –	
  Open4education
Simplificação na chamada de métodos
com varargs

 !   Alguns métodos do Java anotados com @SafeVarargs:

 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)!



                                                Globalcode	
  –	
  Open4education
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	
  –	
  Open4education
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	
  –	
  Open4education
Sem o gerenciamento automático…
 public void lerArzquivo() {!
    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	
  –	
  Open4education
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 !
    }!
 }!



    Qualquer classe que implementa a interface
             java.lang.AutoCloseable
          pode ser gerenciada pelo try!

                                                Globalcode	
  –	
  Open4education
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	
  –	
  Open4education
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	
  –	
  Open4education
Antes do 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	
  –	
  Open4education
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	
  –	
  Open4education
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	
  –	
  Open4education
Rethrow opção 1

 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	
  –	
  Open4education
Rethrow opção 2

 private Object novoObjeto(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; !
    }!
 }!




                                                Globalcode	
  –	
  Open4education
Rethrow novo

 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	
  –	
  Open4education
New I/O no Java 7
 !   JSR 203: Nova API para New I/O (“NIO.2”):
   !     FileSystem, Path
   !     FileSystems, Files, Paths;
   !     FileStore;
   !     BasicFileAttributes;
 !   Novo pacote: java.nio.file
 !   Resolve algumas limitações da classe File:
   !   Manipulação de arquivo (File system);
   !   Suporte a links simbólicos;


                                               Globalcode	
  –	
  Open4education
New I/O no Java 7 – Demo I
 !   Fazer backup e mover arquivo:


 Path home = Paths.get(/home/usuario);!
    Path foto = home.resolve(”foto.jpg);!
    Path backup = home.resolve(”foto.jpg.backup);!
    !
    //faz a copia!
    Files.copy(foto, backup);!
    !
    //move o arquivo!
    Files.move(backup, home.resolve(”back/+backup.getFileName()));!




                                                   Globalcode	
  –	
  Open4education
New I/O no Java 7 – Demo II
 !   Iterar em arquivos de uma pasta e verificar quais
     arquivos são links:
 Path dir = Paths.get(/home/usuario);!
    String filter = *.jpg;!
    !
    //busca por arquivos com extensao jpg!
    DirectoryStreamPath st = Files.newDirectoryStream(dir,filter);!
    !
    for (Path p: st) {!
       boolean isLink = Files.isSymbolicLink(p);!
       System.out.println(p + (isLink ? “ (link)”:””));!
       if (isLink) {!
          System.out.println(“t link p/ ”+Files.readSymbolicLink(p));!
       }!
    }!

                                                   Globalcode	
  –	
  Open4education
Ainda sobre I/O: mudanças em Sockets
 !     API para socket endereçado a multicasting;
 !     Acesso assíncrono para sockets e arquivos;
 !     Suporte a multitarefa com sockets;
 !     Sockets Direct Protocol (SDP):
      !   Maior performance em Infiniband connections (Linux e
          Solaris);
 !   Stream Control Transmisson Protocol;
      !   API especifica para Solaris;
 !   Suporte a (Windows) Vista Ipv6 stack;

                                               Globalcode	
  –	
  Open4education
Suporte a linguagens com tipagem
dinâmica (JSR 292)

 ! Desde de o Java 6, outras linguagens podem ser
   utilizadas na plataforma (JSR 223):
   ! Jython, JRuby, Groovy, Rhino;


 ! Problema:
   ! Ao invocar um método, por exemplo, a VM precisa de
     todas as informações sobre tipagem no bytecode.
     Mas linguagens dinâmicas não forçam uso do tipo!


                                          Globalcode	
  –	
  Open4education
Suporte a linguagens com tipagem
dinâmica (JSR 292)

       Exemplo Java            Exemplo JavaScript
    int tamanho(String p){!   function tamanho() {!
      return p.length();!        return p.length;!
    } !                       }!




 !   O compilador JavaScript deve fazer uma pré-
     compilação transformando o programa JS em
     algo completamente tipado!


                                                Globalcode	
  –	
  Open4education
Suporte a linguagens com tipagem
dinâmica (JSR 292)

 ! Solução:
   ! Adicionar uma instrução na VM que possibilite fazer a
     chamada de métodos sem a necessidade de definir
     tipos!


 ! invokeDynamic




                                            Globalcode	
  –	
  Open4education
Fork/Join framework
 !   Dividir para consquitar;
 !   Uma nova solução para processamento paralelo;
 !   Framework projetado para tirar proveito de
     ambientes com múltiplos processadores;
 !   Conceito:
  if (meu fluxo de execução é pequeno o suficiente)!
     processe o fluxo;!
  else!
    divida o fluxo em 2 fluxos menores;!
    verifique a possibilidade de executar esses 2 fluxos;!



                                               Globalcode	
  –	
  Open4education
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	
  –	
  Open4education
Outras melhorias
 !     Performance 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;
      !   Ajustes em dados de moeda;
      !   Re-organização nas formas de locale;
 !   Melhorias na JVM:
      !   Garbage;
      !   Convergência (ainda inicial) com projeto HotRockit;
                                                 Globalcode	
  –	
  Open4education
Java 8: Planejamento
 !     Suporte a Programação Modular;
 !     Projeto Jigsaw;
 !     Projeto Lambda;
 !     Funcionalidades restantes para o Projeto Coin;
 !     Especificação guarda-chuva: JSR 337;




                                          Globalcode	
  –	
  Open4education
Links
 ! http://openjdk.java.net/
 ! http://openjdk.java.net/projects/jdk7/features/
 ! http://java.sun.com/developer/technicalArticles/javase/nio/
 ! http://jcp.org/en/jsr/detail?id=336
 ! http://download.oracle.com/javase/7/docs/technotes/guides/
   jdbc/jdbc_41.html
 ! http://download.oracle.com/javase/tutorial/essential/
   concurrency/forkjoin.html
 ! http://download.oracle.com/javase/7/docs/api/
 ! http://www.infoq.com/br/articles/java7coin



                                                 Globalcode	
  –	
  Open4education
Obrigado !

eder@yaw.com.br
   @edermag




                  Globalcode	
  –	
  Open4education

Contenu connexe

Tendances

Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It YourselfBruno Nascimento
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricksTales Andrade
 
Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Gabriel Machado
 
[Curso Java Basico] Aula 18: Comandos Break e Continue
[Curso Java Basico] Aula 18:  Comandos Break e Continue[Curso Java Basico] Aula 18:  Comandos Break e Continue
[Curso Java Basico] Aula 18: Comandos Break e ContinueLoiane Groner
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação FuncionalTales Andrade
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaRegis Magalhães
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE PoliglotaPhil Calçado
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Androidtdc-globalcode
 

Tendances (16)

Arduino e Python: Do It Yourself
Arduino e Python: Do It YourselfArduino e Python: Do It Yourself
Arduino e Python: Do It Yourself
 
PHP-CLI em 7 passos
PHP-CLI em 7 passosPHP-CLI em 7 passos
PHP-CLI em 7 passos
 
TDD com Python (Completo)
TDD com Python (Completo)TDD com Python (Completo)
TDD com Python (Completo)
 
Jsummit 2014
Jsummit 2014Jsummit 2014
Jsummit 2014
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
 
Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017Logs, pra que te quero! @ TDC SP 2017
Logs, pra que te quero! @ TDC SP 2017
 
[Curso Java Basico] Aula 18: Comandos Break e Continue
[Curso Java Basico] Aula 18:  Comandos Break e Continue[Curso Java Basico] Aula 18:  Comandos Break e Continue
[Curso Java Basico] Aula 18: Comandos Break e Continue
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Java 02 Iniciando Uso Java
Java 02 Iniciando Uso JavaJava 02 Iniciando Uso Java
Java 02 Iniciando Uso Java
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Depuração de software
Depuração de softwareDepuração de software
Depuração de software
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
 
1.introducao java
1.introducao java1.introducao java
1.introducao java
 
TDC 2016 - PHP7
TDC 2016 - PHP7TDC 2016 - PHP7
TDC 2016 - PHP7
 
TDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no AndroidTDC2016POA | Trilha Android - Testes no Android
TDC2016POA | Trilha Android - Testes no Android
 

Similaire à Java7 tdc2011

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma JavaJoão Lourenço
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?Rafael Benevides
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012Marco Antonio Maciel
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingEder Magalhães
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoNando Vieira
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVMCaelum
 
Excecoes
ExcecoesExcecoes
ExcecoesEMSNEWS
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java FundamentosWilson Lima
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesRodrigo Cândido da Silva
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemliverig
 

Similaire à Java7 tdc2011 (20)

55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Introducao Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
Aula1
Aula1Aula1
Aula1
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?TDC 2014 SP - E o DeltaSpike ?
TDC 2014 SP - E o DeltaSpike ?
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
Introdução ao java Alo Mundo
Introdução ao java Alo MundoIntrodução ao java Alo Mundo
Introdução ao java Alo Mundo
 
O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012O Aduino ama a Internet - TDC 2012
O Aduino ama a Internet - TDC 2012
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
Apostila de java
Apostila de javaApostila de java
Apostila de java
 
JavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computingJavaEE 7, na era do cloud computing
JavaEE 7, na era do cloud computing
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo preto
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVM
 
Tutorial JavaFX simples
Tutorial JavaFX simplesTutorial JavaFX simples
Tutorial JavaFX simples
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Java1
Java1Java1
Java1
 
Java Fundamentos
Java FundamentosJava Fundamentos
Java Fundamentos
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
JAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagemJAVA: Muito mais que uma linguagem
JAVA: Muito mais que uma linguagem
 

Plus de Eder Magalhães

Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeEder Magalhães
 
Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Eder Magalhães
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeEder Magalhães
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaEder Magalhães
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaSEder Magalhães
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesEder Magalhães
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EEEder Magalhães
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooEder Magalhães
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Eder Magalhães
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineEder Magalhães
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoEder Magalhães
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011Eder Magalhães
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVCEder Magalhães
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem PráticaEder Magalhães
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringEder Magalhães
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 
Profissao java gwt e javafx
Profissao java gwt e javafxProfissao java gwt e javafx
Profissao java gwt e javafxEder Magalhães
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010Eder Magalhães
 

Plus de Eder Magalhães (20)

Cvc programacao reativa
Cvc programacao reativaCvc programacao reativa
Cvc programacao reativa
 
Concorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidadeConcorrencia, baixa Latência e alta disponibilidade
Concorrencia, baixa Latência e alta disponibilidade
 
Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8Java Is Back, Novidade do Java 8
Java Is Back, Novidade do Java 8
 
Desenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o ForgeDesenvolva uma app Java web em poucos passos, com o Forge
Desenvolva uma app Java web em poucos passos, com o Forge
 
MongoDB outras alternativas de persistência
MongoDB outras alternativas de persistênciaMongoDB outras alternativas de persistência
MongoDB outras alternativas de persistência
 
Java e uma visão sobre PaaS
Java e uma visão sobre PaaSJava e uma visão sobre PaaS
Java e uma visão sobre PaaS
 
JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidades
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring Roo
 
Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8Futuro da linguagem e plataforma: Java 7 e 8
Futuro da linguagem e plataforma: Java 7 e 8
 
Arquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App EngineArquiteturas Java EE no Google App Engine
Arquiteturas Java EE no Google App Engine
 
Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
 
JSF 2 Components JustJava2011
JSF 2 Components JustJava2011JSF 2 Components JustJava2011
JSF 2 Components JustJava2011
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Introducao ao Spring Web MVC
Introducao ao Spring Web MVCIntroducao ao Spring Web MVC
Introducao ao Spring Web MVC
 
JavaFX: Abordagem Prática
JavaFX: Abordagem PráticaJavaFX: Abordagem Prática
JavaFX: Abordagem Prática
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
Profissao java gwt e javafx
Profissao java gwt e javafxProfissao java gwt e javafx
Profissao java gwt e javafx
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
 

Java7 tdc2011

  • 1. JDK 7 – Modificações na Linguagem Eder Magalhães @edermag www.yaw.com.br Globalcode  –  Open4education
  • 2. Agenda !   Expectativa na evolução da Linguagem Java !   Qual o papel do OpenJDK ? !   Especificação do Java 7 !   Mudanças na linguagem (Projeto Coin) !   New IO no Java 7 (NIO.2) !   Suporte a linguagens com tipagem dinâmica !   Fork/Join Framework; !   JDBC 4.1; !   Planejamento do Java 8; Globalcode  –  Open4education
  • 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 28/07/2011; Globalcode  –  Open4education
  • 4. Durante esses 5 anos !   Grande 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 fim de 2012; Globalcode  –  Open4education
  • 5. Qual papel do OpenJDK? !   Tornar o desenvolvimento do JDK open source (código aberto e livre); !   Criado pela Sun em 2007; !   JDK 7 foi o segundo projeto do OpenJDK; !   Organiza a evolução do JDK em sub-projetos; !   Pode ser visto com uma opção mais agíl na evolução do Java, em relação demora/burocrácia do JCP; Globalcode  –  Open4education
  • 6. JSR 336 – Especificação do Java 7 !   Melhorias: !   Linguagem; !   Virtual Machine; !   Class loader; !   I/O, Rede e Concorrência; !   JDBC; !   Swing; !   Web; !   Javadoc; Globalcode  –  Open4education
  • 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  –  Open4education
  • 8. Separador de dígitos em literais numéricos int i = 1_234_567_890;! ! // isso eh esquisito...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! float f1 = 123_456.7_5F;! double d1 = 12____345D;! double d2 = 0x1.ffff_ffff_ffff_fP1_023;! ! // isso nao compila:! int intRuim1 = _1234;! int intRuim2 = 1234_;! float zuado = 123_456.75_F;! ! Globalcode  –  Open4education
  • 9. Literais binários public static final int ALARME = 0b001; // o valor é 1 ! public static final int FECHADA = 0b010; // o valor é 2 ! public static final int ABERTA = 0b100; // o valor é 4 ! ! public void mostraEstado(int ultimaLeitura) { ! final int[] mascaras = {ALARME, FECHADA, ABERTA}; ! final String[] mensagens = {"alarme", "fechada", "aberta"};! ! for (int i = 0; i < mascaras.length; i++) { ! if ((ultimaLeitura & mascaras[i]) == mascaras[i]) ! System.out.println(mensagens[i]);! }! }! Globalcode  –  Open4education
  • 10. String na condição do switch public static void main(String[] args) {! for (String arg : args) {! switch(arg) {! case "-o1”:! System.out.println("modo de alta otimização (+lento)");! break;! case "-o0":! System.out.println("modo de baixa otimização (+rápido)");! break;! default:! System.err.printf("Parâmetro %s inválido. n", param);! System.exit(-1);! }! }! }! O compilador considera comparação via hashcode! Globalcode  –  Open4education
  • 11. Inferência na criação de objetos com tipos genéricos !   Desde sua introdução, construções com tipos genéricos explícitos podem ser atribuídos à variáveis raw type (sem generics) ou com um wildcard: // Java 5+! List rawList = new ArrayList<Object>();! List<?> wildList = new ArrayList<Object>();! ! // consequentemente, no Java 7 c/ diamond:! List rawList = new ArrayList<>();! List<?> wildList = new ArrayList<>();! Globalcode  –  Open4education
  • 12. 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  –  Open4education
  • 13. 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  –  Open4education
  • 14. 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 instrucao a seguir nao compila! ! mapOfIntegers.put(aKey, new HashSet<>());! Globalcode  –  Open4education
  • 15. Simplificação na chamada de métodos com varargs !   Considere o seguinte trecho de código: Set<Integer> aSet = new HashSet<Integer>();! aSet.add(100);! aSet.add(150);! ! List<Set<Integer>> listOfSets = Arrays.asList(aSet);! !   Esse warning é apresentado ao compilar (-Xlint) a classe: creation of type java.util.Set<java.lang.Integer>[] for varargs parameter List<Set<Integer>> listOfSets = Arrays.asList(aSet); Globalcode  –  Open4education
  • 16. Simplificação na chamada de métodos com varargs !   Considere o seguinte trecho de código: Set<Integer> aSet = new HashSet<Integer>();! aSet.add(100);! aSet.add(150);! ! List<Set<Integer>> listOfSets = Arrays.asList(aSet);! !   Código antes compilação, com a opção –XD-printflat: ...! List<Set<Integer>> listOfSets = Arrays.asList(new Set[]{aSet});! Globalcode  –  Open4education
  • 17. 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  –  Open4education
  • 18. 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  –  Open4education
  • 19. Simplificação na chamada de métodos com varargs !   Alguns métodos do Java anotados com @SafeVarargs: 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)! Globalcode  –  Open4education
  • 20. 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  –  Open4education
  • 21. 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  –  Open4education
  • 22. Sem o gerenciamento automático… public void lerArzquivo() {! 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  –  Open4education
  • 23. 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 ! }! }! Qualquer classe que implementa a interface java.lang.AutoCloseable pode ser gerenciada pelo try! Globalcode  –  Open4education
  • 24. 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  –  Open4education
  • 25. 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  –  Open4education
  • 26. Antes do 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  –  Open4education
  • 27. 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  –  Open4education
  • 28. 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  –  Open4education
  • 29. Rethrow opção 1 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  –  Open4education
  • 30. Rethrow opção 2 private Object novoObjeto(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; ! }! }! Globalcode  –  Open4education
  • 31. Rethrow novo 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  –  Open4education
  • 32. New I/O no Java 7 !   JSR 203: Nova API para New I/O (“NIO.2”): !   FileSystem, Path !   FileSystems, Files, Paths; !   FileStore; !   BasicFileAttributes; !   Novo pacote: java.nio.file !   Resolve algumas limitações da classe File: !   Manipulação de arquivo (File system); !   Suporte a links simbólicos; Globalcode  –  Open4education
  • 33. New I/O no Java 7 – Demo I !   Fazer backup e mover arquivo: Path home = Paths.get(/home/usuario);! Path foto = home.resolve(”foto.jpg);! Path backup = home.resolve(”foto.jpg.backup);! ! //faz a copia! Files.copy(foto, backup);! ! //move o arquivo! Files.move(backup, home.resolve(”back/+backup.getFileName()));! Globalcode  –  Open4education
  • 34. New I/O no Java 7 – Demo II !   Iterar em arquivos de uma pasta e verificar quais arquivos são links: Path dir = Paths.get(/home/usuario);! String filter = *.jpg;! ! //busca por arquivos com extensao jpg! DirectoryStreamPath st = Files.newDirectoryStream(dir,filter);! ! for (Path p: st) {! boolean isLink = Files.isSymbolicLink(p);! System.out.println(p + (isLink ? “ (link)”:””));! if (isLink) {! System.out.println(“t link p/ ”+Files.readSymbolicLink(p));! }! }! Globalcode  –  Open4education
  • 35. Ainda sobre I/O: mudanças em Sockets !   API para socket endereçado a multicasting; !   Acesso assíncrono para sockets e arquivos; !   Suporte a multitarefa com sockets; !   Sockets Direct Protocol (SDP): !   Maior performance em Infiniband connections (Linux e Solaris); !   Stream Control Transmisson Protocol; !   API especifica para Solaris; !   Suporte a (Windows) Vista Ipv6 stack; Globalcode  –  Open4education
  • 36. Suporte a linguagens com tipagem dinâmica (JSR 292) ! Desde de o Java 6, outras linguagens podem ser utilizadas na plataforma (JSR 223): ! Jython, JRuby, Groovy, Rhino; ! Problema: ! Ao invocar um método, por exemplo, a VM precisa de todas as informações sobre tipagem no bytecode. Mas linguagens dinâmicas não forçam uso do tipo! Globalcode  –  Open4education
  • 37. Suporte a linguagens com tipagem dinâmica (JSR 292) Exemplo Java Exemplo JavaScript int tamanho(String p){! function tamanho() {! return p.length();! return p.length;! } ! }! !   O compilador JavaScript deve fazer uma pré- compilação transformando o programa JS em algo completamente tipado! Globalcode  –  Open4education
  • 38. Suporte a linguagens com tipagem dinâmica (JSR 292) ! Solução: ! Adicionar uma instrução na VM que possibilite fazer a chamada de métodos sem a necessidade de definir tipos! ! invokeDynamic Globalcode  –  Open4education
  • 39. Fork/Join framework !   Dividir para consquitar; !   Uma nova solução para processamento paralelo; !   Framework projetado para tirar proveito de ambientes com múltiplos processadores; !   Conceito: if (meu fluxo de execução é pequeno o suficiente)! processe o fluxo;! else! divida o fluxo em 2 fluxos menores;! verifique a possibilidade de executar esses 2 fluxos;! Globalcode  –  Open4education
  • 40. 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  –  Open4education
  • 41. Outras melhorias !   Performance 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; !   Ajustes em dados de moeda; !   Re-organização nas formas de locale; !   Melhorias na JVM: !   Garbage; !   Convergência (ainda inicial) com projeto HotRockit; Globalcode  –  Open4education
  • 42. Java 8: Planejamento !   Suporte a Programação Modular; !   Projeto Jigsaw; !   Projeto Lambda; !   Funcionalidades restantes para o Projeto Coin; !   Especificação guarda-chuva: JSR 337; Globalcode  –  Open4education
  • 43. Links ! http://openjdk.java.net/ ! http://openjdk.java.net/projects/jdk7/features/ ! http://java.sun.com/developer/technicalArticles/javase/nio/ ! http://jcp.org/en/jsr/detail?id=336 ! http://download.oracle.com/javase/7/docs/technotes/guides/ jdbc/jdbc_41.html ! http://download.oracle.com/javase/tutorial/essential/ concurrency/forkjoin.html ! http://download.oracle.com/javase/7/docs/api/ ! http://www.infoq.com/br/articles/java7coin Globalcode  –  Open4education
  • 44. Obrigado ! eder@yaw.com.br @edermag Globalcode  –  Open4education