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

Mais procurados (20)

Collections in Java Notes
Collections in Java NotesCollections in Java Notes
Collections in Java Notes
 
JAVA NIO
JAVA NIOJAVA NIO
JAVA NIO
 
Python Programming Essentials - M27 - Logging module
Python Programming Essentials - M27 - Logging modulePython Programming Essentials - M27 - Logging module
Python Programming Essentials - M27 - Logging module
 
Java SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introductionJava SE 9 modules (JPMS) - an introduction
Java SE 9 modules (JPMS) - an introduction
 
Java Collections Framework
Java Collections FrameworkJava Collections Framework
Java Collections Framework
 
OrientDB document or graph? Select the right model (old presentation)
OrientDB document or graph? Select the right model (old presentation)OrientDB document or graph? Select the right model (old presentation)
OrientDB document or graph? Select the right model (old presentation)
 
Java 17
Java 17Java 17
Java 17
 
Introduction to JSON & AJAX
Introduction to JSON & AJAXIntroduction to JSON & AJAX
Introduction to JSON & AJAX
 
Basic i/o & file handling in java
Basic i/o & file handling in javaBasic i/o & file handling in java
Basic i/o & file handling in java
 
JavaScript Inheritance
JavaScript InheritanceJavaScript Inheritance
JavaScript Inheritance
 
OrientDB introduction - NoSQL
OrientDB introduction - NoSQLOrientDB introduction - NoSQL
OrientDB introduction - NoSQL
 
Drools rule Concepts
Drools rule ConceptsDrools rule Concepts
Drools rule Concepts
 
Exception Handling
Exception HandlingException Handling
Exception Handling
 
From Java 11 to 17 and beyond.pdf
From Java 11 to 17 and beyond.pdfFrom Java 11 to 17 and beyond.pdf
From Java 11 to 17 and beyond.pdf
 
Introduce yourself to java 17
Introduce yourself to java 17Introduce yourself to java 17
Introduce yourself to java 17
 
OCA Java SE 8 Exam Chapter 6 Exceptions
OCA Java SE 8 Exam Chapter 6 ExceptionsOCA Java SE 8 Exam Chapter 6 Exceptions
OCA Java SE 8 Exam Chapter 6 Exceptions
 
Generics
GenericsGenerics
Generics
 
Introduction to Java 8
Introduction to Java 8Introduction to Java 8
Introduction to Java 8
 
Java Quiz Questions
Java Quiz QuestionsJava Quiz Questions
Java Quiz Questions
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 

Destaque

Java 7 & 8 - A&BP CC
Java 7 & 8 - A&BP CCJava 7 & 8 - A&BP CC
Java 7 & 8 - A&BP CC
JWORKS powered by Ordina
 
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
Maurício Linhares
 
Estudo dos gases slides
Estudo dos gases   slidesEstudo dos gases   slides
Estudo dos gases slides
Micaela Neiva
 

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

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
Stephen Chin
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6
Giovanni Bassi
 
Excecoes
ExcecoesExcecoes
Excecoes
EMSNEWS
 

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

Richfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais ricoRichfaces 4 - Desenvolvimento JSF mais rico
Richfaces 4 - Desenvolvimento JSF mais rico
Eder Magalhães
 
JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010JSF2 ScrumToys SestInfo 2010
JSF2 ScrumToys SestInfo 2010
Eder 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
 

Último

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Dirceu Resende
 

Último (11)

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Apostila e caderno de exercicios de WORD
Apostila e caderno de exercicios de  WORDApostila e caderno de exercicios de  WORD
Apostila e caderno de exercicios de WORD
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINASCOI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
COI CENTRO DE OPERAÇÕES INDUSTRIAIS NAS USINAS
 
Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docxATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
ATIVIDADE 1 - CÁLCULO DIFERENCIAL E INTEGRAL II - 52_2024.docx
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docxATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
ATIVIDADE 1 - GESTÃO DE PESSOAS E DESENVOLVIMENTO DE EQUIPES - 52_2024.docx
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

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