SlideShare uma empresa Scribd logo
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 (20)

PDF
Android's HIDL: Treble in the HAL
Opersys inc.
 
PPT
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
Nanik Tolaram
 
PDF
Build beautiful native apps in record time with flutter
RobertLe30
 
PPTX
Linguagem de programação Java 6, 7 e 8
Rogério Moraes de Carvalho
 
PPT
Java script
Oğuzhan TAŞ Akademi
 
PDF
JUnit & Mockito, first steps
Renato Primavera
 
PDF
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
 
PDF
Java Strings Tutorial | String Manipulation in Java | Java Tutorial For Begin...
Edureka!
 
PDF
Multimedia on android
Ramesh Prasad
 
PDF
[22]Efficient and Testable MVVM pattern
NAVER Engineering
 
PPTX
INTRODUCTION TO FLUTTER BASICS.pptx
20TUCS033DHAMODHARAK
 
PDF
Build responsive applications with google flutter
Ahmed Abu Eldahab
 
PDF
Javascript Design Patterns
Subramanyan Murali
 
ODP
Object Oriented Javascript
NexThoughts Technologies
 
PDF
Asynchronous JavaScript Programming
Haim Michael
 
PPT
Core java concepts
Ram132
 
PPTX
Module design pattern i.e. express js
Ahmed Assaf
 
PPTX
NET Systems Programming Learned the Hard Way.pptx
petabridge
 
ODP
Java 9/10/11 - What's new and why you should upgrade
Simone Bordet
 
PDF
Spring Data JPA from 0-100 in 60 minutes
VMware Tanzu
 
Android's HIDL: Treble in the HAL
Opersys inc.
 
"Learning AOSP" - Android Hardware Abstraction Layer (HAL)
Nanik Tolaram
 
Build beautiful native apps in record time with flutter
RobertLe30
 
Linguagem de programação Java 6, 7 e 8
Rogério Moraes de Carvalho
 
JUnit & Mockito, first steps
Renato Primavera
 
Introduction to Coroutines @ KotlinConf 2017
Roman Elizarov
 
Java Strings Tutorial | String Manipulation in Java | Java Tutorial For Begin...
Edureka!
 
Multimedia on android
Ramesh Prasad
 
[22]Efficient and Testable MVVM pattern
NAVER Engineering
 
INTRODUCTION TO FLUTTER BASICS.pptx
20TUCS033DHAMODHARAK
 
Build responsive applications with google flutter
Ahmed Abu Eldahab
 
Javascript Design Patterns
Subramanyan Murali
 
Object Oriented Javascript
NexThoughts Technologies
 
Asynchronous JavaScript Programming
Haim Michael
 
Core java concepts
Ram132
 
Module design pattern i.e. express js
Ahmed Assaf
 
NET Systems Programming Learned the Hard Way.pptx
petabridge
 
Java 9/10/11 - What's new and why you should upgrade
Simone Bordet
 
Spring Data JPA from 0-100 in 60 minutes
VMware Tanzu
 

Destaque (11)

PPTX
APLICAÇÃO JAVA DE CADASTRO DE NOTA FISCAL USANDO BANCO MYSQL
ETEC Monsenhor Antonio Magliano
 
ODP
Apresentação TCC - Sistemas de Informação
Fernando Almeida
 
PPTX
Java 7 & 8 - A&BP CC
JWORKS powered by Ordina
 
PDF
CV Sutthiphorn Manowong
Sutthiphorn Manowong
 
PDF
Java7 tdc2011
Eder Magalhães
 
PDF
Curso pvt 1_gas_uerj
Tatiane Siqueira
 
PDF
Curso java 03 - métodos e parâmetros
Maurício Linhares
 
PPTX
Física de gases
Andrea Valencia
 
PDF
Refactoring to Java 8 (Devoxx BE)
Trisha Gee
 
PPTX
Estudo dos gases slides
Micaela Neiva
 
PPSX
Lei geral dos gases
Jamilly Andrade
 
APLICAÇÃO JAVA DE CADASTRO DE NOTA FISCAL USANDO BANCO MYSQL
ETEC Monsenhor Antonio Magliano
 
Apresentação TCC - Sistemas de Informação
Fernando Almeida
 
Java 7 & 8 - A&BP CC
JWORKS powered by Ordina
 
CV Sutthiphorn Manowong
Sutthiphorn Manowong
 
Java7 tdc2011
Eder Magalhães
 
Curso pvt 1_gas_uerj
Tatiane Siqueira
 
Curso java 03 - métodos e parâmetros
Maurício Linhares
 
Física de gases
Andrea Valencia
 
Refactoring to Java 8 (Devoxx BE)
Trisha Gee
 
Estudo dos gases slides
Micaela Neiva
 
Lei geral dos gases
Jamilly Andrade
 
Anúncio

Semelhante a As modificações na Linguagem: Java 7 e Java 8 (20)

PDF
JDK8: Lambda, Jigsaw e novidades
Eder Magalhães
 
PDF
Desenvolvimento Produtivo com Spring Roo
Eder Magalhães
 
PPT
55 New Things in Java 7 - Brazil
Stephen Chin
 
PDF
Groovy na plataforma Java
João Lourenço
 
PDF
Doctrine2 Seminário PHP
Guilherme Blanco
 
