SlideShare ist ein Scribd-Unternehmen logo
1 von 38
Downloaden Sie, um offline zu lesen
Project Coin: Pequenas
                      mudanças, grandes
                          facilidades
                                         Marcelo de Castro
                                     Wellington Ricardo Pinheiro




quarta-feira, 24 de agosto de 2011
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)



quarta-feira, 24 de agosto de 2011
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)



quarta-feira, 24 de agosto de 2011
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


quarta-feira, 24 de agosto de 2011
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
                      }
                 }




quarta-feira, 24 de agosto de 2011
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;




quarta-feira, 24 de agosto de 2011
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;




quarta-feira, 24 de agosto de 2011
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.


quarta-feira, 24 de agosto de 2011
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         }




quarta-feira, 24 de agosto de 2011
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



quarta-feira, 24 de agosto de 2011
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        }




quarta-feira, 24 de agosto de 2011
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<>();



quarta-feira, 24 de agosto de 2011
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 }




quarta-feira, 24 de agosto de 2011
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 }




quarta-feira, 24 de agosto de 2011
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 }




quarta-feira, 24 de agosto de 2011
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 }




quarta-feira, 24 de agosto de 2011
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);
                    }
                 }




quarta-feira, 24 de agosto de 2011
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);




quarta-feira, 24 de agosto de 2011
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});
                    }
                }


quarta-feira, 24 de agosto de 2011
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)




quarta-feira, 24 de agosto de 2011
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




quarta-feira, 24 de agosto de 2011
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);
                }




quarta-feira, 24 de agosto de 2011
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)



quarta-feira, 24 de agosto de 2011
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


quarta-feira, 24 de agosto de 2011
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 }

quarta-feira, 24 de agosto de 2011
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 }

quarta-feira, 24 de agosto de 2011
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 }




quarta-feira, 24 de agosto de 2011
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!

quarta-feira, 24 de agosto de 2011
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


quarta-feira, 24 de agosto de 2011
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);
              }
            }




quarta-feira, 24 de agosto de 2011
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);
              }
            }




quarta-feira, 24 de agosto de 2011
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);
              }
            }




quarta-feira, 24 de agosto de 2011
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;
              }
            }




quarta-feira, 24 de agosto de 2011
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;
              }
            }




quarta-feira, 24 de agosto de 2011
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?



quarta-feira, 24 de agosto de 2011
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!!
quarta-feira, 24 de agosto de 2011
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




quarta-feira, 24 de agosto de 2011
FIM

                                     Perguntas?
                                               Marcelo de Castro
                                                  @mcastroinfo

                                              Wellington Pinheiro
                                                    @wrpinheiro
quarta-feira, 24 de agosto de 2011

Weitere ähnliche Inhalte

Was ist angesagt?

Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael Fonseca
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Natanael Fonseca
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteresManuel Menezes de Sequeira
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...Manuel Menezes de Sequeira
 
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
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados Nécio de Lima Veras
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...Manuel Menezes de Sequeira
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Natanael Fonseca
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacoteManuel Menezes de Sequeira
 

Was ist angesagt? (20)

Java8
Java8Java8
Java8
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
POO - 17 - Interfaces
POO - 17 - InterfacesPOO - 17 - Interfaces
POO - 17 - Interfaces
 
Java5
Java5Java5
Java5
 
Java 06
Java 06Java 06
Java 06
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Java13
Java13Java13
Java13
 
Semana 8: Classes e instâncias, cadeias de caracteres
Semana  8: Classes e instâncias, cadeias de caracteresSemana  8: Classes e instâncias, cadeias de caracteres
Semana 8: Classes e instâncias, cadeias de caracteres
 
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
11. Enumerações; Instrução switch; Limitações dos inteiros – Fundamentos de P...
 
Dinamicas
DinamicasDinamicas
Dinamicas
 
Java11
Java11Java11
Java11
 
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)
 
Jason: Componentes personalizados
Jason: Componentes personalizados Jason: Componentes personalizados
Jason: Componentes personalizados
 
POO - 04 - Variávies em Java
POO - 04 - Variávies em JavaPOO - 04 - Variávies em Java
POO - 04 - Variávies em Java
 
Java2
Java2Java2
Java2
 
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
10. Encapsulação; Cópia de instâncias; Igualdade de instâncias – Fundamentos ...
 
Fundamentos de C#
Fundamentos de C#Fundamentos de C#
Fundamentos de C#
 
Curso Java Básico - Aula 01
Curso Java Básico - Aula 01Curso Java Básico - Aula 01
Curso Java Básico - Aula 01
 
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana  4: Atribuições especiais, matrizes, ciclos, classes pacoteSemana  4: Atribuições especiais, matrizes, ciclos, classes pacote
Semana 4: Atribuições especiais, matrizes, ciclos, classes pacote
 
Java6
Java6Java6
Java6
 

Andere mochten auch

Codigo invocado com java.lang.invoke
Codigo invocado com java.lang.invokeCodigo invocado com java.lang.invoke
Codigo invocado com java.lang.invokeMarcelo de Castro
 
