SlideShare uma empresa Scribd logo
1 de 38
Baixar para ler offline
Project Coin: Pequenas
                    mudanças, grandes
                        facilidades
                                   Marcelo de Castro
                               Wellington Ricardo Pinheiro




domingo, 31 de março de 2013
Melhorias na Linguagem Java
                    •      Máquina Virtual
                    •      Linguagem (sintaxe e semântica)
                    •      Class Loader
                    •      Internacionalização
                    •      I/O e Rede
                    •      Segurança e Criptografia
                    •      JDBC
                    •      Camada Cliente
                    •      Gerenciamento (JMX e MBeans)



domingo, 31 de março de 2013
Melhorias na Linguagem Java
                    •      Máquina Virtual
                    •      Linguagem (sintaxe e semântica)
                    •      Class Loader
                    •      Internacionalização
                    •      I/O e Rede
                    •      Segurança e Criptografia
                    •      JDBC
                    •      Camada Cliente
                    •      Gerenciamento (JMX e MBeans)



domingo, 31 de março de 2013
Melhorias na Linguagem Java
                    (sintaxe e semântica)

                    • JSR 334: Small Enhancements to the JavaTM
                           Programming Language
                    • Especificação do projeto Coin (subprojeto
                           do OpenJDK)
                    • O objetivo do projeto é prover melhorias
                           para a linguagem Java


domingo, 31 de março de 2013
Separador de dígitos em
                             literais numéricos
                public class SeparadorDigitos {
                  public static void main(String[] args) {
                    int i = 1_234_567_890;

                         // isso é medonho...mas compila!
                         Integer i1 = new Integer(12_34_56_78_90);
                         Integer i2 = new Integer(1_2_3_4_5_6_7_8_9_0);

                         System.out.println(i == i1);       // imprime true
                         System.out.println(i1.equals(i2)); // imprime true
                    }
                }




domingo, 31 de março de 2013
Separador de dígitos em
                             literais numéricos
                Também é possível fazer isso:

                float f1 = 123_456.7_5F;
                double d1 = 12____345D;
                double d2 = 0x1.ffff_ffff_ffff_fP1_023;




domingo, 31 de março de 2013
Separador de dígitos em
                             literais numéricos
                Também é possível fazer isso:

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




domingo, 31 de março de 2013
Literais binários
                Tarefa: Construir um método para imprimir os estados de uma
                válvula, que podem ser:

                                         001        Alarme

                                         010       Fechada

                                         100        Aberta

                o método recebe como entrada um inteiro com obtido na última
                leitura e deverão ser verificados quais os bits de estado estão com
                o valor 1.


domingo, 31 de março de 2013
Literais binários
       1      public static final int ALARME = 0b001; // o valor é 1
       2      public static final int FECHADA = 0b010; // o valor é 2
       3      public static final int ABERTA = 0b100; // o valor é 4

       4      public void mostraEstado(int ultimaLeitura) {
       5        final int[] mascaras = {ALARME, FECHADA, ABERTA};
       6        final String[] mensagens = {"alarme", "fechada", "aberta"};

      7            for (int i = 0; i < mascaras.length; i++) {
      8              if ((ultimaLeitura & mascaras[i]) == mascaras[i])
      9                System.out.print(mensagens[i] + " ");
     10            }
     11            System.out.println();
     12       }




domingo, 31 de março de 2013
String na condição do switch

                    • Os compiladores são responsáveis por
                           traduzir um switch de strings em bytecode
                           com a semântica adequada
                    • Suporte direto a strings no switch pode ser
                           adicionado em uma futura versão da
                           plataforma



domingo, 31 de março de 2013
String na condição do switch
      1       public static void main(String[] args) {
      2         for (String arg : args) {
      3            switch(arg) {
      4               case "-o1":
      5                 System.out.println("modo de alta otimização (+lento)");
      6                 break;
      7               case "-o0":
      8                 System.out.println("modo de baixa otimização (+rápido)");
      9                 break;
     10               default:
     11                 System.err.printf("Parâmetro %s inválido. n", param);
     12                 System.exit(-1);
     13             }
     14          }
     15       }




