Introdução ao Java 1.5 Maurício Linhares
Java 5 ou Java 1.5? <ul><li>5 é o número oficial, 1.5.0 é o número interno da versão da implementação da Sun; </li></ul><u...
O Java 5 ainda é novidade?
Ainda... <ul><li>Pouca gente conhece e utiliza as novidades; </li></ul><ul><li>Poucas bibliotecas e frameworks foram atual...
Por que se preocupar com isso?
Por causa das mudanças! <ul><li>A maior alteração do Java desde o 1.0; </li></ul><ul><li>Muitas mudanças na linguagem (Gen...
Como era o Swing
Novo Swing!
Swing no Windows XP
Swing no KDE (Linux)
Monitoramento da JVM no Java 5 <ul><li>A JVM do Java 5 vem com o “jconsole”, uma aplicação de gerenciamento de aplicações;...
jconsole em ação
Vantagens? <ul><li>Centralização das informações sobre a “ saúde ” das aplicações; </li></ul><ul><li>Console genérico que ...
Performance <ul><li>A JVM 5 é ainda mais rápida do que a sua antecessora; </li></ul><ul><li>Novas heurísticas de melhora d...
Escolhendo uma configuração da JVM <ul><li>Client </li></ul><ul><ul><li>Aplicações que executam por pouco tempo; </li></ul...
Escolhendo uma configuração da JVM <ul><li>Server </li></ul><ul><ul><li>Indicado para aplicações que executam por muito te...
Como escolher? <ul><li>java –client </li></ul><ul><li>java -server </li></ul>
Mas cadê o código?
Novidades da linguagem Java <ul><li>Tipos genéricos ( palestra de Fred! ); </li></ul><ul><li>For Each; </li></ul><ul><li>E...
For-each <ul><li>String[] nomes =  { “Java&quot;, “C#&quot; }; </li></ul><ul><li>for (String nome : nomes) { </li></ul><ul...
For-Each com coleções <ul><li>List<String> bandas =  </li></ul><ul><li>new ArrayList<String>(); </li></ul><ul><li>strings....
Porque usar o “for” avançado? <ul><li>Simplifica o acesso a objetos que estejam dentro de coleções; </li></ul><ul><li>Dimi...
O que acontece de verdade? <ul><li>O for-each é transformado em um for comum, assim como o que nós teríamos esquecido; </l...
Possível tradução do for
For avançado traduzido com array <ul><li>String[] nomes =  { “Érika&quot;, “Fred&quot; }; </li></ul><ul><li>for (int i = 0...
Preste atenção!
Mudanças introduzidas no compilador <ul><li>As mudanças da linguagem Java na versão 5, são, em sua maioria, implementadas ...
Nem tudo são objetos <ul><li>A linguagem Java não é puramente orientada a objetos, pois existe um conjunto de tipos primit...
Entendendo o problema <ul><li>Tipos primitivos não herdam de Object, portanto não é possível se utilizar de polimorfismo n...
Oferecendo uma solução <ul><li>Criar tipos  “empacotadores”  para os tipos primitivos; </li></ul><ul><li>Cada tipo primiti...
Tipos empacotadores <ul><li>Integer; </li></ul><ul><li>Long; </li></ul><ul><li>Double; </li></ul><ul><li>Float; </li></ul>...
Ainda existem problemas? <ul><li>Não é possível fazer operações em tipos “empacotadores”, os operadores aritméticos não fu...
Utilizando tipos empacotadores <ul><li>List lista = new ArrayList(); </li></ul><ul><li>Lista.add( new Integer(100)); </li>...
Alguém tem que simplificar isso <ul><li>Mas como? </li></ul><ul><li>Com autoboxing ( auto-empacotamento ) e autounboxing (...
Autoboxing – empacotamento <ul><li>Transforma tipos primitivos automaticamente em tipos “empacotadores”, sem que o program...
Exemplo <ul><li>List lista = new ArrayList(); </li></ul><ul><li>Lista.add( 100 ); </li></ul>
Autounboxing - desempacotando <ul><li>Transforma os tipos empacotadores em tipos primitivos quando isso for necessário, co...
Exemplo <ul><li>Integer primeiro = 500; </li></ul><ul><li>Integer segundo = 200; </li></ul><ul><li>System.out.printf </li>...
Como está acontecendo? <ul><li>Quando ele faz o autoboxing, cria um objeto empacotador e passa o tipo primitivo para ele, ...
O que são enumerações? <ul><li>São uma classe especial onde todos os seus possíveis valores são conhecidos quando o tipo é...
Declarando uma enumeração <ul><li>public|protected|private  </li></ul><ul><li>enum Nome  </li></ul><ul><li>{ } </li></ul>
Exemplo de enumeração <ul><li>public enum Naipe { </li></ul><ul><li>PAUS, </li></ul><ul><li>OUROS, </li></ul><ul><li>COPAS...
Utilizando enumerações <ul><li>Naipe naipe = Naipe.ESPADA; </li></ul><ul><li>if (naipe == Naipe.ESPADA ) { </li></ul><ul><...
Switch com enumerações <ul><li>public static void  switchComNaipes (Naipe naipe) { </li></ul><ul><li>switch (naipe) { </li...
Static imports vem ao resgate <ul><li>Importa classes, variáveis e enumerações estáticas para a sua classe, acabando com a...
Sintaxe <ul><li>static import  nome.do.campo.Static </li></ul>
Exemplo <ul><li>//imports </li></ul><ul><li>import static java.lang.System.err; </li></ul><ul><li>import static java.lang....
Usando curingas <ul><li>Os curingas (*) podem ser utilizados para importar conjuntos inteiros de métodos e campos estático...
Exemplo <ul><li>//import </li></ul><ul><li>import static java.lang.Math.*; </li></ul><ul><li>//uso </li></ul><ul><li>out.p...
Problemas <ul><li>Importar muitos campos como os da classe Math deixam o código confuso, pois não é fácil identificar os m...
Documentando um arquivo .java <ul><li>/** </li></ul><ul><li>* Created:  10 </li></ul><ul><li>* Created By: Maurício </li><...
Refazendo com uma anotação <ul><li>public  @interface  ClassInfo { </li></ul><ul><li>String criadaEm(); </li></ul><ul><li>...
O que são anotações <ul><li>São um tipo especial de interface, definidos usando a palavra reservada interface precedida de...
Propriedades válidas em uma anotação <ul><li>Tipos primitivos, Strings, outra anotação, um Class<T> ou um array de quaisqu...
Utilizando a anotação criada <ul><li>@ClassInfo( </li></ul><ul><li>criadaEm = &quot;10&quot;, </li></ul><ul><li>criadaPor=...
Elementos que recebem anotações <ul><li>Declarações de tipo, declarações de campos, métodos e construtores podem ser anota...
Exemplo do uso de uma anotação em um método <ul><li>@Deprecated </li></ul><ul><li>public void metodoAntigo() {} </li></ul>...
Anotações comuns do Java 1.5 <ul><li>@Deprecated; </li></ul><ul><li>@Documented; </li></ul><ul><li>@Inherited; </li></ul><...
E o próximo Java? <ul><li>Mais melhoras na performance (não vão mais existir os compiladores “Client” e “Server”); </li></...
E o próximo Java? <ul><li>Suporte a linguagens de Script </li></ul><ul><ul><li>JavaScript (automático) </li></ul></ul><ul>...
Então...
Próximos SlideShares
Carregando em…5
×

Introdução ao Java 5

1.470 visualizações

Publicada em

Apresentação sobre as novas funcionalidades do Java 5.

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.470
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
29
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Introdução ao Java 5

  1. 1. Introdução ao Java 1.5 Maurício Linhares
  2. 2. Java 5 ou Java 1.5? <ul><li>5 é o número oficial, 1.5.0 é o número interno da versão da implementação da Sun; </li></ul><ul><li>J2SE, J2EE e J2ME foram substituídos por Java SE, Java EE e Java ME; </li></ul><ul><li>Decisão do “ departamento de Marketing ” da Sun; </li></ul>
  3. 3. O Java 5 ainda é novidade?
  4. 4. Ainda... <ul><li>Pouca gente conhece e utiliza as novidades; </li></ul><ul><li>Poucas bibliotecas e frameworks foram atualizados; </li></ul><ul><li>Muita gente depende de servidores de aplicação pagos, que não foram atualizados ( $$$ ); </li></ul>
  5. 5. Por que se preocupar com isso?
  6. 6. Por causa das mudanças! <ul><li>A maior alteração do Java desde o 1.0; </li></ul><ul><li>Muitas mudanças na linguagem (Genéricos, Anotações, Enums); </li></ul><ul><li>Muitas mudanças na JVM (Gerenciamento, Performance); </li></ul><ul><li>Melhoras na interface gráfica; </li></ul>
  7. 7. Como era o Swing
  8. 8. Novo Swing!
  9. 9. Swing no Windows XP
  10. 10. Swing no KDE (Linux)
  11. 11. Monitoramento da JVM no Java 5 <ul><li>A JVM do Java 5 vem com o “jconsole”, uma aplicação de gerenciamento de aplicações; </li></ul><ul><li>Ele monitora todo o funcionamento da JVM a qual ele se conectar; </li></ul><ul><li>Ele se conecta a qualquer aplicação Java na máquina ou a aplicações remotas, via sockets; </li></ul>
  12. 12. jconsole em ação
  13. 13. Vantagens? <ul><li>Centralização das informações sobre a “ saúde ” das aplicações; </li></ul><ul><li>Console genérico que pode acessar objetos expostos via JMX pela aplicação que está rodando na JVM; </li></ul><ul><li>Vem automaticamente em qualquer instalação do JDK; </li></ul>
  14. 14. Performance <ul><li>A JVM 5 é ainda mais rápida do que a sua antecessora; </li></ul><ul><li>Novas heurísticas de melhora de desempenho foram adicionadas (como coletores de lixo assíncronos); </li></ul><ul><li>Melhorias nos compiladores “Client” e “Server”; </li></ul>
  15. 15. Escolhendo uma configuração da JVM <ul><li>Client </li></ul><ul><ul><li>Aplicações que executam por pouco tempo; </li></ul></ul><ul><ul><li>Aplicações que precisam de uma carga rápida na memória; </li></ul></ul><ul><ul><li>Mais indicado para aplicações com interfaces gráficas simples; </li></ul></ul><ul><ul><li>Ocupa menos memória, mas é mais lenta; </li></ul></ul>
  16. 16. Escolhendo uma configuração da JVM <ul><li>Server </li></ul><ul><ul><li>Indicado para aplicações que executam por muito tempo; </li></ul></ul><ul><ul><li>Ocupa muito mais memória do que a versão Client (lembre-se de aumentar o heap se necessário); </li></ul></ul><ul><ul><li>Mais lenta para carregar inicialmente, mas mais rápida no longo prazo se comparada a client; </li></ul></ul>
  17. 17. Como escolher? <ul><li>java –client </li></ul><ul><li>java -server </li></ul>
  18. 18. Mas cadê o código?
  19. 19. Novidades da linguagem Java <ul><li>Tipos genéricos ( palestra de Fred! ); </li></ul><ul><li>For Each; </li></ul><ul><li>Enumerações; </li></ul><ul><li>Argumentos de tamanho variável; </li></ul><ul><li>Anotações (Annotations); </li></ul><ul><li>Programação concorrente ( palestra de Érika! ) </li></ul><ul><li>Autoboxing – Autounboxing </li></ul><ul><li>E ainda mais algumas coisas... </li></ul>
  20. 20. For-each <ul><li>String[] nomes = { “Java&quot;, “C#&quot; }; </li></ul><ul><li>for (String nome : nomes) { </li></ul><ul><li>System.out.println(&quot;Nome: “+ nome); </li></ul><ul><li>} </li></ul>
  21. 21. For-Each com coleções <ul><li>List<String> bandas = </li></ul><ul><li>new ArrayList<String>(); </li></ul><ul><li>strings.add(“Lordi”); </li></ul><ul><li>strings.add(“Iron Maiden”); </li></ul><ul><li>for (String banda : bandas) { </li></ul><ul><li>System.out.println(&quot;Nome: “+ nome); </li></ul><ul><li>} </li></ul>
  22. 22. Porque usar o “for” avançado? <ul><li>Simplifica o acesso a objetos que estejam dentro de coleções; </li></ul><ul><li>Diminui a quantidade de código necessária para se trafegar em uma coleção; </li></ul><ul><li>Não é necessário manter “contadores” ; </li></ul>
  23. 23. O que acontece de verdade? <ul><li>O for-each é transformado em um for comum, assim como o que nós teríamos esquecido; </li></ul><ul><li>Ele transforma em um for para os for-eachs com arrays e em outro for para os for-eachs usando coleções; </li></ul>
  24. 24. Possível tradução do for
  25. 25. For avançado traduzido com array <ul><li>String[] nomes = { “Érika&quot;, “Fred&quot; }; </li></ul><ul><li>for (int i = 0; i < nomes.length; i++) { </li></ul><ul><li>out.println(&quot;Nome: “ + nomes[i]); </li></ul><ul><li>} </li></ul>
  26. 26. Preste atenção!
  27. 27. Mudanças introduzidas no compilador <ul><li>As mudanças da linguagem Java na versão 5, são, em sua maioria, implementadas pelo próprio compilador, para manter a compatibilidade com versões anteriores </li></ul>
  28. 28. Nem tudo são objetos <ul><li>A linguagem Java não é puramente orientada a objetos, pois existe um conjunto de tipos primitivos que formam a base da linguagem: </li></ul><ul><li>int, long, float, double, byte e char </li></ul>
  29. 29. Entendendo o problema <ul><li>Tipos primitivos não herdam de Object, portanto não é possível se utilizar de polimorfismo nem herança; </li></ul><ul><li>Tipos primitivos são sempre passados por valor e nunca por referência; </li></ul><ul><li>Não podem ser adicionados as coleções comuns do Java; </li></ul>
  30. 30. Oferecendo uma solução <ul><li>Criar tipos “empacotadores” para os tipos primitivos; </li></ul><ul><li>Cada tipo primitivo tem o seu próprio objeto empacotador que vai guardar o valor primitivo; </li></ul><ul><li>Podem ser adicionados normalmente a coleções e também podem ser utilizados em casos de polimorfismo; </li></ul>
  31. 31. Tipos empacotadores <ul><li>Integer; </li></ul><ul><li>Long; </li></ul><ul><li>Double; </li></ul><ul><li>Float; </li></ul><ul><li>Character; </li></ul><ul><li>Byte; </li></ul>
  32. 32. Ainda existem problemas? <ul><li>Não é possível fazer operações em tipos “empacotadores”, os operadores aritméticos não funcionam; </li></ul><ul><li>Os tipos primitivos tem que ser passados como parâmetros nos construtores dos tipos empacotadores; </li></ul>
  33. 33. Utilizando tipos empacotadores <ul><li>List lista = new ArrayList(); </li></ul><ul><li>Lista.add( new Integer(100)); </li></ul>
  34. 34. Alguém tem que simplificar isso <ul><li>Mas como? </li></ul><ul><li>Com autoboxing ( auto-empacotamento ) e autounboxing ( auto-desempacotamento ) de tipos. </li></ul>
  35. 35. Autoboxing – empacotamento <ul><li>Transforma tipos primitivos automaticamente em tipos “empacotadores”, sem que o programador tenha que se preocupar com isso, sempre que uma transformação for necessária. </li></ul>
  36. 36. Exemplo <ul><li>List lista = new ArrayList(); </li></ul><ul><li>Lista.add( 100 ); </li></ul>
  37. 37. Autounboxing - desempacotando <ul><li>Transforma os tipos empacotadores em tipos primitivos quando isso for necessário, como na avaliação de expressões aritméticas, condições e avaliações lógicas. </li></ul>
  38. 38. Exemplo <ul><li>Integer primeiro = 500; </li></ul><ul><li>Integer segundo = 200; </li></ul><ul><li>System.out.printf </li></ul><ul><li>(&quot;O valor do número é %d&quot;, </li></ul><ul><li>primeiro + segundo); </li></ul>
  39. 39. Como está acontecendo? <ul><li>Quando ele faz o autoboxing, cria um objeto empacotador e passa o tipo primitivo para ele, quando ele faz o autounboxing ele retira o tipo primitivo do tipo empacotador. </li></ul><ul><li>Esse tipo de transformação cria novos objetos e deve ser utilizada com parcimônia em cenários onde a performance é importante. </li></ul>
  40. 40. O que são enumerações? <ul><li>São uma classe especial onde todos os seus possíveis valores são conhecidos quando o tipo é definido, formando um conjunto. </li></ul><ul><li>O conjunto de naipes de um baralho é um tipo que representa uma enumeração: </li></ul><ul><li>{ Copas, Paus, Espada e Ouro } </li></ul>
  41. 41. Declarando uma enumeração <ul><li>public|protected|private </li></ul><ul><li>enum Nome </li></ul><ul><li>{ } </li></ul>
  42. 42. Exemplo de enumeração <ul><li>public enum Naipe { </li></ul><ul><li>PAUS, </li></ul><ul><li>OUROS, </li></ul><ul><li>COPAS, </li></ul><ul><li>ESPADAS </li></ul><ul><li>} </li></ul>
  43. 43. Utilizando enumerações <ul><li>Naipe naipe = Naipe.ESPADA; </li></ul><ul><li>if (naipe == Naipe.ESPADA ) { </li></ul><ul><li>System.out.println </li></ul><ul><li>(&quot;O naipe recebido foi ESPADA&quot;); </li></ul><ul><li>} </li></ul>
  44. 44. Switch com enumerações <ul><li>public static void switchComNaipes (Naipe naipe) { </li></ul><ul><li>switch (naipe) { </li></ul><ul><li>case ESPADA : </li></ul><ul><li>out.println(&quot;O valor recebido foi: ESPADA&quot;); </li></ul><ul><li>break; </li></ul><ul><li>case COPAS : </li></ul><ul><li>out.println(&quot;O valor recebido foi: COPAS&quot;); </li></ul><ul><li>break; </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  45. 45. Static imports vem ao resgate <ul><li>Importa classes, variáveis e enumerações estáticas para a sua classe, acabando com a necessidade de se digitar todos aqueles caminhos outra vez. </li></ul>
  46. 46. Sintaxe <ul><li>static import nome.do.campo.Static </li></ul>
  47. 47. Exemplo <ul><li>//imports </li></ul><ul><li>import static java.lang.System.err; </li></ul><ul><li>import static java.lang.System.out; </li></ul><ul><li>//uso </li></ul><ul><li>out.println(“Alô?” ); </li></ul><ul><li>System.out.println(“Alô?”); </li></ul>
  48. 48. Usando curingas <ul><li>Os curingas (*) podem ser utilizados para importar conjuntos inteiros de métodos e campos estáticos em uma classe. </li></ul>
  49. 49. Exemplo <ul><li>//import </li></ul><ul><li>import static java.lang.Math.*; </li></ul><ul><li>//uso </li></ul><ul><li>out.println(&quot;O resultado é “ + </li></ul><ul><li>( random () + abs (15.21) ) </li></ul><ul><li>); </li></ul>
  50. 50. Problemas <ul><li>Importar muitos campos como os da classe Math deixam o código confuso, pois não é fácil identificar os métodos que pertencem a classe. </li></ul>
  51. 51. Documentando um arquivo .java <ul><li>/** </li></ul><ul><li>* Created: 10 </li></ul><ul><li>* Created By: Maurício </li></ul><ul><li>* Last Modified: 51 </li></ul><ul><li>* Last Modified By: Maurício </li></ul><ul><li>* Revision: 5 </li></ul><ul><li>*/ </li></ul>
  52. 52. Refazendo com uma anotação <ul><li>public @interface ClassInfo { </li></ul><ul><li>String criadaEm(); </li></ul><ul><li>String criadaPor(); </li></ul><ul><li>String ultimaModificacaoEm() default &quot;&quot;; </li></ul><ul><li>String ultimaModificacaoPor() default &quot;&quot; ; </li></ul><ul><li>int revisao() default 1 ; </li></ul><ul><li>} </li></ul>
  53. 53. O que são anotações <ul><li>São um tipo especial de interface, definidos usando a palavra reservada interface precedida de um @ ; </li></ul><ul><li>Uma anotação pode ser declarada em qualquer lugar que uma interface possa ser declarada; </li></ul><ul><li>Anotações devem ser utilizadas para guardar informações sobre o código onde elas são aplicadas; </li></ul>
  54. 54. Propriedades válidas em uma anotação <ul><li>Tipos primitivos, Strings, outra anotação, um Class<T> ou um array de quaisquer destes tipos; </li></ul><ul><li>O elemento não pode declarar parâmetros; </li></ul><ul><li>O elemento não pode ter uma cláusula de lançamento de exceção (“throws”) ; </li></ul><ul><li>O elemento não pode definir parâmetros genéricos; </li></ul>
  55. 55. Utilizando a anotação criada <ul><li>@ClassInfo( </li></ul><ul><li>criadaEm = &quot;10&quot;, </li></ul><ul><li>criadaPor=&quot;Maurício&quot;, </li></ul><ul><li>ultimaModificacaoEm= &quot;14/03&quot;, </li></ul><ul><li>) </li></ul><ul><li>public class Classe {} </li></ul>
  56. 56. Elementos que recebem anotações <ul><li>Declarações de tipo, declarações de campos, métodos e construtores podem ser anotados; </li></ul><ul><li>Para anotar um elemento, basta adicionar a anotação antes dele; </li></ul><ul><li>Um elemento só pode ter uma anotação de cada tipo; </li></ul>
  57. 57. Exemplo do uso de uma anotação em um método <ul><li>@Deprecated </li></ul><ul><li>public void metodoAntigo() {} </li></ul>Quando a anotação não tem campos ou todos os seus campos tem valores “default” não é necessário colocar os parênteses “()” no fim
  58. 58. Anotações comuns do Java 1.5 <ul><li>@Deprecated; </li></ul><ul><li>@Documented; </li></ul><ul><li>@Inherited; </li></ul><ul><li>@Override; </li></ul><ul><li>@SupressWarnings; </li></ul>
  59. 59. E o próximo Java? <ul><li>Mais melhoras na performance (não vão mais existir os compiladores “Client” e “Server”); </li></ul><ul><li>Acesso a “área de notificação” (área do relógio); </li></ul><ul><li>Novas classes para se acessar o compilador do Java diretamente; </li></ul>
  60. 60. E o próximo Java? <ul><li>Suporte a linguagens de Script </li></ul><ul><ul><li>JavaScript (automático) </li></ul></ul><ul><ul><li>BeanShell </li></ul></ul><ul><ul><li>Groovy </li></ul></ul><ul><ul><li>VisualBasic!?!?!?!? </li></ul></ul><ul><li>Acesso a novas primitivas de hardware, como o disco rígido do sistema; </li></ul>
  61. 61. Então...

×