Plataforma Java x Plataforma .NET
                             Edição SP 2010

                    Tema 2
           Linguagem de programação
               (15 de outubro de 2010)




   Linguagem de programação Java 6
Novidades das próximas versões: Java 7 e
                Java 8


           Rogério Moraes de Carvalho
              Twitter: @rogeriomc
               rogeriom@gmx.net
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 A evolução da linguagem Java
                                                 Java 1.0: A linguagem
                                                 Java 1.0: Tipos primitivos e por referência
                                                 Java 1.0: Arrays
                                                 Java 1.0: Gerenciamento de memória
                                                 Java 1.0: Classes e seus membros
                                                 Java 1.0: Acessibilidade de membros
                                                 Java 1.0: Exemplo de membros
                                                 Java 1.0: Interfaces
                                                 Java 1.0: Herança e polimorfismo

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   2
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 Java 1.1: Classes aninhadas
                                                 Java 1.2: Palavra-chave strictfp
                                                 Java 1.4: Palavra-chave assert
                                                 Java 5.0: Generics
                                                 Java 5.0: Laço for avançado
                                                 Java 5.0: Autoboxing/unboxing
                                                 Java 5.0: Motivação para enumerações
                                                 Java 5.0: Enumerações
                                                 Java 5.0: Varargs
                                                 Java 5.0: Anotações (metadados)

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   3
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 OpenJDK
                                                 Repensando o JDK 7
                                                 Escolha do plano B
                                                 Detalhes do plano B
                                                 IBM se junta ao OpenJDK
                                                 Diálogo pelo Twitter com Dalibor Topic




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   4
Edição SP 2010
Plataforma Java x Plataforma .NET           Agenda
                                                 Java 7: JSR 292 - Linguagens dinâmicas
                                                 Java 7: JSR TBD - Project Coin (part 1)
                                                 Java 8: JSR 294 - Mudularidade
                                                 Java 8: JSR TBD - Projeto Lambda
                                                 Java 8: JSR 308 - Anotações
                                                 Java 8: JSR TBD - Project Coin (part 2)
                                                 Demonstração
                                                 Conclusão
                                                 Referências


                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   5
Edição SP 2010
Plataforma Java x Plataforma .NET           A evolução da linguagem Java

                                                                                          Generics, anotações (metadados),
                                                                  Java 5.0                autoboxing/unboxing, enumerações,
                                                                    (Set 2004)            varargs, laço for avançado e static import

                                                                                   A evolução da linguagem Java passou a ser
                                                           Java 1.4                governada pelo Java Community Process (JCP)
                                                             (Fev 2002)            no JSR 901 e acréscimo da palavra-chave assert

                                                                            Acréscimo da palavra-chave strictfp para garantir a
                                                    Java 1.2                portabilidade em cálculos com ponto flutuante
                                                      (Dez 1998)

                                               Java 1.1                Suporte a classes internas (classes aninhadas)
                                                 (Fev 1997)
                                                                  Linguagem de programação orientada a objetos projetada
                                            Java 1.0              para ter o mínimo de dependência de implementação
                                             (Jan 1996)


                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)              6