domingo, 31 de março de 2013
Inferência na criação de
                 objetos com tipos genéricos
                    •      Desde a introdução dos tipos genéricos,
                           construções com tipos genéricos explícitos podem
                           ser atribuídos à variáveis raw type (sem generics)
                           ou com um wildcard:

                      // Java 5+
                      // desencorajado, mas legal
                      List    rawList = new ArrayList<Object>();
                      List<?> wildList = new ArrayList<Object>();

                      // consequentemente, no Java 7:
                      List    rawList = new ArrayList<>();
                      List<?> wildList = new ArrayList<>();



domingo, 31 de março de 2013
Inferência na criação de
                 objetos com tipos genéricos

                      1 public class InferenciaCriacao {
                      2   public static void main(String[] args) {

                      3        Map<Integer, Set<Integer>> mapOfIntegers =
                      4          new HashMap<Integer, Set<Integer>>();
                      5        Integer aKey = 10;

                      6     Set<Integer> aSet = new HashSet<Integer>();
                      7     mapOfIntegers.put(aKey, aSet);
                      8   }
                      9 }




domingo, 31 de março de 2013
Inferência na criação de
                 objetos com tipos genéricos

                      1 public class InferenciaCriacao {
                      2   public static void main(String[] args) {

                      3        Map<Integer, Set<Integer>> mapOfIntegers =
                      4          new HashMap<>();
                      5        Integer aKey = 10;

                      6     Set<Integer> aSet = new HashSet<>();
                      7     mapOfIntegers.put(aKey, aSet);
                      8   }
                      9 }




domingo, 31 de março de 2013
Inferência na criação de
                 objetos com tipos genéricos

                      1 public class InferenciaCriacao {
                      2   public static void main(String[] args) {

                      3        Map<Integer, Set<Integer>> mapOfIntegers =
                      4          new HashMap<>();
                      5        Integer aKey = 10;

                      6     Set<Integer> aSet = new HashSet<>();
                      7     mapOfIntegers.put(aKey, aSet);
                      8   }
                      9 }




domingo, 31 de março de 2013
Inferência na criação de
                 objetos com tipos genéricos

                      1 public class InferenciaCriacao {
                      2   public static void main(String[] args) {

                      3        Map<Integer, Set<Integer>> mapOfIntegers =
                      4          new HashMap<>();
                      5        Integer aKey = 10;

                      6     Set<Integer> aSet;
                      7     mapOfIntegers.put(aKey, aSet = new HashSet<>());
                      8   }
                      9 }




domingo, 31 de março de 2013
Simplificação na invocação
                         de métodos varargs
               public class TesteVarargs {
                 public static void main(String[] args) {
                    Set<Integer> aSet = new HashSet<Integer>();
                    List<Set<Integer>> listOfSets = Arrays.asList(aSet);
                  }
               }




domingo, 31 de março de 2013
Simplificação na invocação
                         de métodos varargs
               public class TesteVarargs {
                 public static void main(String[] args) {
                    Set<Integer> aSet = new HashSet<Integer>();
                    List<Set<Integer>> listOfSets = Arrays.asList(aSet);
                  }
               }

                        O seguinte warning é apresentado ao compilarmos a classe:

            creation of type java.util.Set<java.lang.Integer>[] for varargs parameter
               List<Set<Integer>> listOfSets = Arrays.asList(aSet);




domingo, 31 de março de 2013
Simplificação na invocação
                         de métodos varargs
               public class TesteVarargs {
                 public static void main(String[] args) {
                    Set<Integer> aSet = new HashSet<Integer>();
                    List<Set<Integer>> listOfSets = Arrays.asList(aSet);
                  }
               }

                               Compilando o programa com a opção -XD-printflat

              public class TesteVarargs {
                  public static void main(String[] args) {
                      Set aSet = new HashSet();
                      List listOfSets = Arrays.asList(new Set[]{aSet});
                  }
              }


