SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPAndrew Rota
 
Hibernate ORM over JDBC
Hibernate ORM over JDBCHibernate ORM over JDBC
Hibernate ORM over JDBCPratyush Katre
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesomeAndrew Hull
 
Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022Sam Brannen
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKJosé Paumard
 
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewaySpring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewayIván López Martín
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções javaAntonio Oliveira
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentationguest11106b
 
Drupal 8 Desacoplar la lógica de negocio del framework
Drupal 8 Desacoplar la lógica de negocio del frameworkDrupal 8 Desacoplar la lógica de negocio del framework
Drupal 8 Desacoplar la lógica de negocio del frameworkManuel López Torrent
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Designing Puppet: Roles/Profiles Pattern
Designing Puppet: Roles/Profiles PatternDesigning Puppet: Roles/Profiles Pattern
Designing Puppet: Roles/Profiles PatternPuppet
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具Shengyou Fan
 
Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Robert Stern
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8Helder da Rocha
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Helder da Rocha
 

Was ist angesagt? (20)

Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHP
 
Hibernate ORM over JDBC
Hibernate ORM over JDBCHibernate ORM over JDBC
Hibernate ORM over JDBC
 
React JS and why it's awesome
React JS and why it's awesomeReact JS and why it's awesome
React JS and why it's awesome
 
Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022Testing with JUnit 5 and Spring - Spring I/O 2022
Testing with JUnit 5 and Spring - Spring I/O 2022
 
Nouveautés Java 9-10-11
Nouveautés Java 9-10-11Nouveautés Java 9-10-11
Nouveautés Java 9-10-11
 
Deep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UKDeep Dive Java 17 Devoxx UK
Deep Dive Java 17 Devoxx UK
 
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud GatewaySpring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
Spring IO 2023 - Dynamic OpenAPIs with Spring Cloud Gateway
 
Java 9 Features
Java 9 FeaturesJava 9 Features
Java 9 Features
 
Tratamento de exceções java
Tratamento de exceções   javaTratamento de exceções   java
Tratamento de exceções java
 
Meta Programming in Groovy
Meta Programming in GroovyMeta Programming in Groovy
Meta Programming in Groovy
 
Hibernate Presentation
Hibernate  PresentationHibernate  Presentation
Hibernate Presentation
 
Drupal 8 Desacoplar la lógica de negocio del framework
Drupal 8 Desacoplar la lógica de negocio del frameworkDrupal 8 Desacoplar la lógica de negocio del framework
Drupal 8 Desacoplar la lógica de negocio del framework
 
POO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em JavaPOO - 22 - Tratamento de Exceções em Java
POO - 22 - Tratamento de Exceções em Java
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Designing Puppet: Roles/Profiles Pattern
Designing Puppet: Roles/Profiles PatternDesigning Puppet: Roles/Profiles Pattern
Designing Puppet: Roles/Profiles Pattern
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
 
Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1Golang basics for Java developers - Part 1
Golang basics for Java developers - Part 1
 
API de segurança do Java EE 8
API de segurança do Java EE 8API de segurança do Java EE 8
API de segurança do Java EE 8
 
POO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em JavaPOO - 03 - Alocação de Memória em Java
POO - 03 - Alocação de Memória em Java
 
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
Curso de Enterprise JavaBeans (EJB) (JavaEE 7)
 

Andere mochten auch

Andere mochten auch (11)

APLICAÇÃO JAVA DE CADASTRO DE NOTA FISCAL USANDO BANCO MYSQL
APLICAÇÃO JAVA DE CADASTRO DE NOTA FISCAL USANDO BANCO MYSQLAPLICAÇÃO JAVA DE CADASTRO DE NOTA FISCAL USANDO BANCO MYSQL
APLICAÇÃO JAVA DE CADASTRO DE NOTA FISCAL USANDO BANCO MYSQL
 
Apresentação TCC - Sistemas de Informação
Apresentação TCC - Sistemas de Informação Apresentação TCC - Sistemas de Informação
Apresentação TCC - Sistemas de Informação
 