Edição SP 2010
Plataforma Java x Plataforma .NET           A evolução da linguagem Java

                                                                                   Modularidade (pacotes e superpacotes),
                                                                                   projeto Lambda (tipos funções e expressões
                                                                                   Lambda), extensão da sintaxe de anotações,
                                                            Java 8                 expressões literais para listas, conjuntos e
                                                         (Final de 2012)
                                                                                   mapas, acesso com sintaxe de índices para
                                                                                   listas e mapas


                                                                      Suporte a linguagens tipadas dinamicamente, strings
                                               Java 7                 em switch, try-with-resources, inferência melhorada
                                            (Meio de 2011)            na criação de instâncias genéricas (“diamond”),
                                                                      invocação simplificada com varargs, literais binários e
                                                                      sublinhado para literais inteiros, multi-catch




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)         7
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: A linguagem
                                             Linguagem                 Java
                                                 Linguagem de  programação orientada a objetos de
                                                  propósito geral, especificamente projetada para ter um
                                                  mínimo de dependência de implementações
                                                 Relacionada com C e C++, mas organizada de modo
                                                  diferente
                                                       Uma quantidade de características de C e C++ foram omitidas e
                                                        ideias de outras linguagens incluídas
                                             “Olá,         mundo!” em Java
                                                 public class OlaMundo {
                                                    public static void main(String[] args) {
                                                       System.out.println("Olá, mundo!");
                                                    }
                                                 }



                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   8
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Tipos primitivos e por referência
                                             Os   tipos da linguagem Java são divididos em duas
                                                categorias
                                                 Tipos primitivos
                                                       Tipo booleano                            boolean
                                                       Tipos inteiros                           byte, short, int, long, char

                                                       Tipos de ponto flutuante                 float, double

                                                 Tipos por           referência
                                                       Tipos classes                            class Pessoa { ... }
                                                       Tipos interfaces                         interface Lista { ... }
                                                       Tipos arrays                             int[] primos = { 2, 3, 5, 7, 11 }




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)            9
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Arrays
                                             O que           é um array?
                                                 É uma estrutura de  dados que contém um número fixo
                                                    de variáveis chamadas de elementos do array
                                                       Os elementos do array são acessados por índices iniciados em zero
                                             Tipos         de arrays
                                                 Unidimensionais                                                 int[] arr = new int[5];

                                                 Multidimensionais
                                                       Irregulares
                                                          int[][] j2;
                                                          int[][][] j3;




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                   10
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Gerenciamento de memória
                                             Gerenciamento                       manual de memória
                                                 Requer que    o desenvolvedor gerencie a alocação e
                                                    liberação de blocos de memória
                                                       Tarefa repetitiva e sujeita a erros
                                             Gerenciamento                       automático de memória
                                                 Usado pelo  Java para livrar os desenvolvedores da tarefa
                                                  cansativa de gerenciar a memória
                                                 O serviço da JVM (Java Virtual Machine) responsável pela
                                                  liberação da memória usada por objetos é denominado
                                                  coletor de lixo (garbage collector)
                                                 Um objeto se torna elegível a ser coletado pelo coletor de
                                                  lixo quando não há a possibilidade de nenhum código
                                                  acessá-lo
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   11
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Classes e seus membros
                                             Classes                                                    Membros            de classes
                                                 Definem novos                 tipos por                    Classes podem     ter os
                                                  referência                                                    seguintes tipos de
                                                 Uma classe pode herdar                                        membros
                                                  de outra classe                                                  Campos
                                                       Herança simples (de uma                                    Métodos
                                                        única classe)                                              Construtores
                                                 Uma classe pode                                                  Inicializadores de instância
                                                                                                                    e estáticos
                                                    implementar múltiplas
                                                                                                                   Classes e interfaces
                                                    interfaces
                                                                                                                    aninhadas




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                          12
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Acessibilidade de membros
                                             Acessibilidade                   de membros de classes
                                                 Cada membro tem uma acessibilidade associada
                                                       Controla as regiões de texto de programa que estão habilitadas a
                                                        acessar o membro
                                                         Modificador de
                                                                                         Acessibilidade
                                                         acesso
                                                         public                          Acesso ilimitado
                                                                                         Acesso limitado à classe contêiner, a
                                                         protected                       classes derivadas ou classes num
                                                                                         mesmo pacote
                                                         “sem modificador” Acesso limitado à classe contêiner ou
                                                         (acesso padrão)   a classes no mesmo pacote
                                                         private                         Acesso limitado à classe contêiner




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)        13
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Exemplo de membros
                                             Classe          com cada um dos tipos de membros
                                                 class Classe {
                                                    private int campo;
                                                    private static int campoEstatico = 34;

                                                      public void metodoSemParametroNemRetorno() { }
                                                      public String metodoComParametroComRetorno(double d) { ... }

                                                      public Classe() { }
                                                      public Classe(int valor) {                   }

                                                      { /* Inicializador de instância 1 */ }
                                                      { /* Inicializador de instância 2 */ }

                                                      static { /* Inicializador estático 1 */ }
                                                      static { /* Inicializador estático 2 */ }

                                                      class ClasseAninhada { }
                                                      interface InterfaceAninhada {                     }
                                                 }


                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   14
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Interfaces
                                             Conceito              de interface
                                                 Uma interface define                     um contrato
                                                       Classes podem implementar múltiplas interfaces
                                             Características de                      uma interface
                                                 Interfaces podem                   ter os seguintes membros
                                                       Campos estáticos constantes (finais) e métodos
                                             Exemplo              da declaração de uma interface
                                                 interface Interface {
                                                    int CONSTANTE1 = 10;
                                                    int CONSTANTE2 = 20;
                                                    void metodo(int valor);
                                                    String metodo2();
                                                 }




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   15
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.0: Herança e polimorfismo
                                             Classes           abstratas
                                                 Classes definidas                para serem classes bases de outras classes
                                                     abstract class ClasseAbstrata { ... }

                                             Métodos               finais (palavra-chave final)
                                                 Um método      pode ser declarado como final para prevenir
                                                    que ele seja sobrescrito ou ocultado em subclasses
                                                       Em Java, métodos são polimórficos por padrão
                                                          class Classe {
                                                             void metodoPolimorfico() { ... }
                                                             final void metodoNãoPolimorfico() { ... }
                                                          }




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   16
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.1: Classes aninhadas
                                             Conceito              de classes aninhadas
                                                 Uma classe definida                    inteiramente dentro do corpo de uma
                                                    outra classe
                                                     class ClasseExterna {
                                                         ...
                                                         class ClasseAninhada { ... }
                                                     }

                                             Categorias das                    classes aninhadas
                                                 Estáticas
                                                 Não estáticas, também chamadas de                                    classes internas
                                                       Têm acesso aos membros da classe contêiner, mesmo os privados
                                                 class ClasseExterna {
                                                     ...
                                                     static class ClasseAninhadaEstatica { ... }
                                                     class ClasseInterna { ... }
                                                 }
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                 17
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.2: Palavra-chave strictfp
                                             Expressões                estritas de ponto flutuante (FP-strict)
                                                 Define restrições em cálculos com ponto   flutuante para
                                                  garantir portabilidade (dados dos tipos float ou double)
                                                 Todas as expressões devem usar aritmética IEEE 754 nos
                                                  operandos representados usando os formatos de precisão
                                                  simples (float) ou precisão dupla (double)
                                             Uso        da palavra-chave strictfp
                                                 Pode ser  usado para modificar o comportamento de
                                                    expressões de ponto flutuante em classes, interfaces ou
                                                    métodos




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   18
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 1.4: Palavra-chave assert
                                             Assertivas              (ou afirmações) em Java
                                                 Uma assertiva  é uma instrução que permite testar uma
                                                  suposição sobre o programa
                                                 Cada assertiva contém uma expressão booleana que deve
                                                  ser verdadeira quando a assertiva for executada
                                                       Se ela não for verdadeira, o erro AssertionError será lançado
                                             Vantagens das                     assertivas
                                                 Uma maneira rápida para
                                                                        detectar e corrigir bugs
                                                 Documenta o funcionamento interno do programa

                                             Sintaxe
                                                 assert expressaoBooleana;
                                                 assert expressaoBooleana : expressaoInfoErro;



                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   19
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 5.0: Generics
                                             Conceito              de Generics
                                                 Generics correspondem a     um recurso de abstração dos
                                                    tipos de dados através do uso de tipos parametrizados
                                             Uso        mais comum
                                                 O uso mais comum de    Generics é nos tipos de contêiner,
                                                    como nos presentes no framework de coleções
                                             Exemplo
                                                 A declaração de  um tipo genérico usa um tipo
                                                    parametrizado delimitado por < e > após o nome do tipo
                                                     public interface Iterator<E> {
                                                        boolean hasNext();
                                                        E next();
                                                        void remove();
                                                     }

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   20
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 5.0: Laço for avançado
                                             Conceito
                                                 O laço for avançado foi                     projetado para iteração em
                                                    coleções e arrays
                                             Diferença              para o laço for tradicional
                                                 O laço for          tradicional exige a codificação do controle de
                                                    iteração
                                             Exemplo
                                                 public static double media(double[] valores) {
                                                    double soma = 0.0;
                                                    for (double valor : valores) {
                                                       soma += valor;
                                                    }
                                                    return soma / valores.length;
                                                 }



                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   21
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 5.0: Autoboxing/unboxing
                                             Conceito              de autoboxing
                                                 Processo de   conversão automática de um tipo primitivo
                                                    para uma instância da classe Wrapper correspondente
                                             Conceito              de unboxing
                                                 Processo de  conversão automática de uma instância da
                                                    classe Wrapper para o tipo primitivo correspondente
                                             Aplicação importante
                                                 Os processos de   autoboxing e unboxing facilitam muito o
                                                    uso de coleções com elementos de tipos primitivos
                                             Exemplo
                                                 Integer fator1 = 15; // Autoboxing
                                                 int fator2 = 10;
                                                 int produto = fator1 * fator2; // Unboxing

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   22
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 5.0: Motivação para enumerações
                                             Práticas            comuns antes do suporte a enumerações
                                                 Constant interface                  pattern (pacote javax.swing)
                                                     public interface SwingConstants {
                                                        public static final int BOTTOM = 3;
                                                        public static final int CENTER = 0;
                                                        ...
                                                     }

                                                 int enum           pattern (pacote javax.microedition.lcdui)
                                                     public class Command {
                                                        public static final int SCREEN = 1;
                                                        public static final int BACK = 2;
                                                        public static final int CANCEL = 3;
                                                        ...
                                                     }

                                                 Typesafe           enum pattern
                                                       Melhor prática, mas muito trabalhoso para implementar

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   23
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 5.0: Enumerações
                                             Conceito
                                                 São tipos em   que os campos consistem de um conjunto fixo
                                                     de constantes
                                             Exemplo
                                                 public enum FormaPagamento {
                                                     DINHEIRO(1, "Dinheiro"),
                                                     CHEQUE(2, "Cheque"),
                                                     CARTAO_CREDITO(3, "Cartão de Crédito");

                                                        private final int codigo;
                                                        private final String descricao;

                                                        FormaPagamento(int codigo, String descricao) {
                                                            this.codigo = codigo; this.descricao = descricao; }
                                                        public int getCodigo() { return codigo; }
                                                        public String getDescricao() { return descricao; }
                                                        public String toString() { return getDescricao(); }
                                                 }

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   24
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 5.0: Varargs
                                             Conceito
                                                 Recurso para suportar                      um número de argumentos variável
                                                    (varargs) em métodos
                                             Sintaxe
                                                 Uma elipse(...) identifica um número variável de
                                                  argumentos do tipo declarado
                                                 Observação
                                                       O argumento variável necessariamente deve ser o último na lista de
                                                        parâmetros do método
                                             Exemplo
                                                 public static double media(double ... valores) {
                                                    double soma = 0.0;
                                                    for (double valor : valores) { soma += valor; }
                                                    return soma / valores.length;
                                                 }
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)       25
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 5.0: Anotações (metadados)
                                             Conceito
                                                 Anotações são modificadores que     podem ser adicionados
                                                    ao código e aplicados a pacotes, declarações de tipos
                                                    (classes, interfaces, enumerações, etc), construtores,
                                                    métodos, campos e parâmetros
                                             Sintaxe
                                                 Uma anotação é    precedida por um símbolo de arroba (@)
                                                    seguida pelo nome da anotação
                                             Exemplo
                                                 public class Ponto {
                                                    ...
                                                    @Override
                                                    public String toString() {...}
                                                 }


                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   26
