61
Introdução ao Java 1.5 Maurício Linhares

Introdução ao Java 5

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Introdução ao Java 5

Introdução ao Java 1.5

Maurício Linhares

Page 2: Introdução ao Java 5

Java 5 ou Java 1.5?

5 é o número oficial, 1.5.0 é o número interno da versão da implementação da Sun;

J2SE, J2EE e J2ME foram substituídos por Java SE, Java EE e Java ME;

Decisão do “departamento de Marketing” da Sun;

Page 3: Introdução ao Java 5

O Java 5 ainda é novidade?

Page 4: Introdução ao Java 5

Ainda...

Pouca gente conhece e utiliza as novidades;

Poucas bibliotecas e frameworks foram atualizados;

Muita gente depende de servidores de aplicação pagos, que não foram atualizados ($$$);

Page 5: Introdução ao Java 5

Por que se preocupar com isso?

Page 6: Introdução ao Java 5

Por causa das mudanças!

A maior alteração do Java desde o 1.0;

Muitas mudanças na linguagem (Genéricos, Anotações, Enums);

Muitas mudanças na JVM (Gerenciamento, Performance);

Melhoras na interface gráfica;

Page 7: Introdução ao Java 5

Como era o Swing

Page 8: Introdução ao Java 5

Novo Swing!

Page 9: Introdução ao Java 5

Swing no Windows XP

Page 10: Introdução ao Java 5

Swing no KDE (Linux)

Page 11: Introdução ao Java 5

Monitoramento da JVM no Java 5

A JVM do Java 5 vem com o “jconsole”, uma aplicação de gerenciamento de aplicações;

Ele monitora todo o funcionamento da JVM a qual ele se conectar;

Ele se conecta a qualquer aplicação Java na máquina ou a aplicações remotas, via sockets;

Page 12: Introdução ao Java 5

jconsole em ação

Page 13: Introdução ao Java 5

Vantagens?

Centralização das informações sobre a “saúde” das aplicações;

Console genérico que pode acessar objetos expostos via JMX pela aplicação que está rodando na JVM;

Vem automaticamente em qualquer instalação do JDK;

Page 14: Introdução ao Java 5

Performance

A JVM 5 é ainda mais rápida do que a sua antecessora;

Novas heurísticas de melhora de desempenho foram adicionadas (como coletores de lixo assíncronos);

Melhorias nos compiladores “Client” e “Server”;

Page 15: Introdução ao Java 5

Escolhendo uma configuração da JVM

Client Aplicações que executam por pouco

tempo; Aplicações que precisam de uma carga

rápida na memória; Mais indicado para aplicações com

interfaces gráficas simples; Ocupa menos memória, mas é mais

lenta;

Page 16: Introdução ao Java 5

Escolhendo uma configuração da JVM

Server Indicado para aplicações que executam

por muito tempo; Ocupa muito mais memória do que a

versão Client (lembre-se de aumentar o heap se necessário);

Mais lenta para carregar inicialmente, mas mais rápida no longo prazo se comparada a client;

Page 17: Introdução ao Java 5

Como escolher?

java –client

java -server

Page 18: Introdução ao Java 5

Mas cadê o código?

Page 19: Introdução ao Java 5

Novidades da linguagem Java

Tipos genéricos (palestra de Fred!); For Each; Enumerações; Argumentos de tamanho variável; Anotações (Annotations); Programação concorrente (palestra

de Érika!) Autoboxing – Autounboxing E ainda mais algumas coisas...

Page 20: Introdução ao Java 5

For-each

String[] nomes = { “Java", “C#" };