domingo, 31 de março de 2013
Simplificação na invocação
                         de métodos varargs
               Método asList da classe Arrays

               public static <T> List<T> asList(T... a) {
                   return new ArrayList<>(a);
               }

               Mas esse warning é gerado na chamada de qualquer
               método com assinatura do tipo:
               <T> Tipo<T> metodo(T... params)




domingo, 31 de março de 2013
Simplificação na invocação
                         de métodos varargs
               A solução para o problema é criar uma forma de
               informar ao compilador que a chamada ao método
               asList não corre o risco de dar problemas




domingo, 31 de março de 2013
Simplificação na invocação
                         de métodos varargs
               A solução para o problema é criar uma forma de
               informar ao compilador que a chamada ao método
               asList não corre o risco de dar problemas

                                   @SafeVarargs

              @SafeVarargs
              public static <T> List<T> asList(T... a) {
                  return new ArrayList<>(a);
              }




domingo, 31 de março de 2013
Simplificação na invocação
                         de métodos varargs
                    • Os métodos e construtores da plataforma
                           anotados com @SafeVarargs são:

              public static <T> List<T> java.util.Arrays.asList(T... a)

              public static <T> boolean java.util.Collections.addAll(
                Collection<? super T>, c, T ... elements)

              public static <E extends Enum<E>> java.util.EnumSet<E>
                EnumSet.of(E first, E .... rest)

              protected final void javax.swing.SwingWorker.publish(
                V ... chunks)



domingo, 31 de março de 2013
Gerenciamento automático
                          de recursos
                    • Criação da nova interface
                           java.lang.AutoCloseable
                    • Bibliotecas adaptadas para implementar a
                           nova interface
                    • java.lang.Throwable, um novo construtor e
                           dois novos métodos, para facilitar o
                           gerenciamento de exceções suprimidas


domingo, 31 de março de 2013
Gerenciamento automático
                          de recursos
               1 public void lerArquivo() {
               2   FileReader reader = null;
               3   try {
               4     reader = new FileReader("arquivo");
               5     // faz o processamento do arquivo
               6   } catch (IOException e) {
               7     // trata a exceção
               8   } finally {
               9     if(reader != null) {
              10       try {
              11         reader.close();
              12       } catch (IOException e) {
              13         // tenta fazer alguma outra coisa aqui!
              14       }
              15     }
              16   }
              17 }

domingo, 31 de março de 2013
Gerenciamento automático
                          de recursos
               1 public void lerArquivo() {
               2   FileReader reader = null;
               3   try {
               4     reader = new FileReader("arquivo");
               5     // faz o processamento do arquivo
               6   } catch (IOException e) {
               7     // trata a exceção
               8   } finally {
               9     if(reader != null) {
              10       try {
              11         reader.close();
              12       } catch (IOException e) {
              13         // tenta fazer alguma outra coisa aqui!
              14       }
              15     }
              16   }
              17 }

domingo, 31 de março de 2013
Gerenciamento automático
                          de recursos
                 1 public void lerArquivo() {
                 2
                 3   try(FileReader reader = new FileReader("arquivo")) {
                 4
                 5     // faz o processamento do arquivo
                 6   } catch (IOException e) {
                 7     // trata a exceção
                 8   }
                 9 }




domingo, 31 de março de 2013
Gerenciamento automático
                          de recursos
                 1 public void lerArquivo() {
                 2
                 3   try(FileReader reader = new FileReader("arquivo")) {
                 4
                 5     // faz o processamento do arquivo
                 6   } catch (IOException e) {
                 7     // trata a exceção
                 8   }
                 9 }


                      Qualquer classe que implementa a interface
                               java.lang.AutoCloseable
                           pode ser “gerenciada” pelo try!

