2012

              As modificações na linguagem:
                        Java 7 e 8
                       Eder Magalhães
                         @edermag
                       www.yaw.com.br

                                          Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Agenda
        Expectativa na evolução da Linguagem Java
        Dolphin: o Java 7
        Mudanças na linguagem: Projeto Coin
        New IO no Java 7 (NIO.2)
        JDBC 4.1;
        Outras características do Java 7;
        Conclusão do plano B: Java 8;
        Type Annotations + Jigsaw + Lambda;
        Links

                                          Globalcode	
  –	
  Open4education
Saturday, May 19, 12
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 07/2011;




                                             Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Durante esses 5 anos
        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
                   final de 2012;



                                                             Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Dolphin, o Java 7 !




                                 Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Java 7 (JSR 336)
        Melhorias:
             Linguagem;
             Virtual Machine;
             Class loader;
             I/O, Rede e Concorrência;
             JDBC;
             Swing;
             Web;
             Javadoc;



                                         Globalcode	
  –	
  Open4education
Saturday, May 19, 12
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
Saturday, May 19, 12
Separador de dígitos e literal binária
        // isso é esquisito... mas compila!
        int i = 1_234_567_890;
        Integer i1 = new Integer(12_34_56_78_90);


        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, intRuim2 = 1234_;
        float outroRuim = 123_456.75_F;


        // literal binária:
        int x = 0b001; // o valor é 1
        int y = 0b010; // o valor é 2



                                                    Globalcode	
  –	
  Open4education
Saturday, May 19, 12
String na condição do switch

   public static void main(String[] args) {
     String msg = "oi";
     switch(msg) {
       case "oi":
           System.out.println("Ola, bem vindo");
           break;
       case "tchau":
           System.out.println("Tchau, ate mais");
           break;
       default:
           System.out.println("mal educado...");
     }
   }



                 O compilador realiza a comparação pelo hashcode!

                                                         Globalcode	
  –	
  Open4education
Saturday, May 19, 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
Saturday, May 19, 12
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
Saturday, May 19, 12
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 instrução a seguir não compila!
       mapOfIntegers.put(aKey, new HashSet<>());




                                                      Globalcode	
  –	
  Open4education
Saturday, May 19, 12
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
Saturday, May 19, 12
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
Saturday, May 19, 12
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
Saturday, May 19, 12
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
Saturday, May 19, 12
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
Saturday, May 19, 12
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
            }
        }




                                                        Globalcode	
  –	
  Open4education
Saturday, May 19, 12
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
Saturday, May 19, 12
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
Saturday, May 19, 12
Sem o 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
Saturday, May 19, 12
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
Saturday, May 19, 12
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
Saturday, May 19, 12
Rethrow específico

        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
Saturday, May 19, 12
Novidades na API do Java 7




                               Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Novidades na API do Java 7




                               Globalcode	
  –	
  Open4education
Saturday, May 19, 12
New I/O do Java 7
           JSR 203: Nova API para New I/O (“NIO.2”):
                 FileSystem, Path
                 FileSystems, Files, Paths;
                 FileStore;
                 BasicFileAttributes;

           Melhorias na infra-estrutura I/O:
                 Acesso assíncrono a sockets e arquivos;
                 API para socket endereçado a multicasting;
                 Suporte a multitarefa com sockets;


                                                       Globalcode	
  –	
  Open4education
Saturday, May 19, 12
NIO.2: API de I/O + eficaz
        Path home = Paths.get("/home/yaw");
        Path foto = home.resolve("foto.jpg");
        Path backup = home.resolve("foto_backup.jpg");

        //backup de um aquivo
        Files.copy(foto, backup);

        //move o arquivo para outro diretório
        Path destino = Paths.get("/home/yaw/backup");
        Files.move(backup, destino.resolve(backup.getFileName()));


        //lista e imprime o conteúdo do diretório
        DirectoryStream<Path> stream = Files.newDirectoryStream(home);
        for (Path p : stream) {
          System.out.println("t -" + p );
        }




                                                     Globalcode	
  –	
  Open4education