Java 7 & 8 - A&BP CC
Java 7 & 8 - A&BP CCJava 7 & 8 - A&BP CC
Java 7 & 8 - A&BP CC
 
CV Sutthiphorn Manowong
CV Sutthiphorn ManowongCV Sutthiphorn Manowong
CV Sutthiphorn Manowong
 
Java7 tdc2011
Java7 tdc2011Java7 tdc2011
Java7 tdc2011
 
Curso pvt 1_gas_uerj
Curso pvt 1_gas_uerjCurso pvt 1_gas_uerj
Curso pvt 1_gas_uerj
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Física de gases
Física de gasesFísica de gases
Física de gases
 
Refactoring to Java 8 (Devoxx BE)
Refactoring to Java 8 (Devoxx BE)Refactoring to Java 8 (Devoxx BE)
Refactoring to Java 8 (Devoxx BE)
 
Estudo dos gases slides
Estudo dos gases   slidesEstudo dos gases   slides
Estudo dos gases slides
 
Lei geral dos gases
Lei geral dos gasesLei geral dos gases
Lei geral dos gases
 

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

JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesEder Magalhães
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooEder Magalhães
 
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
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5Diego Pacheco
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?tdc-globalcode
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka? pichiliani
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemPetronio Candido
 
Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Rodrigo Vieira
 
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
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Giovanni Bassi
 
Excecoes
ExcecoesExcecoes
ExcecoesEMSNEWS
 

Ähnlich wie As modificações na Linguagem: Java 7 e Java 8 (20)

JDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidadesJDK8: Lambda, Jigsaw e novidades
JDK8: Lambda, Jigsaw e novidades
 
Desenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring RooDesenvolvimento Produtivo com Spring Roo
Desenvolvimento Produtivo com Spring Roo
 
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
 
Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
Spring framework 2.5
Spring framework 2.5Spring framework 2.5
Spring framework 2.5
 
TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?TDC2016SP - Python x R: mas e o Weka?
TDC2016SP - Python x R: mas e o Weka?
 
Python x R: mas e o Weka?
Python x R: mas e o Weka? Python x R: mas e o Weka?
Python x R: mas e o Weka?
 
Java 8 - A Evolução da Linguagem
Java 8 - A Evolução da LinguagemJava 8 - A Evolução da Linguagem
Java 8 - A Evolução da Linguagem
 
Groovy & grails
Groovy & grailsGroovy & grails
Groovy & grails
 
Groovy & Grails
Groovy & GrailsGroovy & Grails
Groovy & Grails
 
Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)Javascript não é Java+Script (TDC Floripa 2012)
Javascript não é Java+Script (TDC Floripa 2012)
 
Introdução a Plataforma Java EE
Introdução a Plataforma Java EEIntrodução a Plataforma Java EE
Introdução a Plataforma Java EE
 
Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6
 
Excecoes
ExcecoesExcecoes
Excecoes
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Java hidden features
Java hidden featuresJava hidden features
Java hidden features
 
Solid
SolidSolid
Solid
 

Mehr von 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
 
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
 
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
 

Mehr von 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
 
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
 
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 Spring ROO
Introducao Spring ROOIntroducao Spring ROO
Introducao Spring ROO
 
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
 
Android SestInfo 2010
Android SestInfo 2010Android SestInfo 2010
Android SestInfo 2010
 

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 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
  • 5. Dolphin, o Java 7 ! Globalcode  –  Open4education Saturday, May 19, 12
  • 6. 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
  • 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í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
  • 9. 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
  • 10. 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
  • 11. 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
  • 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 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 API do Java 7 Globalcode  –  Open4education Saturday, May 19, 12
  • 26. Novidades na API do Java 7 Globalcode  –  Open4education Saturday, May 19, 12
  • 27. 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
  • 28. 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
  • 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 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
  • 32. Fechando o plano B: Java 8! Globalcode  –  Open4education Saturday, May 19, 12
  • 33. Fechando o plano B: Java 8! Globalcode  –  Open4education Saturday, May 19, 12
  • 34. 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
  • 35. 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
  • 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 (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
  • 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 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
  • 43. 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
  • 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