domingo, 31 de março de 2013
Multicatch e Rethrow
                          mais preciso
                    • A cláusula catch está habilitada para uma
                           série de tipos exceções separadas pelo
                           operador “OR”, símbolo “|”, na declaração
                           do parâmetro
                    • 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


domingo, 31 de março de 2013
Multicatch

           private Object instantiate(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);
             }
           }




domingo, 31 de março de 2013
Multicatch

           private Object instantiate(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);
             }
           }




domingo, 31 de março de 2013
Rethrow mais preciso

           private Object instantiate(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);
             }
           }




domingo, 31 de março de 2013
Rethrow mais preciso
           private Object instantiate(Class<?> clazz) throws
             InstantiationException, IllegalAccessException {
             try {
               Object o = clazz.newInstance();
               return o;
             } catch (InstantiationException | IllegalAccessException e) {
               System.err.println("Erro na criação do objeto");
               throw e;
             }
           }




domingo, 31 de março de 2013
Rethrow mais preciso
           private Object instantiate(Class<?> clazz) throws
             InstantiationException, IllegalAccessException {
             try {
               Object o = clazz.newInstance();
               return o;
             } catch (InstantiationException | IllegalAccessException e) {
               System.err.println("Erro na criação do objeto");
               throw e;
             }
           }




domingo, 31 de março de 2013
Rethrow mais preciso
           private Object instantiate(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;
             }
           }

                                     Isso compila?



domingo, 31 de março de 2013
Rethrow mais preciso
           private Object instantiate(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;
             }
           }

                                       Isso compila?
                                  No Java 6 não compila!!
                                   No Java 7 compila!!
domingo, 31 de março de 2013
Conclusões

                    • Com a nova versão do Java pretende-se
                           reduzir a verbosidade da linguagem
                    • Após o lançamento do Java 7, é sua vez de
                           testar!! Baixe a versão e divirta-se




domingo, 31 de março de 2013
FIM

                               Perguntas?
                                         Marcelo de Castro
                                            @mcastroinfo

                                        Wellington Pinheiro
                                              @wrpinheiro
domingo, 31 de março de 2013

Mais conteúdo relacionado

Mais procurados

Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Programação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da ConsciênciaProgramação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da ConsciênciaAndrei Formiga
 
Scala: Programação OO, Funcional e Concorrente na JVM
Scala: Programação OO, Funcional e Concorrente na JVMScala: Programação OO, Funcional e Concorrente na JVM
Scala: Programação OO, Funcional e Concorrente na JVMAndrei Formiga
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Luciano Ramalho
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, ScannerManuel Menezes de Sequeira
 
Curso de Matlab basico
Curso de Matlab basicoCurso de Matlab basico
Curso de Matlab basicoGabriel Costa
 
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em JavaJ1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em JavaAlexandre Porcelli
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfootVitor Faria
 

Mais procurados (20)

Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Programação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da ConsciênciaProgramação Funcional: Novos Horizontes para a Expansão da Consciência
Programação Funcional: Novos Horizontes para a Expansão da Consciência
 
Scala: Programação OO, Funcional e Concorrente na JVM
Scala: Programação OO, Funcional e Concorrente na JVMScala: Programação OO, Funcional e Concorrente na JVM
Scala: Programação OO, Funcional e Concorrente na JVM
 
Java 06
Java 06Java 06
Java 06
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Semana 9: toString, classes, instâncias e objectos, Scanner
Semana  9: toString, classes, instâncias e objectos, ScannerSemana  9: toString, classes, instâncias e objectos, Scanner
Semana 9: toString, classes, instâncias e objectos, Scanner
 
Curso de Matlab basico
Curso de Matlab basicoCurso de Matlab basico
Curso de Matlab basico
 
Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6Programação Orientada por Objectos - Aula 6
Programação Orientada por Objectos - Aula 6
 