Saturday, May 19, 12
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
Saturday, May 19, 12
Outras melhorias
           Fork/Join framework (JSR 166)
           Melhorias 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;
                 Re-organização nas formas de locale;
           Melhorias na JVM:
                 Invoke Dynamic (JSR 292);
                 G1: Garbage First;
                                                    Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Atualizações recentes do Java 7

           JDK 7 update 4

           Kit do Java 7 disponível para Mac OS;

           Termino da fusão entre JRockit e HotSpot;




                                              Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Fechando o plano B: Java 8!




                               Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Fechando o plano B: Java 8!




                               Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Java 8 (JSR 338)
           Conclusão do Projeto Coin;
           Nova API para datas no Java;

           Type Annotations;
           Projeto Jigsaw: suporte a definição de módulos;
           Projeto Lambda: uma linguagem mais eficiente;




                                              Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Type Annotations (JSR 308)

           Utilizar anotações em outros trechos do código;

           Criar um mecanismo eficiente com regras e
           validação de tipos do Java baseado em
           anotações. A evolução da idéia implementada
           com @Override;




                                              Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Type Annotations Demo
      public void execute(@NonNull Object ref) {
        //algum processamento
      }

      ...

      execute(new Object()); //ok!
      execute(null); //ñ compila!

      @NonNull Object ref = getObject();

      List<@NonNull String> nomes = ...
      nomes.add(null); //ñ compila!


      class ValorNumerico<T extends @Nullable Number> { ...}

      ValorNumerico<@Nullable Integer> v1; //ok!
      ValorNumerico<@NonNull Integer> v2; //ñ compila!


                                                    Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Projeto Jigsaw
           Suporte a modularização da linguagem Java;
           Tornar o modelo de distribuição e execução do
           Java mais eficaz;
           Cada módulo:
             é formado por conjunto de classes e interfaces;
             pode determinar sua versão;
             mantém arquivos de configurações/recursos;
             indica dependência a outros módulos, se
             existir;

                                              Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Projeto Jigsaw Demo


      //Arquivo modules-info.java

      module yaw.projetos @ 1.2 {
        class yaw.projetos.Main; //entry-point (java -m ...)
        requires yaw.core @ 1.0; //dependência

          exports yaw.projetos;
          permits yaw.financeiro;
      }




                                                    Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Projeto Lambda (JSR 335)
           O Java mais poderoso em ambientes multi-core;
           Emprega ao Java um modelo de programação
           funcional;
           Definição de funções anônimas;
           Permite a referência a métodos;
           Interfaces com default methods;
           SAM são consideradas interfaces funcionais;
           Mudanças na bibliotecas do Java (Collection)
           para se adequar ao Lambda;

                                            Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Projeto Lambda Demo

      String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"};

      //lambda expressions
      Arrays.sort(nomes,
         (String s1, String s2) -> s1.compareToIgnoreCase(s2));

      //target typing
      Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
      Arrays.sort(nomes, c);

      //method reference
      Arrays.sort(nomes, String::compareToIgnoreCase);




                                                    Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Experimente:
        http://jdk8.java.net
        http://jdk8.java.net/lambda




                           Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Rumores sobre o Java 9
           VM auto ajustável (self tuning);
           Suporte a Big Data;
           Reificação dos tipos genéricos;
           Criar um protocolo de meta-objetos para
           comunicação com outras linguagens;
           Suporte a continuations;




                                             Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Rumores sobre o Java 9
           VM auto ajustável (self tuning);
           Suporte a Big Data;
           Reificação dos tipos genéricos;
           Criar um protocolo de meta-objetos para
           comunicação com outras linguagens;
           Suporte a continuations;




                                             Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Blog
       http://blog.globalcode.com.br/search/label/java

   Vídeos
       http://www.yaw.com.br/screencast/tag/JDK7/

    Minicurso
       http://www.globalcode.com.br/gratuitos/minicursos/
       minicurso-JDK7-modificacoes-na-linguagem

    Projeto com exemplos
        https://github.com/edermag/jdk7.minicurso/

                                     #open4education
                                             Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Links
       http://openjdk.java.net/
       http://openjdk.java.net/projects/jdk7/
       http://openjdk.java.net/projects/jdk8/
       http://openjdk.java.net/projects/jigsaw/doc/
       quickstart.html
       http://openjdk.java.net/projects/lambda/
       http://www.infoq.com/br/articles/java7coin
       http://www.infoq.com/br/news/2012/04/jdk-8-
       milestone-release-dates
       http://openjdk.java.net/jeps/104
       http://slideshare.net/edermag

                                            Globalcode	
  –	
  Open4education
Saturday, May 19, 12
Obrigado !

                       eder@yaw.com.br
                          @edermag




                                         Globalcode	
  –	
  Open4education
Saturday, May 19, 12