Desenvolva plugins para o compilador do Java 8
Desenvolva plugins para o compilador do Java 8Desenvolva plugins para o compilador do Java 8
Desenvolva plugins para o compilador do Java 8Marcelo de Castro
 
The Near Future of CSS
The Near Future of CSSThe Near Future of CSS
The Near Future of CSSRachel Andrew
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsShelly Sanchez Terrell
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaChris Lema
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back KidEthos3
 

Andere mochten auch (6)

Codigo invocado com java.lang.invoke
Codigo invocado com java.lang.invokeCodigo invocado com java.lang.invoke
Codigo invocado com java.lang.invoke
 
Desenvolva plugins para o compilador do Java 8
Desenvolva plugins para o compilador do Java 8Desenvolva plugins para o compilador do Java 8
Desenvolva plugins para o compilador do Java 8
 
The Near Future of CSS
The Near Future of CSSThe Near Future of CSS
The Near Future of CSS
 
Classroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and AdolescentsClassroom Management Tips for Kids and Adolescents
Classroom Management Tips for Kids and Adolescents
 
The Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris LemaThe Buyer's Journey - by Chris Lema
The Buyer's Journey - by Chris Lema
 
The Presentation Come-Back Kid
The Presentation Come-Back KidThe Presentation Come-Back Kid
The Presentation Come-Back Kid
 

Ähnlich wie Project coin pequenas mudanças grandes facilidades

Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao cprofwtelles
 
Relatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadoresRelatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadoresFlavio Oliveira Rodrigues
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)Fabrício Catae
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoMarcius Brandão
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4CDS
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesOziel Moreira Neto
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doublePAULO Moreira
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
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
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptxwilliam Sarti José
 

Ähnlich wie Project coin pequenas mudanças grandes facilidades (20)

Curso de java 02
Curso de java 02Curso de java 02
Curso de java 02
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Relatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadoresRelatório multiplexadores e decodificadores
Relatório multiplexadores e decodificadores
 
7194099-Manual-de-Java
7194099-Manual-de-Java7194099-Manual-de-Java
7194099-Manual-de-Java
 
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)TechEd 2005: Novos Recursos T-SQL (SQL 2005)
TechEd 2005: Novos Recursos T-SQL (SQL 2005)
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Javascript
JavascriptJavascript
Javascript
 
Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swing
 
C# 4.0
C# 4.0C# 4.0
C# 4.0
 
Framework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da DissertacaoFramework Entities - Apresentação da Defesa da Dissertacao
Framework Entities - Apresentação da Defesa da Dissertacao
 
Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4Visual Studio 2010 e C# 4
Visual Studio 2010 e C# 4
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Linguagem de Programação Java para Iniciantes
Linguagem de Programação Java para IniciantesLinguagem de Programação Java para Iniciantes
Linguagem de Programação Java para Iniciantes
 
Classe integer-float-byte-short-long-double
Classe integer-float-byte-short-long-doubleClasse integer-float-byte-short-long-double
Classe integer-float-byte-short-long-double
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
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...
 
02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx02 JAVAEstrutura sequencial (slides).pptx
02 JAVAEstrutura sequencial (slides).pptx
 

Project coin pequenas mudanças grandes facilidades

  • 1. Project Coin: Pequenas mudanças, grandes facilidades Marcelo de Castro Wellington Ricardo Pinheiro quarta-feira, 24 de agosto de 2011
  • 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) quarta-feira, 24 de agosto de 2011
  • 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) quarta-feira, 24 de agosto de 2011
  • 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 quarta-feira, 24 de agosto de 2011
  • 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 } } quarta-feira, 24 de agosto de 2011
  • 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; quarta-feira, 24 de agosto de 2011
  • 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; quarta-feira, 24 de agosto de 2011
  • 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. quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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 quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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<>(); quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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); } } quarta-feira, 24 de agosto de 2011
  • 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); quarta-feira, 24 de agosto de 2011
  • 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}); } } quarta-feira, 24 de agosto de 2011
  • 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) quarta-feira, 24 de agosto de 2011
  • 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 quarta-feira, 24 de agosto de 2011
  • 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); } quarta-feira, 24 de agosto de 2011
  • 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) quarta-feira, 24 de agosto de 2011
  • 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 quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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 } quarta-feira, 24 de agosto de 2011
  • 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! quarta-feira, 24 de agosto de 2011
  • 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 quarta-feira, 24 de agosto de 2011
  • 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); } } quarta-feira, 24 de agosto de 2011
  • 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); } } quarta-feira, 24 de agosto de 2011
  • 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); } } quarta-feira, 24 de agosto de 2011
  • 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; } } quarta-feira, 24 de agosto de 2011
  • 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; } } quarta-feira, 24 de agosto de 2011
  • 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? quarta-feira, 24 de agosto de 2011
  • 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!! quarta-feira, 24 de agosto de 2011
  • 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 quarta-feira, 24 de agosto de 2011
  • 38. FIM Perguntas? Marcelo de Castro @mcastroinfo Wellington Pinheiro @wrpinheiro quarta-feira, 24 de agosto de 2011