Interface grafica
Interface graficaInterface grafica
Interface grafica
 
POO - 19 - Elementos Estáticos
POO - 19 - Elementos EstáticosPOO - 19 - Elementos Estáticos
POO - 19 - Elementos Estáticos
 
Refactoring
RefactoringRefactoring
Refactoring
 
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em JavaJ1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
J1Brasil: Persistência de Dados além do JPA, ou Como usar noSQL em Java
 
POO - 12 - A Classe Object
POO - 12 - A Classe ObjectPOO - 12 - A Classe Object
POO - 12 - A Classe Object
 
Trabalho em greenfoot
Trabalho em greenfootTrabalho em greenfoot
Trabalho em greenfoot
 
POO - 14 - Vetores
POO - 14 - VetoresPOO - 14 - Vetores
POO - 14 - Vetores
 
POO - 20 - Wrapper Classes
POO - 20 - Wrapper ClassesPOO - 20 - Wrapper Classes
POO - 20 - Wrapper Classes
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Java6
Java6Java6
Java6
 
Classificação de Documentos
Classificação de DocumentosClassificação de Documentos
Classificação de Documentos
 

Destaque

How to turn an Outsourcing Client into an Ongoing Client
How to turn an Outsourcing Client into an Ongoing ClientHow to turn an Outsourcing Client into an Ongoing Client
How to turn an Outsourcing Client into an Ongoing ClientLise Cartwright
 
Blog 64 Regional Growth Fund
Blog 64 Regional Growth FundBlog 64 Regional Growth Fund
Blog 64 Regional Growth FundAlka Suralia
 
5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...
5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...
5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...mcicopoa
 

Destaque (12)

B04721015
B04721015B04721015
B04721015
 
C04721623
C04721623C04721623
C04721623
 
F04724954
F04724954F04724954
F04724954
 
A04720109
A04720109A04720109
A04720109
 
How to turn an Outsourcing Client into an Ongoing Client
How to turn an Outsourcing Client into an Ongoing ClientHow to turn an Outsourcing Client into an Ongoing Client
How to turn an Outsourcing Client into an Ongoing Client
 
Blog 64 Regional Growth Fund
Blog 64 Regional Growth FundBlog 64 Regional Growth Fund
Blog 64 Regional Growth Fund
 
Presentation
PresentationPresentation
Presentation
 
D04722440
D04722440D04722440
D04722440
 
G04725559
G04725559G04725559
G04725559
 
E04724148
E04724148E04724148
E04724148
 
Sql server
Sql serverSql server
Sql server
 
5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...
5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...
5 la-prospectiva-estrategica-la-vigilancia-tecnologica-e-inteligencia-competi...
 

Semelhante a Melhorias na linguagem Java com Project Coin

TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...tdc-globalcode
 
Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02thomasdacosta
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dadosSérgio Souza Costa
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Javathomasdacosta
 
Lpd java exercicios-5
Lpd java exercicios-5Lpd java exercicios-5
Lpd java exercicios-5dlfortunato
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting ProfessionalMichel Alves
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!Rodrigo Stefani Domingues
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemasManuel Menezes de Sequeira
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphereEloi Júnior
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptxwilliam Sarti José
 
Algoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesAlgoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesRADILSON RIPARDO DE FRETIAS
 

Semelhante a Melhorias na linguagem Java com Project Coin (20)

Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Scipy meetup-2020-02
Scipy meetup-2020-02Scipy meetup-2020-02
Scipy meetup-2020-02
 
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...
TDC2016POA | Trilha Programacao Funcional - Por que sua próxima aplicação web...
 
Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02
 
Curso java 02 - variáveis
Curso java   02 - variáveisCurso java   02 - variáveis
Curso java 02 - variáveis
 