for (String nome : nomes) {System.out.println("Nome: “+ nome);

}

Page 21: Introdução ao Java 5

For-Each com coleções

List<String> bandas = new ArrayList<String>();

strings.add(“Lordi”);strings.add(“Iron Maiden”);

for (String banda : bandas) {System.out.println("Nome: “+ nome);

}

Page 22: Introdução ao Java 5

Porque usar o “for” avançado?

Simplifica o acesso a objetos que estejam dentro de coleções;

Diminui a quantidade de código necessária para se trafegar em uma coleção;

Não é necessário manter “contadores”;

Page 23: Introdução ao Java 5

O que acontece de verdade?

O for-each é transformado em um for comum, assim como o que nós teríamos esquecido;

Ele transforma em um for para os for-eachs com arrays e em outro for para os for-eachs usando coleções;

Page 24: Introdução ao Java 5

Possível tradução do for

Page 25: Introdução ao Java 5

For avançado traduzido com array

String[] nomes = { “Érika", “Fred" };

for (int i = 0; i < nomes.length; i++) {out.println("Nome: “ + nomes[i]);}

Page 26: Introdução ao Java 5

Preste atenção!

Page 27: Introdução ao Java 5

Mudanças introduzidas no compilador

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

Page 28: Introdução ao Java 5

Nem tudo são objetos

A linguagem Java não é puramente orientada a objetos, pois existe um conjunto de tipos primitivos que formam a base da linguagem:

int, long, float, double, byte e char

Page 29: Introdução ao Java 5

Entendendo o problema

Tipos primitivos não herdam de Object, portanto não é possível se utilizar de polimorfismo nem herança;

Tipos primitivos são sempre passados por valor e nunca por referência;

Não podem ser adicionados as coleções comuns do Java;

Page 30: Introdução ao Java 5

Oferecendo uma solução

Criar tipos “empacotadores” para os tipos primitivos;

Cada tipo primitivo tem o seu próprio objeto empacotador que vai guardar o valor primitivo;

Podem ser adicionados normalmente a coleções e também podem ser utilizados em casos de polimorfismo;

Page 31: Introdução ao Java 5

Tipos empacotadores

Integer; Long; Double; Float; Character; Byte;

Page 32: Introdução ao Java 5

Ainda existem problemas?

Não é possível fazer operações em tipos “empacotadores”, os operadores aritméticos não funcionam;

Os tipos primitivos tem que ser passados como parâmetros nos construtores dos tipos empacotadores;

Page 33: Introdução ao Java 5

Utilizando tipos empacotadores

List lista = new ArrayList();

Lista.add( new Integer(100));

Page 34: Introdução ao Java 5

Alguém tem que simplificar isso

Mas como?

Com autoboxing (auto-empacotamento) e autounboxing (auto-desempacotamento) de tipos.

Page 35: Introdução ao Java 5

Autoboxing – empacotamento

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.

Page 36: Introdução ao Java 5

Exemplo

List lista = new ArrayList();

Lista.add( 100 );

Page 37: Introdução ao Java 5

Autounboxing - desempacotando

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.

Page 38: Introdução ao Java 5

Exemplo

Integer primeiro = 500;Integer segundo = 200;

System.out.printf("O valor do número é %d",

primeiro + segundo);

Page 39: Introdução ao Java 5

Como está acontecendo?

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.

Esse tipo de transformação cria novos objetos e deve ser utilizada com parcimônia em cenários onde a performance é importante.

Page 40: Introdução ao Java 5

O que são enumerações?

São uma classe especial onde todos os seus possíveis valores são conhecidos quando o tipo é definido, formando um conjunto.

O conjunto de naipes de um baralho é um tipo que representa uma enumeração:

{ Copas, Paus, Espada e Ouro }

Page 41: Introdução ao Java 5

Declarando uma enumeração

public|protected|private enum Nome

{ }

Page 42: Introdução ao Java 5

Exemplo de enumeração

public enum Naipe {PAUS,OUROS,COPAS,ESPADAS

}

Page 43: Introdução ao Java 5

Utilizando enumerações

Naipe naipe = Naipe.ESPADA;

if (naipe == Naipe.ESPADA ) {System.out.println

("O naipe recebido foi ESPADA");

}

Page 44: Introdução ao Java 5

Switch com enumerações

public static void switchComNaipes(Naipe naipe) {

switch (naipe) {case ESPADA :out.println("O valor recebido foi: ESPADA");break;

case COPAS :out.println("O valor recebido foi: COPAS");break;

}

}

Page 45: Introdução ao Java 5

Static imports vem ao resgate

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.

Page 46: Introdução ao Java 5

Sintaxe

static import nome.do.campo.Static

Page 47: Introdução ao Java 5

Exemplo

//importsimport static java.lang.System.err;import static java.lang.System.out;

//usoout.println(“Alô?” );

System.out.println(“Alô?”);

Page 48: Introdução ao Java 5

Usando curingas

Os curingas (*) podem ser utilizados para importar conjuntos inteiros de métodos e campos estáticos em uma classe.

Page 49: Introdução ao Java 5

Exemplo

//importimport static java.lang.Math.*;

//uso out.println("O resultado é “ +

( random() + abs(15.21) )

);

Page 50: Introdução ao Java 5

Problemas

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.

Page 51: Introdução ao Java 5

Documentando um arquivo .java

/** * Created: 10 * Created By: Maurício * Last Modified: 51 * Last Modified By: Maurício * Revision: 5 */

Page 52: Introdução ao Java 5

Refazendo com uma anotação

public @interface ClassInfo {

String criadaEm();String criadaPor();String ultimaModificacaoEm() default "";String ultimaModificacaoPor() default "" ;int revisao() default 1 ;

}

Page 53: Introdução ao Java 5

O que são anotações

São um tipo especial de interface, definidos usando a palavra reservada interface precedida de um @;

Uma anotação pode ser declarada em qualquer lugar que uma interface possa ser declarada;

Anotações devem ser utilizadas para guardar informações sobre o código onde elas são aplicadas;

Page 54: Introdução ao Java 5

Propriedades válidas em uma anotação

Tipos primitivos, Strings, outra anotação, um Class<T> ou um array de quaisquer destes tipos;

O elemento não pode declarar parâmetros;

O elemento não pode ter uma cláusula de lançamento de exceção (“throws”);

O elemento não pode definir parâmetros genéricos;

Page 55: Introdução ao Java 5

Utilizando a anotação criada

@ClassInfo(criadaEm = "10",criadaPor="Maurício",ultimaModificacaoEm=

"14/03",)

public class Classe {}

Page 56: Introdução ao Java 5

Elementos que recebem anotações

Declarações de tipo, declarações de campos, métodos e construtores podem ser anotados;

Para anotar um elemento, basta adicionar a anotação antes dele;

Um elemento só pode ter uma anotação de cada tipo;

Page 57: Introdução ao Java 5

Exemplo do uso de uma anotação em um método

@Deprecatedpublic void metodoAntigo() {}

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

Page 58: Introdução ao Java 5

Anotações comuns do Java 1.5

@Deprecated; @Documented; @Inherited; @Override; @SupressWarnings;

Page 59: Introdução ao Java 5

E o próximo Java?

Mais melhoras na performance (não vão mais existir os compiladores “Client” e “Server”);

Acesso a “área de notificação” (área do relógio);

Novas classes para se acessar o compilador do Java diretamente;

Page 60: Introdução ao Java 5

E o próximo Java?

Suporte a linguagens de Script JavaScript (automático) BeanShell Groovy VisualBasic!?!?!?!?

Acesso a novas primitivas de hardware, como o disco rígido do sistema;

Page 61: Introdução ao Java 5

Então...