SlideShare uma empresa Scribd logo
1 de 46
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseFelice Pescatore
 
Java Serialization
Java SerializationJava Serialization
Java Serializationimypraz
 
Collections - Maps
Collections - Maps Collections - Maps
Collections - Maps Hitesh-Java
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautesAbdenour Bouateli
 
Polymorphism in java
Polymorphism in java Polymorphism in java
Polymorphism in java Janu Jahnavi
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)Armando Daniel
 
Entenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpaEntenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpaMoisesInacio
 
Introduction to VueJS & Vuex
Introduction to VueJS & VuexIntroduction to VueJS & Vuex
Introduction to VueJS & VuexBernd Alter
 
Java 8 presentation
Java 8 presentationJava 8 presentation
Java 8 presentationVan Huong
 
java 8 new features
java 8 new features java 8 new features
java 8 new features Rohit Verma
 

Mais procurados (20)

Spring data jpa
Spring data jpaSpring data jpa
Spring data jpa
 
Generics
GenericsGenerics
Generics
 
Object Oriented with Java Programmazione Base
Object Oriented with Java Programmazione BaseObject Oriented with Java Programmazione Base
Object Oriented with Java Programmazione Base
 
Asp.net web api
Asp.net web apiAsp.net web api
Asp.net web api
 
Java Serialization
Java SerializationJava Serialization
Java Serialization
 
Collections - Maps
Collections - Maps Collections - Maps
Collections - Maps
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?Java 11 to 17 : What's new !?
Java 11 to 17 : What's new !?
 
Java version 11 - les 9 nouveautes
Java version 11 -  les 9 nouveautesJava version 11 -  les 9 nouveautes
Java version 11 - les 9 nouveautes
 
Polymorphism in java
Polymorphism in java Polymorphism in java
Polymorphism in java
 
Java orientação a objetos (associacao, composicao, agregacao)
Java   orientação a objetos (associacao, composicao, agregacao)Java   orientação a objetos (associacao, composicao, agregacao)
Java orientação a objetos (associacao, composicao, agregacao)
 
Java 8 Lambda and Streams
Java 8 Lambda and StreamsJava 8 Lambda and Streams
Java 8 Lambda and Streams
 
Entenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpaEntenda o ciclo de vida das entidades jpa
Entenda o ciclo de vida das entidades jpa
 
Spring ppt
Spring pptSpring ppt
Spring ppt
 
Java8 features
Java8 featuresJava8 features
Java8 features
 
Introduction to spring boot
Introduction to spring bootIntroduction to spring boot
Introduction to spring boot
 
Introduction to VueJS & Vuex
Introduction to VueJS & VuexIntroduction to VueJS & Vuex
Introduction to VueJS & Vuex
 
Java 8 presentation
Java 8 presentationJava 8 presentation
Java 8 presentation
 
java 8 new features
java 8 new features java 8 new features
java 8 new features
 

Destaque

Destaque (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
 

Semelhante a 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
 
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
 
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
 
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
 

Semelhante a 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
 
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?
 
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?
 
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
 

Mais 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
 
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
 

Mais 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
 
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