Java - Introdução a banco de dados
Java - Introdução a banco de dadosJava - Introdução a banco de dados
Java - Introdução a banco de dados
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
 
Lpd java exercicios-5
Lpd java exercicios-5Lpd java exercicios-5
Lpd java exercicios-5
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
SysSorting Professional
SysSorting ProfessionalSysSorting Professional
SysSorting Professional
 
Series lab
Series labSeries lab
Series lab
 
[Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora![Devcamp] usando programação funcional agora!
[Devcamp] usando programação funcional agora!
 
String
StringString
String
 
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana  6: Matrizes multidimensionais, estratégias de resolução de problemasSemana  6: Matrizes multidimensionais, estratégias de resolução de problemas
Semana 6: Matrizes multidimensionais, estratégias de resolução de problemas
 
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSpherePortando app JavaME S40 para C# WP7:  Um estudo de caso real da app CalcSphere
Portando app JavaME S40 para C# WP7: Um estudo de caso real da app CalcSphere
 
TDD Primeiro Contato
TDD Primeiro ContatoTDD Primeiro Contato
TDD Primeiro Contato
 
Por que sua próxima aplicação web deve ser em Clojure?
Por que sua próxima aplicação web deve ser em Clojure?Por que sua próxima aplicação web deve ser em Clojure?
Por que sua próxima aplicação web deve ser em Clojure?
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx
 
Algoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizesAlgoritmo e estruturas de dados operações com matrizes
Algoritmo e estruturas de dados operações com matrizes
 

Melhorias na linguagem Java com Project Coin

  • 1. Project Coin: Pequenas mudanças, grandes facilidades Marcelo de Castro Wellington Ricardo Pinheiro domingo, 31 de março de 2013
  • 2. Melhorias na Linguagem Java • Máquina Virtual • Linguagem (sintaxe e semântica) • Class Loader • Internacionalização • I/O e Rede • Segurança e Criptografia • JDBC • Camada Cliente • Gerenciamento (JMX e MBeans) domingo, 31 de março de 2013
  • 3. Melhorias na Linguagem Java • Máquina Virtual • Linguagem (sintaxe e semântica) • Class Loader • Internacionalização • I/O e Rede • Segurança e Criptografia • JDBC • Camada Cliente • Gerenciamento (JMX e MBeans) domingo, 31 de março de 2013
  • 4. Melhorias na Linguagem Java (sintaxe e semântica) • JSR 334: Small Enhancements to the JavaTM Programming Language • Especificação do projeto Coin (subprojeto do OpenJDK) • O objetivo do projeto é prover melhorias para a linguagem Java domingo, 31 de março de 2013
  • 5. Separador de dígitos em literais numéricos public class SeparadorDigitos { public static void main(String[] args) { int i = 1_234_567_890; // isso é medonho...mas compila! Integer i1 = new Integer(12_34_56_78_90); Integer i2 = new Integer(1_2_3_4_5_6_7_8_9_0); System.out.println(i == i1); // imprime true System.out.println(i1.equals(i2)); // imprime true } } domingo, 31 de março de 2013
  • 6. Separador de dígitos em literais numéricos Também é possível fazer isso: float f1 = 123_456.7_5F; double d1 = 12____345D; double d2 = 0x1.ffff_ffff_ffff_fP1_023; domingo, 31 de março de 2013
  • 7. Separador de dígitos em literais numéricos Também é possível fazer isso: 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; int intRuim2 = 1234_; float zuado = 123_456.75_F; domingo, 31 de março de 2013
  • 8. Literais binários Tarefa: Construir um método para imprimir os estados de uma válvula, que podem ser: 001 Alarme 010 Fechada 100 Aberta o método recebe como entrada um inteiro com obtido na última leitura e deverão ser verificados quais os bits de estado estão com o valor 1. domingo, 31 de março de 2013
  • 9. Literais binários 1 public static final int ALARME = 0b001; // o valor é 1 2 public static final int FECHADA = 0b010; // o valor é 2 3 public static final int ABERTA = 0b100; // o valor é 4 4 public void mostraEstado(int ultimaLeitura) { 5 final int[] mascaras = {ALARME, FECHADA, ABERTA}; 6 final String[] mensagens = {"alarme", "fechada", "aberta"}; 7 for (int i = 0; i < mascaras.length; i++) { 8 if ((ultimaLeitura & mascaras[i]) == mascaras[i]) 9 System.out.print(mensagens[i] + " "); 10 } 11 System.out.println(); 12 } domingo, 31 de março de 2013
  • 10. String na condição do switch • Os compiladores são responsáveis por traduzir um switch de strings em bytecode com a semântica adequada • Suporte direto a strings no switch pode ser adicionado em uma futura versão da plataforma domingo, 31 de março de 2013
  • 11. String na condição do switch 1 public static void main(String[] args) { 2 for (String arg : args) { 3 switch(arg) { 4 case "-o1": 5 System.out.println("modo de alta otimização (+lento)"); 6 break; 7 case "-o0": 8 System.out.println("modo de baixa otimização (+rápido)"); 9 break; 10 default: 11 System.err.printf("Parâmetro %s inválido. n", param); 12 System.exit(-1); 13 } 14 } 15 } domingo, 31 de março de 2013
  • 12. Inferência na criação de objetos com tipos genéricos • Desde a introdução dos tipos genéricos, construções com tipos genéricos explícitos podem ser atribuídos à variáveis raw type (sem generics) ou com um wildcard: // Java 5+ // desencorajado, mas legal List rawList = new ArrayList<Object>(); List<?> wildList = new ArrayList<Object>(); // consequentemente, no Java 7: List rawList = new ArrayList<>(); List<?> wildList = new ArrayList<>(); domingo, 31 de março de 2013
  • 13. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<Integer, Set<Integer>>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<Integer>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 } domingo, 31 de março de 2013
  • 14. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 } domingo, 31 de março de 2013
  • 15. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet = new HashSet<>(); 7 mapOfIntegers.put(aKey, aSet); 8 } 9 } domingo, 31 de março de 2013
  • 16. Inferência na criação de objetos com tipos genéricos 1 public class InferenciaCriacao { 2 public static void main(String[] args) { 3 Map<Integer, Set<Integer>> mapOfIntegers = 4 new HashMap<>(); 5 Integer aKey = 10; 6 Set<Integer> aSet; 7 mapOfIntegers.put(aKey, aSet = new HashSet<>()); 8 } 9 } domingo, 31 de março de 2013
  • 17. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } } domingo, 31 de março de 2013
  • 18. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } } O seguinte warning é apresentado ao compilarmos a classe: creation of type java.util.Set<java.lang.Integer>[] for varargs parameter List<Set<Integer>> listOfSets = Arrays.asList(aSet); domingo, 31 de março de 2013
  • 19. Simplificação na invocação de métodos varargs public class TesteVarargs { public static void main(String[] args) { Set<Integer> aSet = new HashSet<Integer>(); List<Set<Integer>> listOfSets = Arrays.asList(aSet); } } Compilando o programa com a opção -XD-printflat public class TesteVarargs { public static void main(String[] args) { Set aSet = new HashSet(); List listOfSets = Arrays.asList(new Set[]{aSet}); } } domingo, 31 de março de 2013
  • 20. Simplificação na invocação de métodos varargs Método asList da classe Arrays public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } Mas esse warning é gerado na chamada de qualquer método com assinatura do tipo: <T> Tipo<T> metodo(T... params) domingo, 31 de março de 2013
  • 21. Simplificação na invocação de métodos varargs A solução para o problema é criar uma forma de informar ao compilador que a chamada ao método asList não corre o risco de dar problemas domingo, 31 de março de 2013
  • 22. Simplificação na invocação de métodos varargs A solução para o problema é criar uma forma de informar ao compilador que a chamada ao método asList não corre o risco de dar problemas @SafeVarargs @SafeVarargs public static <T> List<T> asList(T... a) { return new ArrayList<>(a); } domingo, 31 de março de 2013
  • 23. Simplificação na invocação de métodos varargs • Os métodos e construtores da plataforma anotados com @SafeVarargs são: public static <T> List<T> java.util.Arrays.asList(T... a) public static <T> boolean java.util.Collections.addAll( Collection<? super T>, c, T ... elements) public static <E extends Enum<E>> java.util.EnumSet<E> EnumSet.of(E first, E .... rest) protected final void javax.swing.SwingWorker.publish( V ... chunks) domingo, 31 de março de 2013
  • 24. Gerenciamento automático de recursos • Criação da nova interface java.lang.AutoCloseable • Bibliotecas adaptadas para implementar a nova interface • java.lang.Throwable, um novo construtor e dois novos métodos, para facilitar o gerenciamento de exceções suprimidas domingo, 31 de março de 2013
  • 25. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 FileReader reader = null; 3 try { 4 reader = new FileReader("arquivo"); 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } finally { 9 if(reader != null) { 10 try { 11 reader.close(); 12 } catch (IOException e) { 13 // tenta fazer alguma outra coisa aqui! 14 } 15 } 16 } 17 } domingo, 31 de março de 2013
  • 26. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 FileReader reader = null; 3 try { 4 reader = new FileReader("arquivo"); 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } finally { 9 if(reader != null) { 10 try { 11 reader.close(); 12 } catch (IOException e) { 13 // tenta fazer alguma outra coisa aqui! 14 } 15 } 16 } 17 } domingo, 31 de março de 2013
  • 27. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 3 try(FileReader reader = new FileReader("arquivo")) { 4 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } 9 } domingo, 31 de março de 2013
  • 28. Gerenciamento automático de recursos 1 public void lerArquivo() { 2 3 try(FileReader reader = new FileReader("arquivo")) { 4 5 // faz o processamento do arquivo 6 } catch (IOException e) { 7 // trata a exceção 8 } 9 } Qualquer classe que implementa a interface java.lang.AutoCloseable pode ser “gerenciada” pelo try! domingo, 31 de março de 2013
  • 29. Multicatch e Rethrow mais preciso • A cláusula catch está habilitada para uma série de tipos exceções separadas pelo operador “OR”, símbolo “|”, na declaração do parâmetro • 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 domingo, 31 de março de 2013
  • 30. Multicatch private Object instantiate(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); } } domingo, 31 de março de 2013
  • 31. Multicatch private Object instantiate(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); } } domingo, 31 de março de 2013
  • 32. Rethrow mais preciso private Object instantiate(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); } } domingo, 31 de março de 2013
  • 33. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw e; } } domingo, 31 de março de 2013
  • 34. Rethrow mais preciso private Object instantiate(Class<?> clazz) throws InstantiationException, IllegalAccessException { try { Object o = clazz.newInstance(); return o; } catch (InstantiationException | IllegalAccessException e) { System.err.println("Erro na criação do objeto"); throw e; } } domingo, 31 de março de 2013
  • 35. Rethrow mais preciso private Object instantiate(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; } } Isso compila? domingo, 31 de março de 2013
  • 36. Rethrow mais preciso private Object instantiate(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; } } Isso compila? No Java 6 não compila!! No Java 7 compila!! domingo, 31 de março de 2013
  • 37. Conclusões • Com a nova versão do Java pretende-se reduzir a verbosidade da linguagem • Após o lançamento do Java 7, é sua vez de testar!! Baixe a versão e divirta-se domingo, 31 de março de 2013
  • 38. FIM Perguntas? Marcelo de Castro @mcastroinfo Wellington Pinheiro @wrpinheiro domingo, 31 de março de 2013