PDF
Spring framework 2.5
Diego Pacheco
 
PPT
TDC2016SP - Python x R: mas e o Weka?
tdc-globalcode
 
PPT
Python x R: mas e o Weka?
pichiliani
 
PDF
Java 8 - A Evolução da Linguagem
Petronio Candido
 
PDF
Groovy & Grails
InformantTalks
 
PDF
Groovy & grails
Arian Pasquali
 
PPT
Javascript não é Java+Script (TDC Floripa 2012)
Rodrigo Vieira
 
PDF
Introdução a Plataforma Java EE
Eder Magalhães
 
PDF
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
PPTX
Apresentando o EcmaScript 6
Giovanni Bassi
 
PPT
Excecoes
EMSNEWS
 
PDF
Minicurso groovy grails
Victor Hugo Germano
 
ODP
Paradigma Orientado a Objeto
Tony Alexander Hild
 
PPTX
Java hidden features
Josenaldo de Oliveira Matos Filho
 
PPTX
Solid
Jorge Oleques
 
JDK8: Lambda, Jigsaw e novidades
Eder Magalhães
 
Desenvolvimento Produtivo com Spring Roo
Eder Magalhães
 
55 New Things in Java 7 - Brazil
Stephen Chin
 
Groovy na plataforma Java
João Lourenço
 
Doctrine2 Seminário PHP
Guilherme Blanco
 
Spring framework 2.5
Diego Pacheco
 
TDC2016SP - Python x R: mas e o Weka?
tdc-globalcode
 
Python x R: mas e o Weka?
pichiliani
 
Java 8 - A Evolução da Linguagem
Petronio Candido
 
Groovy & Grails
InformantTalks
 
Groovy & grails
Arian Pasquali
 
Javascript não é Java+Script (TDC Floripa 2012)
Rodrigo Vieira
 
Introdução a Plataforma Java EE
Eder Magalhães
 
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
Apresentando o EcmaScript 6
Giovanni Bassi
 
Excecoes
EMSNEWS
 
Minicurso groovy grails
Victor Hugo Germano
 
Paradigma Orientado a Objeto
Tony Alexander Hild
 
Java hidden features
Josenaldo de Oliveira Matos Filho
 
Anúncio

Mais de Eder Magalhães (20)

PDF
Cvc programacao reativa
Eder Magalhães
 
PDF
Concorrencia, baixa Latência e alta disponibilidade
Eder Magalhães
 
PDF
Java Is Back, Novidade do Java 8
Eder Magalhães
 
PDF
Desenvolva uma app Java web em poucos passos, com o Forge
Eder Magalhães
 
PDF
MongoDB outras alternativas de persistência
Eder Magalhães
 
PDF
Java e uma visão sobre PaaS
Eder Magalhães
 
PDF
JavaEE 7, na era do cloud computing
Eder Magalhães
 
PDF
Futuro da linguagem e plataforma: Java 7 e 8
Eder Magalhães
 
PDF
Arquiteturas Java EE no Google App Engine
Eder Magalhães
 
PDF
Richfaces 4 - Desenvolvimento JSF mais rico
Eder Magalhães
 
PDF
JSF 2 Components JustJava2011
Eder Magalhães
 
PDF
Introducao Spring ROO
Eder Magalhães
 
PDF
Introducao Google GO
Eder Magalhães
 
PDF
Introducao ao Spring Web MVC
Eder Magalhães
 
PDF
JavaFX: Abordagem Prática
Eder Magalhães
 
PDF
Desenvolvimento RIA com GWT e Spring
Eder Magalhães
 
PDF
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
Eder Magalhães
 
PDF
Profissao java gwt e javafx
Eder Magalhães
 
PPTX
JSF2 ScrumToys SestInfo 2010
Eder Magalhães
 
PPTX
Android SestInfo 2010
Eder Magalhães
 
Cvc programacao reativa
Eder Magalhães
 
Concorrencia, baixa Latência e alta disponibilidade
Eder Magalhães
 
Java Is Back, Novidade do Java 8
Eder Magalhães
 
Desenvolva uma app Java web em poucos passos, com o Forge
Eder Magalhães
 
MongoDB outras alternativas de persistência
Eder Magalhães
 
Java e uma visão sobre PaaS
Eder Magalhães
 
JavaEE 7, na era do cloud computing
Eder Magalhães
 
Futuro da linguagem e plataforma: Java 7 e 8
Eder Magalhães
 
Arquiteturas Java EE no Google App Engine
Eder Magalhães
 
Richfaces 4 - Desenvolvimento JSF mais rico
Eder Magalhães
 
JSF 2 Components JustJava2011
Eder Magalhães
 
Introducao Spring ROO
Eder Magalhães
 
Introducao Google GO
Eder Magalhães
 
Introducao ao Spring Web MVC
Eder Magalhães
 
JavaFX: Abordagem Prática
Eder Magalhães
 
Desenvolvimento RIA com GWT e Spring
Eder Magalhães
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
Eder Magalhães
 
Profissao java gwt e javafx
Eder Magalhães
 
JSF2 ScrumToys SestInfo 2010
Eder Magalhães
 
Android SestInfo 2010
Eder Magalhães
 

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 ! [email protected] @edermag Globalcode  –  Open4education Saturday, May 19, 12