Edição SP 2010
Plataforma Java x Plataforma .NET           OpenJDK
                                             O que           é o OpenJDK?
                                                 Local de colaboração numa
                                                    implementação open source:
                                                       da especificação Java Platform, Standard Edition (Java SE),
                                                       da linguagem Java,
                                                       do Java Development Kit (JDK) e
                                                       do Java Runtime Environment (JRE)
                                                 Implementação de                     referência da Java SE
                                             Endereço               do OpenJDK no portal Java.net
                                                 http://openjdk.java.net/

                                             Mark          Reinhold - Twitter: @mreinhold
                                                 Arquiteto na  Oracle responsável pela plataforma Java SE,
                                                    pelo Open JDK, entre outras coisas
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   27
Edição SP 2010
Plataforma Java x Plataforma .NET           Repensando o JDK 7
                                             Blog do            Mark Reinhold - Re-thinking JDK 7
                                                 http://blogs.sun.com/mr/entry/rethinking_jdk7
                                                       Publicado em 08/09/2010 09:21
                                             Objetivos
                                                 Justificar o
                                                             atraso no cronograma do JDK 7 devido ao
                                                  processo de integração após a aquisição da Sun pela Oracle
                                                 Propor dois planos de ação para implementação de novos
                                                  recursos no JDK para a comunidade
                                                     Plano A       JDK 7 (como já estava definido)                          Meio de 2012
                                                                   JDK 7 (menos Lambda, Jigsaw, e parte do Coin) Meio de 2011
                                                     Plano B       JDK 8 (Lambda, Jigsaw, o resto do Coin e
                                                                                                                            Final de 2012
                                                                   outras coisas)
                                                 Houve         175 comentários da comunidade no post
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                   28
Edição SP 2010
Plataforma Java x Plataforma .NET           Escolha do plano B
                                             Blog do            Mark Reinhold - It’s time for … Plan B
                                                 http://blogs.sun.com/mr/entry/plan_b
                                                       Publicado em 20/09/2010 16:42
                                             Decisão            pelo plano B
                                                 O retorno nos  comentários foram mais fortemente
                                                  favoráveis ao plano B
                                                 Então, a Oracle decidiu por adotar o plano B para o JDK 7 e
                                                  o JDK 8
                                                                   JDK 7 (menos Lambda, Jigsaw, e parte do Coin) Meio de 2011
                                                     Plano B       JDK 8 (Lambda, Jigsaw, o resto do Coin e
                                                                                                                            Final de 2012
                                                                   outras coisas)




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)                   29
Edição SP 2010
Plataforma Java x Plataforma .NET           Detalhes do plano B
                                             Blog        do Mark Reinhold - Plan B: The details
                                                 http://blogs.sun.com/mr/entry/plan_b_details
                                                       Publicado em 10/10/2010 22:08
                                             O plano            B foi aceito por um Comitê Executivo do JCP
                                                 Seguem os itens                 relacionados com a linguagem Java
                                                       Java SE 7
                                                         JSR 292: Support for dynamically-typed languages (InvokeDynamic)
                                                         JSR TBD: Small language enhancements (Project Coin)
                                                       Java SE 8
                                                         JSR 294: Language and VM support for modular programming
                                                         JSR TBD: Lambda Expressions, Default Methods, & Bulk Data Operations
                                                          (Project Lambda)
                                                         JSR 308: Annotations on Java Types
                                                         JSR TBD: More Small Language Enhancements (Project Coin part 2)

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)        30
Edição SP 2010
Plataforma Java x Plataforma .NET           IBM se junta ao OpenJDK
                                             Anúncio             oficial da Oracle
                                                 Oracle and  IBM Collaborate to Accelerate Java Innovation
                                                    Through OpenJDK
                                                       http://www.oracle.com/us/corporate/press/176988
                                             Qual         é a importância desta parceria?
                                                 Engenheiros da   IBM e da Oracle trabalharão com outros
                                                    colaboradores na implementação de referência da Java SE
                                             Blog do            Mark Reinhold - IBM to join OpenJDK
                                                 http://blogs.sun.com/mr/entry/ibm_to_join_openjdk
                                                       Publicado em 11/10/2010 12:01
                                             Blog do            Dalibor Topic - OpenJDK.Community += IBM
                                                 http://robilad.livejournal.com/63940.html
                                                       Publicado em 11/10/2010 18:11
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   31
Edição SP 2010
Plataforma Java x Plataforma .NET           Diálogo pelo Twitter com Dalibor Topic
                                             Relativo ao               post OpenJDK.Community += IBM
                                                @robilad
                                                         OpenJDK.Community += IBM: http://robilad.livejournal.com/63940.html
                                                       @rogeriomc
                                                         Are you announcing in C#?
                                                          RT @robilad: OpenJDK.Community += IBM: http://bit.ly/cp2KdE
                                                       @rogeriomc
                                                         In Java must be:
                                                          openJDK.setCommunity(openJDK.getCommunity() + IBM)
                                                          RT @robilad: OpenJDK.Community += IBM: http://bit.ly/cp2KdE
                                                       @rogeriomc
                                                         Or are you exposing a public field in Java? ;-) Bad OOP practice!
                                                          RT @robilad: OpenJDK.Community += IBM: http://bit.ly/cp2KdE
                                                       @robilad
                                                         @rogeriomc Nah, just thinking ahead and wishing for properties in 9 after
                                                          watching @mreinhold's JavaOne keynote. ;)

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)         32
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 7: JSR 292 - Linguagens dinâmicas
                                             JSR 292:  Support for dynamically-typed languages
                                                (InvokeDynamic)
                                                 Extensões da    máquina virtual e da linguagem para suportar
                                                    a implementação de linguagens com tipagem dinâmica com
                                                    níveis de desempenho próximos da linguagem Java
                                             Maiores             informações no JCP
                                                 http://jcp.org/en/jsr/detail?id=292

                                             Exemplo              de código
                                                 class MyCaller {
                                                    Object myMethod(Object x, Object y, int z) {
                                                       // x.invokedynamic["alpha",(Object,int)Object] (y, z)
                                                       return ((Dynamic)x).alpha(y, z);
                                                    }
                                                 }


                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   33
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 7: JSR TBD - Project Coin (part 1)
                                             JSR TBD:             Small language enhancements (Project
                                                Coin)
                                                 Um conjunto de                  pequenas modificações para facilitar as
                                                    tarefas diarias
                                                       Strings em instruções switch
                                                       try-with-resources (anteriormente chamado de Automatic Resource
                                                        Management, ARM)
                                                       Inferência de tipos melhorada na criação de instâncias genéricas
                                                        (“diamond”)
                                                       Invocação simplificada de um método com varargs
                                                       Literais binarias e sublinhados em literais inteiros
                                                       Manipulação de exceções melhorada (multi-catch)
                                             Maiores             informações no OpenJDK no Java.net
                                                 http://openjdk.java.net/projects/coin/
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   34
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 8: JSR 294 - Mudularidade
                                             JSR 294: Improved Modularity Support in the Java
                                                Programming Language
                                                 Melhorias nas   especificações da linguagem Java e da
                                                    máquina virtual para suportar programação modular
                                                       Tanto em tempo de compilação quanto em tempo de execução
                                             Pacotes            e superpacotes
                                                 Cada superpacote é                    uma coleção de um ou mais pacotes
                                                    ou superpacotes
                                                       Tipos públicos podem ser acessados de outros tipos em pacotes que
                                                        estejam agrupados num mesmo superpacote
                                                         Tipos em outros superpacotes somente podem acessar tipos exportados

                                             Maiores             informações no JCP
                                                 http://jcp.org/en/jsr/detail?id=294

                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)       35
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 8: JSR TBD - Projeto Lambda
                                             JST TBD:             Project Lambda
                                                 O projeto  tem como objetivo formular uma proposta para
                                                    acrescentar:
                                                       Funções de primeira classe
                                                       Tipos funções
                                                       Expressões lambda (informalmente chamadas de “closures”)
                                             Considerada                  uma grande mudança na linguagem
                                                 Atualmente, o                projeto ainda está num estágio bem inicial
                                             Maiores             informações no OpenJDK no Java.net
                                                 http://openjdk.java.net/projects/lambda/




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   36
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 8: JSR 308 - Anotações
                                             JSR 308:            Annotations on Java types
                                                 Uma extensão à   sintaxe de anotação Java para permitir
                                                    anotações em qualquer ocorrência de um tipo
                                             O que           são anotações de tipo?
                                                 As anotações em Java                      6 são úteis, mas limitadas
                                                       A sintaxe de anotações de tipo permitem que anotações sejam
                                                        escritas em mais lugares, como em argumentos de tipos genéricos
                                                           List<@NonNull Object>

                                             Mais         informações
                                                 No Java          Community Process (JCP)
                                                       http://jcp.org/en/jsr/detail?id=308
                                                 Type       Annotations (JSR 308) and the Checker Framework
                                                       http://types.cs.washington.edu/jsr308/ (mais atualizadas)
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   37
Edição SP 2010
Plataforma Java x Plataforma .NET           Java 8: JSR TBD - Project Coin (part 2)
                                             JSR TBD:             Language support for collections
                                                 Expressões literais para
                                                                         listas, conjuntos e mapas
                                                 Acesso com sintaxe de índices para listas e mapas: [ ]

                                             Outra          possibilidade em análise
                                                 Strings de          múltiplas linhas
                                             Atualmente,                  esta parte ainda está num estágio bem
                                              inicial
                                             Mais informações no OpenJDK no Java.net
                                                 http://openjdk.java.net/projects/coin/




                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   38