As modificações na Linguagem: Java 7 e Java 8

  • 1.
    2012 As modificações na linguagem: Java 7 e 8 Eder Magalhães @edermag www.yaw.com.br Globalcode  –  Open4education Saturday, May 19, 12
  • 2.
    Agenda Expectativa na evolução da Linguagem Java Dolphin: o Java 7 Mudanças na linguagem: Projeto Coin New IO no Java 7 (NIO.2) JDBC 4.1; Outras características do Java 7; Conclusão do plano B: Java 8; Type Annotations + Jigsaw + Lambda; Links Globalcode  –  Open4education Saturday, May 19, 12
  • 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 07/2011; Globalcode  –  Open4education Saturday, May 19, 12
  • 4.
    Durante esses 5anos 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 final de 2012; Globalcode  –  Open4education Saturday, May 19, 12
  • 5.
    Dolphin, o Java7 ! Globalcode  –  Open4education Saturday, May 19, 12
  • 6.
    Java 7 (JSR336) Melhorias: Linguagem; Virtual Machine; Class loader; I/O, Rede e Concorrência; JDBC; Swing; Web; Javadoc; Globalcode  –  Open4education Saturday, May 19, 12
  • 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 Saturday, May 19, 12
  • 8.
    Separador de dígitose literal binária // isso é esquisito... mas compila! int i = 1_234_567_890; Integer i1 = new Integer(12_34_56_78_90); 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, intRuim2 = 1234_; float outroRuim = 123_456.75_F; // literal binária: int x = 0b001; // o valor é 1 int y = 0b010; // o valor é 2 Globalcode  –  Open4education Saturday, May 19, 12
  • 9.
    String na condiçãodo switch public static void main(String[] args) { String msg = "oi"; switch(msg) { case "oi": System.out.println("Ola, bem vindo"); break; case "tchau": System.out.println("Tchau, ate mais"); break; default: System.out.println("mal educado..."); } } O compilador realiza a comparação pelo hashcode! Globalcode  –  Open4education Saturday, May 19, 12
  • 10.
    Tipos genéricos semoperador 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 Saturday, May 19, 12
  • 11.
    Tipos genéricos comoperador Diamond Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<>(); Integer aKey = 10; Set<Integer> aSet = new HashSet<>(); mapOfIntegers.put(aKey, aSet); Globalcode  –  Open4education Saturday, May 19, 12
  • 12.
    Tipos genéricos comoperador Diamond Map<Integer, Set<Integer>> mapOfIntegers = new HashMap<>(); Integer aKey = 10; Set<Integer> aSet; mapOfIntegers.put(aKey, aSet = new HashSet<>()); // a instrução a seguir não compila! mapOfIntegers.put(aKey, new HashSet<>()); Globalcode  –  Open4education Saturday, May 19, 12
  • 13.
    Simplificação na chamadade 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 Saturday, May 19, 12
  • 14.
    Simplificação na chamadade 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 Saturday, May 19, 12
  • 15.
    Gerenciamento automático derecursos 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 Saturday, May 19, 12
  • 16.
    Sem o gerenciamentoautomá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 Saturday, May 19, 12
  • 17.
    Sem o gerenciamentoautomá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 Saturday, May 19, 12
  • 18.
    Com o gerenciamentoautomático! public void lerArquivo() { try (FileReader reader = new FileReader("arquivo”)) { // faz o processamento do arquivo } catch (IOException e) { // trata a exceção } } Globalcode  –  Open4education Saturday, May 19, 12
  • 19.
    Gerenciamento automático derecursos 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 Saturday, May 19, 12
  • 20.
    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 Saturday, May 19, 12
  • 21.
    Sem o 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 Saturday, May 19, 12
  • 22.
    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 Saturday, May 19, 12
  • 23.
    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 Saturday, May 19, 12
  • 24.
    Rethrow específico 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 Saturday, May 19, 12
  • 25.
    Novidades na APIdo Java 7 Globalcode  –  Open4education Saturday, May 19, 12
  • 26.
    Novidades na APIdo Java 7 Globalcode  –  Open4education Saturday, May 19, 12
  • 27.
    New I/O doJava 7 JSR 203: Nova API para New I/O (“NIO.2”): FileSystem, Path FileSystems, Files, Paths; FileStore; BasicFileAttributes; Melhorias na infra-estrutura I/O: Acesso assíncrono a sockets e arquivos; API para socket endereçado a multicasting; Suporte a multitarefa com sockets; Globalcode  –  Open4education Saturday, May 19, 12
  • 28.
    NIO.2: API deI/O + eficaz Path home = Paths.get("/home/yaw"); Path foto = home.resolve("foto.jpg"); Path backup = home.resolve("foto_backup.jpg"); //backup de um aquivo Files.copy(foto, backup); //move o arquivo para outro diretório Path destino = Paths.get("/home/yaw/backup"); Files.move(backup, destino.resolve(backup.getFileName())); //lista e imprime o conteúdo do diretório DirectoryStream<Path> stream = Files.newDirectoryStream(home); for (Path p : stream) { System.out.println("t -" + p ); } Globalcode  –  Open4education Saturday, May 19, 12
  • 29.
    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 Saturday, May 19, 12
  • 30.
    Outras melhorias Fork/Join framework (JSR 166) Melhorias 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; Re-organização nas formas de locale; Melhorias na JVM: Invoke Dynamic (JSR 292); G1: Garbage First; Globalcode  –  Open4education Saturday, May 19, 12
  • 31.
    Atualizações recentes doJava 7 JDK 7 update 4 Kit do Java 7 disponível para Mac OS; Termino da fusão entre JRockit e HotSpot; Globalcode  –  Open4education Saturday, May 19, 12
  • 32.
    Fechando o planoB: Java 8! Globalcode  –  Open4education Saturday, May 19, 12
  • 33.
    Fechando o planoB: Java 8! Globalcode  –  Open4education Saturday, May 19, 12
  • 34.
    Java 8 (JSR338) Conclusão do Projeto Coin; Nova API para datas no Java; Type Annotations; Projeto Jigsaw: suporte a definição de módulos; Projeto Lambda: uma linguagem mais eficiente; Globalcode  –  Open4education Saturday, May 19, 12
  • 35.
    Type Annotations (JSR308) Utilizar anotações em outros trechos do código; Criar um mecanismo eficiente com regras e validação de tipos do Java baseado em anotações. A evolução da idéia implementada com @Override; Globalcode  –  Open4education Saturday, May 19, 12
  • 36.
    Type Annotations Demo public void execute(@NonNull Object ref) { //algum processamento } ... execute(new Object()); //ok! execute(null); //ñ compila! @NonNull Object ref = getObject(); List<@NonNull String> nomes = ... nomes.add(null); //ñ compila! class ValorNumerico<T extends @Nullable Number> { ...} ValorNumerico<@Nullable Integer> v1; //ok! ValorNumerico<@NonNull Integer> v2; //ñ compila! Globalcode  –  Open4education Saturday, May 19, 12
  • 37.
    Projeto Jigsaw Suporte a modularização da linguagem Java; Tornar o modelo de distribuição e execução do Java mais eficaz; Cada módulo: é formado por conjunto de classes e interfaces; pode determinar sua versão; mantém arquivos de configurações/recursos; indica dependência a outros módulos, se existir; Globalcode  –  Open4education Saturday, May 19, 12
  • 38.
    Projeto Jigsaw Demo //Arquivo modules-info.java module yaw.projetos @ 1.2 { class yaw.projetos.Main; //entry-point (java -m ...) requires yaw.core @ 1.0; //dependência exports yaw.projetos; permits yaw.financeiro; } Globalcode  –  Open4education Saturday, May 19, 12
  • 39.
    Projeto Lambda (JSR335) O Java mais poderoso em ambientes multi-core; Emprega ao Java um modelo de programação funcional; Definição de funções anônimas; Permite a referência a métodos; Interfaces com default methods; SAM são consideradas interfaces funcionais; Mudanças na bibliotecas do Java (Collection) para se adequar ao Lambda; Globalcode  –  Open4education Saturday, May 19, 12
  • 40.
    Projeto Lambda Demo String[] nomes = {"Pedro", "Carolina", "Ana", "Bruno"}; //lambda expressions Arrays.sort(nomes, (String s1, String s2) -> s1.compareToIgnoreCase(s2)); //target typing Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2); Arrays.sort(nomes, c); //method reference Arrays.sort(nomes, String::compareToIgnoreCase); Globalcode  –  Open4education Saturday, May 19, 12
  • 41.
    Experimente: http://jdk8.java.net http://jdk8.java.net/lambda Globalcode  –  Open4education Saturday, May 19, 12
  • 42.
    Rumores sobre oJava 9 VM auto ajustável (self tuning); Suporte a Big Data; Reificação dos tipos genéricos; Criar um protocolo de meta-objetos para comunicação com outras linguagens; Suporte a continuations; Globalcode  –  Open4education Saturday, May 19, 12
  • 43.
    Rumores sobre oJava 9 VM auto ajustável (self tuning); Suporte a Big Data; Reificação dos tipos genéricos; Criar um protocolo de meta-objetos para comunicação com outras linguagens; Suporte a continuations; Globalcode  –  Open4education Saturday, May 19, 12
  • 44.
    Blog http://blog.globalcode.com.br/search/label/java Vídeos http://www.yaw.com.br/screencast/tag/JDK7/ Minicurso http://www.globalcode.com.br/gratuitos/minicursos/ minicurso-JDK7-modificacoes-na-linguagem Projeto com exemplos https://github.com/edermag/jdk7.minicurso/ #open4education Globalcode  –  Open4education Saturday, May 19, 12
  • 45.
    Links http://openjdk.java.net/ http://openjdk.java.net/projects/jdk7/ http://openjdk.java.net/projects/jdk8/ http://openjdk.java.net/projects/jigsaw/doc/ quickstart.html http://openjdk.java.net/projects/lambda/ http://www.infoq.com/br/articles/java7coin http://www.infoq.com/br/news/2012/04/jdk-8- milestone-release-dates http://openjdk.java.net/jeps/104 http://slideshare.net/edermag Globalcode  –  Open4education Saturday, May 19, 12
  • 46.
    Obrigado ! eder@yaw.com.br @edermag Globalcode  –  Open4education Saturday, May 19, 12