Edição SP 2010
Plataforma Java x Plataforma .NET           Demonstração
                                             Preparação   de um ambiente para testar as
                                                novidades dos builds mais recentes do JDK 7
                                                 Java Platform, Standard Edition 7 Binary Snapshot                         Releases
                                                       http://dlc.sun.com.edgesuite.net/jdk7/binaries/
                                                       Build b114 da demonstração (build liberado em 14/10/2010)
                                                 NetBeans 6.9.1
                                                       http://netbeans.org/downloads/
                                                       Características do JDK 7 suportadas no editor do NetBeans 6.9
                                                         http://wiki.netbeans.org/Java_EditorJDK7

                                             Demonstração                      de algumas das novidades do Project
                                                Coin (part 1)


                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)          39
Edição SP 2010
Plataforma Java x Plataforma .NET           Conclusão
                                            A      linguagem Java
                                                 Evolução conservadora                        até a versão 6
                                                       Java 1.0 em janeiro de 1996 (JRE 1.0)
                                                       Java 1.1 em fevereiro de 1997 (JRE 1.1)
                                                         Suporte a classes aninhadas
                                                       Java 1.2 em dezembro de 1998 (JRE 1.2)
                                                         Suporte a restrições em operações com ponto flutuante (strictfp)
                                                       Java 1.4 em fevereiro de 2002 (JRE 1.4)
                                                         Suporte a assertivas (assert)
                                                       Java 5.0
                                                         Suporte a generics, anotações, autoboxing/unboxing, enumerações,
                                                          varargs, laço for avançado e static import
                                                 Evolução rápida                anunciada para as versões 7 e 8
                                                       Java 7 no meio de 2011
                                                         Suporte a linguagens dinâmicas e projeto Coin (parte 1)
                                                       Java 8 no final de 2012
                                                         Modularidade, projeto Lambda, ext. de anotações e projeto Coin (parte 2)
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)        40
Edição SP 2010
Plataforma Java x Plataforma .NET           Referências
                                             The Java Language                         Specification
                                                 http://java.sun.com/docs/books/jls/
                                                 Atualmente, está                  na sua terceira edição (gratuita)
                                             The        Java Tutorials
                                                 Java SE
                                                       http://download.oracle.com/javase/tutorial/
                                                       Trail: Learning the Java Language
                                                         http://download.oracle.com/javase/tutorial/java/

                                             Livro        Effective Java (2nd Edition)
                                                 O autorJoshua Bloch fornece uma visão em
                                                  profundidade da linguagem Java
                                                 Amazon.com
                                                       http://www.amazon.com/dp/0321356683/
                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   41
Edição SP 2010
Plataforma Java x Plataforma .NET           Referências
                                             Re-thinking                JDK 7 (Mark Reinhold’s Blog)
                                                 http://blogs.sun.com/mr/entry/rethinking_jdk7

                                             It’s     time for … Plan B (Mark Reinhold’s Blog)
                                                 http://blogs.sun.com/mr/entry/plan_b

                                             Plan        B: The details (Mark Reinhold’s Blog)
                                                 http://blogs.sun.com/mr/entry/plan_b_details

                                             IBM        to join OpenJDK (Mark Reinhold’s Blog)
                                                 http://blogs.sun.com/mr/entry/ibm_to_join_openjdk

                                             OpenJDK.Community                               += IBM (Dalibor Topic)
                                                 http://robilad.livejournal.com/63940.html



                                            © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft)   42

Linguagem de programação Java 6, 7 e 8

  • 1.
    Plataforma Java xPlataforma .NET Edição SP 2010 Tema 2 Linguagem de programação (15 de outubro de 2010) Linguagem de programação Java 6 Novidades das próximas versões: Java 7 e Java 8 Rogério Moraes de Carvalho Twitter: @rogeriomc rogeriom@gmx.net
  • 2.
    Edição SP 2010 PlataformaJava x Plataforma .NET Agenda  A evolução da linguagem Java  Java 1.0: A linguagem  Java 1.0: Tipos primitivos e por referência  Java 1.0: Arrays  Java 1.0: Gerenciamento de memória  Java 1.0: Classes e seus membros  Java 1.0: Acessibilidade de membros  Java 1.0: Exemplo de membros  Java 1.0: Interfaces  Java 1.0: Herança e polimorfismo © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 2
  • 3.
    Edição SP 2010 PlataformaJava x Plataforma .NET Agenda  Java 1.1: Classes aninhadas  Java 1.2: Palavra-chave strictfp  Java 1.4: Palavra-chave assert  Java 5.0: Generics  Java 5.0: Laço for avançado  Java 5.0: Autoboxing/unboxing  Java 5.0: Motivação para enumerações  Java 5.0: Enumerações  Java 5.0: Varargs  Java 5.0: Anotações (metadados) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 3
  • 4.
    Edição SP 2010 PlataformaJava x Plataforma .NET Agenda  OpenJDK  Repensando o JDK 7  Escolha do plano B  Detalhes do plano B  IBM se junta ao OpenJDK  Diálogo pelo Twitter com Dalibor Topic © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 4
  • 5.
    Edição SP 2010 PlataformaJava x Plataforma .NET Agenda  Java 7: JSR 292 - Linguagens dinâmicas  Java 7: JSR TBD - Project Coin (part 1)  Java 8: JSR 294 - Mudularidade  Java 8: JSR TBD - Projeto Lambda  Java 8: JSR 308 - Anotações  Java 8: JSR TBD - Project Coin (part 2)  Demonstração  Conclusão  Referências © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 5
  • 6.
    Edição SP 2010 PlataformaJava x Plataforma .NET A evolução da linguagem Java Generics, anotações (metadados), Java 5.0 autoboxing/unboxing, enumerações, (Set 2004) varargs, laço for avançado e static import A evolução da linguagem Java passou a ser Java 1.4 governada pelo Java Community Process (JCP) (Fev 2002) no JSR 901 e acréscimo da palavra-chave assert Acréscimo da palavra-chave strictfp para garantir a Java 1.2 portabilidade em cálculos com ponto flutuante (Dez 1998) Java 1.1 Suporte a classes internas (classes aninhadas) (Fev 1997) Linguagem de programação orientada a objetos projetada Java 1.0 para ter o mínimo de dependência de implementação (Jan 1996) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 6
  • 7.
    Edição SP 2010 PlataformaJava x Plataforma .NET A evolução da linguagem Java Modularidade (pacotes e superpacotes), projeto Lambda (tipos funções e expressões Lambda), extensão da sintaxe de anotações, Java 8 expressões literais para listas, conjuntos e (Final de 2012) mapas, acesso com sintaxe de índices para listas e mapas Suporte a linguagens tipadas dinamicamente, strings Java 7 em switch, try-with-resources, inferência melhorada (Meio de 2011) na criação de instâncias genéricas (“diamond”), invocação simplificada com varargs, literais binários e sublinhado para literais inteiros, multi-catch © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 7
  • 8.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: A linguagem  Linguagem Java  Linguagem de programação orientada a objetos de propósito geral, especificamente projetada para ter um mínimo de dependência de implementações  Relacionada com C e C++, mas organizada de modo diferente  Uma quantidade de características de C e C++ foram omitidas e ideias de outras linguagens incluídas  “Olá, mundo!” em Java public class OlaMundo { public static void main(String[] args) { System.out.println("Olá, mundo!"); } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 8
  • 9.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Tipos primitivos e por referência  Os tipos da linguagem Java são divididos em duas categorias  Tipos primitivos  Tipo booleano boolean  Tipos inteiros byte, short, int, long, char  Tipos de ponto flutuante float, double  Tipos por referência  Tipos classes class Pessoa { ... }  Tipos interfaces interface Lista { ... }  Tipos arrays int[] primos = { 2, 3, 5, 7, 11 } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 9
  • 10.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Arrays  O que é um array?  É uma estrutura de dados que contém um número fixo de variáveis chamadas de elementos do array  Os elementos do array são acessados por índices iniciados em zero  Tipos de arrays  Unidimensionais int[] arr = new int[5];  Multidimensionais  Irregulares int[][] j2; int[][][] j3; © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 10
  • 11.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Gerenciamento de memória  Gerenciamento manual de memória  Requer que o desenvolvedor gerencie a alocação e liberação de blocos de memória  Tarefa repetitiva e sujeita a erros  Gerenciamento automático de memória  Usado pelo Java para livrar os desenvolvedores da tarefa cansativa de gerenciar a memória  O serviço da JVM (Java Virtual Machine) responsável pela liberação da memória usada por objetos é denominado coletor de lixo (garbage collector)  Um objeto se torna elegível a ser coletado pelo coletor de lixo quando não há a possibilidade de nenhum código acessá-lo © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 11
  • 12.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Classes e seus membros  Classes  Membros de classes  Definem novos tipos por  Classes podem ter os referência seguintes tipos de  Uma classe pode herdar membros de outra classe  Campos  Herança simples (de uma  Métodos única classe)  Construtores  Uma classe pode  Inicializadores de instância e estáticos implementar múltiplas  Classes e interfaces interfaces aninhadas © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 12
  • 13.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Acessibilidade de membros  Acessibilidade de membros de classes  Cada membro tem uma acessibilidade associada  Controla as regiões de texto de programa que estão habilitadas a acessar o membro Modificador de Acessibilidade acesso public Acesso ilimitado Acesso limitado à classe contêiner, a protected classes derivadas ou classes num mesmo pacote “sem modificador” Acesso limitado à classe contêiner ou (acesso padrão) a classes no mesmo pacote private Acesso limitado à classe contêiner © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 13
  • 14.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Exemplo de membros  Classe com cada um dos tipos de membros class Classe { private int campo; private static int campoEstatico = 34; public void metodoSemParametroNemRetorno() { } public String metodoComParametroComRetorno(double d) { ... } public Classe() { } public Classe(int valor) { } { /* Inicializador de instância 1 */ } { /* Inicializador de instância 2 */ } static { /* Inicializador estático 1 */ } static { /* Inicializador estático 2 */ } class ClasseAninhada { } interface InterfaceAninhada { } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 14
  • 15.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Interfaces  Conceito de interface  Uma interface define um contrato  Classes podem implementar múltiplas interfaces  Características de uma interface  Interfaces podem ter os seguintes membros  Campos estáticos constantes (finais) e métodos  Exemplo da declaração de uma interface interface Interface { int CONSTANTE1 = 10; int CONSTANTE2 = 20; void metodo(int valor); String metodo2(); } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 15
  • 16.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.0: Herança e polimorfismo  Classes abstratas  Classes definidas para serem classes bases de outras classes abstract class ClasseAbstrata { ... }  Métodos finais (palavra-chave final)  Um método pode ser declarado como final para prevenir que ele seja sobrescrito ou ocultado em subclasses  Em Java, métodos são polimórficos por padrão class Classe { void metodoPolimorfico() { ... } final void metodoNãoPolimorfico() { ... } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 16
  • 17.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.1: Classes aninhadas  Conceito de classes aninhadas  Uma classe definida inteiramente dentro do corpo de uma outra classe class ClasseExterna { ... class ClasseAninhada { ... } }  Categorias das classes aninhadas  Estáticas  Não estáticas, também chamadas de classes internas  Têm acesso aos membros da classe contêiner, mesmo os privados class ClasseExterna { ... static class ClasseAninhadaEstatica { ... } class ClasseInterna { ... } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 17
  • 18.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.2: Palavra-chave strictfp  Expressões estritas de ponto flutuante (FP-strict)  Define restrições em cálculos com ponto flutuante para garantir portabilidade (dados dos tipos float ou double)  Todas as expressões devem usar aritmética IEEE 754 nos operandos representados usando os formatos de precisão simples (float) ou precisão dupla (double)  Uso da palavra-chave strictfp  Pode ser usado para modificar o comportamento de expressões de ponto flutuante em classes, interfaces ou métodos © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 18
  • 19.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 1.4: Palavra-chave assert  Assertivas (ou afirmações) em Java  Uma assertiva é uma instrução que permite testar uma suposição sobre o programa  Cada assertiva contém uma expressão booleana que deve ser verdadeira quando a assertiva for executada  Se ela não for verdadeira, o erro AssertionError será lançado  Vantagens das assertivas  Uma maneira rápida para detectar e corrigir bugs  Documenta o funcionamento interno do programa  Sintaxe assert expressaoBooleana; assert expressaoBooleana : expressaoInfoErro; © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 19
  • 20.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 5.0: Generics  Conceito de Generics  Generics correspondem a um recurso de abstração dos tipos de dados através do uso de tipos parametrizados  Uso mais comum  O uso mais comum de Generics é nos tipos de contêiner, como nos presentes no framework de coleções  Exemplo  A declaração de um tipo genérico usa um tipo parametrizado delimitado por < e > após o nome do tipo public interface Iterator<E> { boolean hasNext(); E next(); void remove(); } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 20
  • 21.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 5.0: Laço for avançado  Conceito  O laço for avançado foi projetado para iteração em coleções e arrays  Diferença para o laço for tradicional  O laço for tradicional exige a codificação do controle de iteração  Exemplo public static double media(double[] valores) { double soma = 0.0; for (double valor : valores) { soma += valor; } return soma / valores.length; } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 21
  • 22.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 5.0: Autoboxing/unboxing  Conceito de autoboxing  Processo de conversão automática de um tipo primitivo para uma instância da classe Wrapper correspondente  Conceito de unboxing  Processo de conversão automática de uma instância da classe Wrapper para o tipo primitivo correspondente  Aplicação importante  Os processos de autoboxing e unboxing facilitam muito o uso de coleções com elementos de tipos primitivos  Exemplo Integer fator1 = 15; // Autoboxing int fator2 = 10; int produto = fator1 * fator2; // Unboxing © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 22
  • 23.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 5.0: Motivação para enumerações  Práticas comuns antes do suporte a enumerações  Constant interface pattern (pacote javax.swing) public interface SwingConstants { public static final int BOTTOM = 3; public static final int CENTER = 0; ... }  int enum pattern (pacote javax.microedition.lcdui) public class Command { public static final int SCREEN = 1; public static final int BACK = 2; public static final int CANCEL = 3; ... }  Typesafe enum pattern  Melhor prática, mas muito trabalhoso para implementar © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 23
  • 24.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 5.0: Enumerações  Conceito  São tipos em que os campos consistem de um conjunto fixo de constantes  Exemplo public enum FormaPagamento { DINHEIRO(1, "Dinheiro"), CHEQUE(2, "Cheque"), CARTAO_CREDITO(3, "Cartão de Crédito"); private final int codigo; private final String descricao; FormaPagamento(int codigo, String descricao) { this.codigo = codigo; this.descricao = descricao; } public int getCodigo() { return codigo; } public String getDescricao() { return descricao; } public String toString() { return getDescricao(); } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 24
  • 25.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 5.0: Varargs  Conceito  Recurso para suportar um número de argumentos variável (varargs) em métodos  Sintaxe  Uma elipse(...) identifica um número variável de argumentos do tipo declarado  Observação  O argumento variável necessariamente deve ser o último na lista de parâmetros do método  Exemplo public static double media(double ... valores) { double soma = 0.0; for (double valor : valores) { soma += valor; } return soma / valores.length; } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 25
  • 26.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 5.0: Anotações (metadados)  Conceito  Anotações são modificadores que podem ser adicionados ao código e aplicados a pacotes, declarações de tipos (classes, interfaces, enumerações, etc), construtores, métodos, campos e parâmetros  Sintaxe  Uma anotação é precedida por um símbolo de arroba (@) seguida pelo nome da anotação  Exemplo public class Ponto { ... @Override public String toString() {...} } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 26
  • 27.
    Edição SP 2010 PlataformaJava x Plataforma .NET OpenJDK  O que é o OpenJDK?  Local de colaboração numa implementação open source:  da especificação Java Platform, Standard Edition (Java SE),  da linguagem Java,  do Java Development Kit (JDK) e  do Java Runtime Environment (JRE)  Implementação de referência da Java SE  Endereço do OpenJDK no portal Java.net  http://openjdk.java.net/  Mark Reinhold - Twitter: @mreinhold  Arquiteto na Oracle responsável pela plataforma Java SE, pelo Open JDK, entre outras coisas © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 27
  • 28.
    Edição SP 2010 PlataformaJava x Plataforma .NET Repensando o JDK 7  Blog do Mark Reinhold - Re-thinking JDK 7  http://blogs.sun.com/mr/entry/rethinking_jdk7  Publicado em 08/09/2010 09:21  Objetivos  Justificar o atraso no cronograma do JDK 7 devido ao processo de integração após a aquisição da Sun pela Oracle  Propor dois planos de ação para implementação de novos recursos no JDK para a comunidade Plano A JDK 7 (como já estava definido) Meio de 2012 JDK 7 (menos Lambda, Jigsaw, e parte do Coin) Meio de 2011 Plano B JDK 8 (Lambda, Jigsaw, o resto do Coin e Final de 2012 outras coisas)  Houve 175 comentários da comunidade no post © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 28
  • 29.
    Edição SP 2010 PlataformaJava x Plataforma .NET Escolha do plano B  Blog do Mark Reinhold - It’s time for … Plan B  http://blogs.sun.com/mr/entry/plan_b  Publicado em 20/09/2010 16:42  Decisão pelo plano B  O retorno nos comentários foram mais fortemente favoráveis ao plano B  Então, a Oracle decidiu por adotar o plano B para o JDK 7 e o JDK 8 JDK 7 (menos Lambda, Jigsaw, e parte do Coin) Meio de 2011 Plano B JDK 8 (Lambda, Jigsaw, o resto do Coin e Final de 2012 outras coisas) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 29
  • 30.
    Edição SP 2010 PlataformaJava x Plataforma .NET Detalhes do plano B  Blog do Mark Reinhold - Plan B: The details  http://blogs.sun.com/mr/entry/plan_b_details  Publicado em 10/10/2010 22:08  O plano B foi aceito por um Comitê Executivo do JCP  Seguem os itens relacionados com a linguagem Java  Java SE 7  JSR 292: Support for dynamically-typed languages (InvokeDynamic)  JSR TBD: Small language enhancements (Project Coin)  Java SE 8  JSR 294: Language and VM support for modular programming  JSR TBD: Lambda Expressions, Default Methods, & Bulk Data Operations (Project Lambda)  JSR 308: Annotations on Java Types  JSR TBD: More Small Language Enhancements (Project Coin part 2) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 30
  • 31.
    Edição SP 2010 PlataformaJava x Plataforma .NET IBM se junta ao OpenJDK  Anúncio oficial da Oracle  Oracle and IBM Collaborate to Accelerate Java Innovation Through OpenJDK  http://www.oracle.com/us/corporate/press/176988  Qual é a importância desta parceria?  Engenheiros da IBM e da Oracle trabalharão com outros colaboradores na implementação de referência da Java SE  Blog do Mark Reinhold - IBM to join OpenJDK  http://blogs.sun.com/mr/entry/ibm_to_join_openjdk  Publicado em 11/10/2010 12:01  Blog do Dalibor Topic - OpenJDK.Community += IBM  http://robilad.livejournal.com/63940.html  Publicado em 11/10/2010 18:11 © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 31
  • 32.
    Edição SP 2010 PlataformaJava x Plataforma .NET Diálogo pelo Twitter com Dalibor Topic  Relativo ao post OpenJDK.Community += IBM  @robilad  OpenJDK.Community += IBM: http://robilad.livejournal.com/63940.html  @rogeriomc  Are you announcing in C#? RT @robilad: OpenJDK.Community += IBM: http://bit.ly/cp2KdE  @rogeriomc  In Java must be: openJDK.setCommunity(openJDK.getCommunity() + IBM) RT @robilad: OpenJDK.Community += IBM: http://bit.ly/cp2KdE  @rogeriomc  Or are you exposing a public field in Java? ;-) Bad OOP practice! RT @robilad: OpenJDK.Community += IBM: http://bit.ly/cp2KdE  @robilad  @rogeriomc Nah, just thinking ahead and wishing for properties in 9 after watching @mreinhold's JavaOne keynote. ;) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 32
  • 33.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 7: JSR 292 - Linguagens dinâmicas  JSR 292: Support for dynamically-typed languages (InvokeDynamic)  Extensões da máquina virtual e da linguagem para suportar a implementação de linguagens com tipagem dinâmica com níveis de desempenho próximos da linguagem Java  Maiores informações no JCP  http://jcp.org/en/jsr/detail?id=292  Exemplo de código class MyCaller { Object myMethod(Object x, Object y, int z) { // x.invokedynamic["alpha",(Object,int)Object] (y, z) return ((Dynamic)x).alpha(y, z); } } © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 33
  • 34.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 7: JSR TBD - Project Coin (part 1)  JSR TBD: Small language enhancements (Project Coin)  Um conjunto de pequenas modificações para facilitar as tarefas diarias  Strings em instruções switch  try-with-resources (anteriormente chamado de Automatic Resource Management, ARM)  Inferência de tipos melhorada na criação de instâncias genéricas (“diamond”)  Invocação simplificada de um método com varargs  Literais binarias e sublinhados em literais inteiros  Manipulação de exceções melhorada (multi-catch)  Maiores informações no OpenJDK no Java.net  http://openjdk.java.net/projects/coin/ © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 34
  • 35.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 8: JSR 294 - Mudularidade  JSR 294: Improved Modularity Support in the Java Programming Language  Melhorias nas especificações da linguagem Java e da máquina virtual para suportar programação modular  Tanto em tempo de compilação quanto em tempo de execução  Pacotes e superpacotes  Cada superpacote é uma coleção de um ou mais pacotes ou superpacotes  Tipos públicos podem ser acessados de outros tipos em pacotes que estejam agrupados num mesmo superpacote  Tipos em outros superpacotes somente podem acessar tipos exportados  Maiores informações no JCP  http://jcp.org/en/jsr/detail?id=294 © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 35
  • 36.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 8: JSR TBD - Projeto Lambda  JST TBD: Project Lambda  O projeto tem como objetivo formular uma proposta para acrescentar:  Funções de primeira classe  Tipos funções  Expressões lambda (informalmente chamadas de “closures”)  Considerada uma grande mudança na linguagem  Atualmente, o projeto ainda está num estágio bem inicial  Maiores informações no OpenJDK no Java.net  http://openjdk.java.net/projects/lambda/ © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 36
  • 37.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 8: JSR 308 - Anotações  JSR 308: Annotations on Java types  Uma extensão à sintaxe de anotação Java para permitir anotações em qualquer ocorrência de um tipo  O que são anotações de tipo?  As anotações em Java 6 são úteis, mas limitadas  A sintaxe de anotações de tipo permitem que anotações sejam escritas em mais lugares, como em argumentos de tipos genéricos List<@NonNull Object>  Mais informações  No Java Community Process (JCP)  http://jcp.org/en/jsr/detail?id=308  Type Annotations (JSR 308) and the Checker Framework  http://types.cs.washington.edu/jsr308/ (mais atualizadas) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 37
  • 38.
    Edição SP 2010 PlataformaJava x Plataforma .NET Java 8: JSR TBD - Project Coin (part 2)  JSR TBD: Language support for collections  Expressões literais para listas, conjuntos e mapas  Acesso com sintaxe de índices para listas e mapas: [ ]  Outra possibilidade em análise  Strings de múltiplas linhas  Atualmente, esta parte ainda está num estágio bem inicial  Mais informações no OpenJDK no Java.net  http://openjdk.java.net/projects/coin/ © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 38
  • 39.
    Edição SP 2010 PlataformaJava x Plataforma .NET Demonstração  Preparação de um ambiente para testar as novidades dos builds mais recentes do JDK 7  Java Platform, Standard Edition 7 Binary Snapshot Releases  http://dlc.sun.com.edgesuite.net/jdk7/binaries/  Build b114 da demonstração (build liberado em 14/10/2010)  NetBeans 6.9.1  http://netbeans.org/downloads/  Características do JDK 7 suportadas no editor do NetBeans 6.9  http://wiki.netbeans.org/Java_EditorJDK7  Demonstração de algumas das novidades do Project Coin (part 1) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 39
  • 40.
    Edição SP 2010 PlataformaJava x Plataforma .NET Conclusão A linguagem Java  Evolução conservadora até a versão 6  Java 1.0 em janeiro de 1996 (JRE 1.0)  Java 1.1 em fevereiro de 1997 (JRE 1.1)  Suporte a classes aninhadas  Java 1.2 em dezembro de 1998 (JRE 1.2)  Suporte a restrições em operações com ponto flutuante (strictfp)  Java 1.4 em fevereiro de 2002 (JRE 1.4)  Suporte a assertivas (assert)  Java 5.0  Suporte a generics, anotações, autoboxing/unboxing, enumerações, varargs, laço for avançado e static import  Evolução rápida anunciada para as versões 7 e 8  Java 7 no meio de 2011  Suporte a linguagens dinâmicas e projeto Coin (parte 1)  Java 8 no final de 2012  Modularidade, projeto Lambda, ext. de anotações e projeto Coin (parte 2) © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 40
  • 41.
    Edição SP 2010 PlataformaJava x Plataforma .NET Referências  The Java Language Specification  http://java.sun.com/docs/books/jls/  Atualmente, está na sua terceira edição (gratuita)  The Java Tutorials  Java SE  http://download.oracle.com/javase/tutorial/  Trail: Learning the Java Language  http://download.oracle.com/javase/tutorial/java/  Livro Effective Java (2nd Edition)  O autorJoshua Bloch fornece uma visão em profundidade da linguagem Java  Amazon.com  http://www.amazon.com/dp/0321356683/ © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 41
  • 42.
    Edição SP 2010 PlataformaJava x Plataforma .NET Referências  Re-thinking JDK 7 (Mark Reinhold’s Blog)  http://blogs.sun.com/mr/entry/rethinking_jdk7  It’s time for … Plan B (Mark Reinhold’s Blog)  http://blogs.sun.com/mr/entry/plan_b  Plan B: The details (Mark Reinhold’s Blog)  http://blogs.sun.com/mr/entry/plan_b_details  IBM to join OpenJDK (Mark Reinhold’s Blog)  http://blogs.sun.com/mr/entry/ibm_to_join_openjdk  OpenJDK.Community += IBM (Dalibor Topic)  http://robilad.livejournal.com/63940.html © 2010 JavaVersusDotNet.com.br, Rogério Moraes de Carvalho (MVP da Microsoft) 42