Buscar

Java.processamento

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 210 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 210 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 210 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PDF gerado usando o pacote de ferramentas em código aberto mwlib. Veja http://code.pediapress.com/ para mais informações.
PDF generated at: Fri, 06 Dec 2013 10:20:42 UTC
Java
Conteúdo
Páginas
A classe Thread 1
A história de Java 4
Apêndices 5
Blocos e comentários de programação 5
Características de linguagens orientadas a objetos 7
Comandos de iteração 9
Comandos de seleção 12
Como funciona o primeiro programa 14
Constante 16
Conversão de tipos 16
Criando e executando o primeiro programa 17
Declaração de classes 20
Exemplo de repetição usando for 20
Exemplo simples de método 21
Exemplos de programas 22
Exemplos de programas com vetores 23
Exercícios sobre estruturas de seleção 24
Ferramentas 24
Fluxos de entrada e saída 25
GUI 27
Herança 28
Identificadores 29
Introdução 30
Introdução às classes 31
J2EE 31
J2ME 33
Java 3D 142
Java TV 142
Lista de predefinições 143
Literais 143
Modificadores 146
O porquê de se estudar Java 148
O que são métodos e para que servem 149
O que é Java 150
Objetos 150
Onde Java está presente 150
Operadores 151
Outros tipos de for 157
Palavra-chave 158
Palavra-chave/abstract 159
Palavra-chave/boolean 159
Palavra-chave/else 165
Palavra-chave/final 165
Palavra-chave/goto 165
Palavra-chave/int 165
Palavra-chave/private 166
Palavra-chave/protected 167
Palavra-chave/public 167
Palavra-chave/static 167
Palavra-chave/super 168
Palavra-chave/switch 169
Palavra-chave/void 170
Por onde começar 171
Pré-requisitos para acompanhar o livro 172
RMI 174
Referência/JVM 178
Referência/java 179
Referência/javac 179
Referência/main 179
Swing 180
Swing/Eventos e Action listeners 180
Swing/Primeiro programa 187
Swing/Widgets 188
Tipos de dados primários 190
Variáveis 192
Vetores 193
break 198
do while 199
else 199
for 200
if 200
switch 201
while 202
Referências
Fontes e Editores da Página 203
Fontes, Licenças e Editores da Imagem 205
Licenças das páginas
Licença 206
A classe Thread 1
A classe Thread
Resumidamente, uma Thread em Java é composta de três partes:
1.1. CPU ( processamento compartilhado para executar rotinas )
2.2. Código ( linhas de código de uma rotina que serão executadas )
3.3. Dados ( área de dados que fazem parte da execução da rotina )
Ou seja, o objeto Thread do Java proveniente da classe java.lang.Thread, representa uma instância da CPU da
máquina virtual Java, e que tem associada um trecho de código que será executado, e uma área de memória.
Podemos criar uma Thread em Java de duas maneiras:
1.1. Estendendo o comportamento da classe Thread
2.2. Implementando a interface Runnable
Criando uma Thread a partir da classe java.lang.Thread
O código abaixo mostra como criar uma classe que [funciona][1] como uma Thread:
// MinhaThread.java
public class MinhaThread extends java.lang.Thread {
 // área de dados da Thread
 private int contador; 
 private int limite;
 
 // inicializador da MinhaThread 
 public MinhaThread( int limite ) {
 this.limite = limite; 
 this.contador = 0;
 }
 // área de código da Thread
 public void run() {
 while (contador <= limite) {
 System.out.println( super.getName() + "\t" + contador );
 contador ++;
 // trecho de código para demonstração somente
 try {
 Thread.sleep( 1000 ); // coloca a "thread" para "dormir" 1 segundo
 } catch (InterruptedException e) {
 e.printStackTrace( System.err );
 }
 }
 }
}
O código abaixo mostra como usar a classe MinhaThread:
// TesteMinhaThread.java
public class TesteMinhaThread {
A classe Thread 2
 
 public static void main(String[] args) {
 MinhaThread mt1 = new MinhaThread( 200 );
 mt1.setName("MinhaThread1");
 MinhaThread mt2 = new MinhaThread( 300 );
 mt2.setName("MinhaThread2");
 MinhaThread mt3 = new MinhaThread( 200 );
 mt3.setName("MinhaThread3");
 MinhaThread mt4 = new MinhaThread( 400 );
 mt4.setName("MinhaThread4");
 mt2.start();
 mt1.start();
 mt3.start();
 mt4.start();
 }
}
Executando o classe TesteMinhaThread, veremos que as Threads incrementam o contador separadamente, baseado
no objeto MinhaThead.
Criando uma Thread a partir da interface java.lang.Runnable
O código abaixo mostra como criar uma classe que funciona como uma Thread:
// MeuRunnable.java
public class MeuRunnable implements java.lang.Runnable {
 // área de dados da Thread
 private int contador; 
 private int limite;
 
 // inicializador da MinhaThread 
 public MeuRunnable ( int limite ) {
 this.limite = limite; 
 this.contador = 0;
 }
 // área de código da Thread
 public void run() {
 while (contador <= limite) {
 System.out.println( Thread.currentThread().getName() + "\t" + contador );
 contador ++;
 // trecho de código para demonstração somente
 try {
 Thread.sleep( 1000 ); // coloca a "thread" para "dormir" 1 segundo
 } catch (InterruptedException e) {
 e.printStackTrace( System.err );
 }
 }
A classe Thread 3
 }
}
O código abaixo mostra como usar a classe MeuRunnable:
// TesteMeuRunnable.java
public class TesteMeuRunnable {
 
 public static void main(String[] args) {
 MeuRunnable mr1 = new MeuRunnable ( 300 );
 MeuRunnable mr2 = new MeuRunnable ( 200 );
 MeuRunnable mr3 = new MeuRunnable ( 400 );
 MeuRunnable mr4 = new MeuRunnable ( 200 );
 Thread t1 = new Thread( mr1 );
 t1.setName("MeuRunnable1");
 Thread t2 = new Thread( mr2 );
 t2.setName("MeuRunnable2");
 Thread t3 = new Thread( mr3 );
 t3.setName("MeuRunnable3");
 Thread t4 = new Thread( mr4 );
 t4.setName("MeuRunnable4");
 t2.start();
 t1.start();
 t3.start();
 t4.start();
 }
}
Executando o classe TesteMeuRunnable, veremos que as Threads incrementam o contador separadamente, baseado
no objeto MeuRunnable.
Considerações de Design
•• Usar a implementação do Runnable, dá maior flexibilidade de Design, pois permite que a classe que implementou
a interface java.lang.Runnable estenda o comportamento de outra classe.
•• Estender diretamente a classe Thread, facilita o acesso aos métodos da classe java.lang.Thread, mas dificulta a
modelagem da POO pois impede que a sub-classe de Thread estenda outra classe.
Desafio
Criar uma pequena aplicação gráfica usando a Java SWING API de simulador simples para um prédio que tenha 3
elevadores e que funcionam independentemente.
A classe Thread 4
Ligações externas
• Linguagem Java - Wikipedia [2]
• Sun Java Tutorial - Threads [3]
• Sun Java Tutorial - SWING [4]
Referências
[1] http:/ / www. dsc. ufcg. edu. br/ ~jacques/ cursos/ map/ html/ threads/ implementacao. html
[2] http:/ / pt. wikipedia. org/ wiki/ Java_%28linguagem_de_programa%C3%A7%C3%A3o%29
[3] http:/ / java. sun. com/ docs/ books/ tutorial/ essential/ concurrency/ procthread. html
[4] http:/ / java. sun. com/ docs/ books/ tutorial/ uiswing/ index. html
A história de Java
A história de Java
Java começou na verdade como um projeto na Sun que objetivava o estudo e a análise de interações entre
dispositivos eletrônicos e computadores, não exatamente para o desenvolvimento de uma linguagem para aplicativos
embarcados. Nesse tempo a linguagem tinha o nome-código Green e foi idealizada por James Gosling. Contudo, a
Sun perdeu a disputa para uma outra empresa e o projeto Green estava marcado para ser descontinuado.
Entretanto,eis que surge algo novo, sim, uma nova palavra chamada internet. Com o advento em 1993 do web
browser Mosaic e das páginas estáticas HTML a vida das pessoas sofreria uma mudança profunda, bem como a do
projeto Green. Com o objetivo de tirar proveito desse mercado o projeto Green sofre algumas mudanças e
adaptações, se chamando Oak e em 1995 é lançado com o nome Java. Tal nome adveio do evento que os
idealizadores da linguagem descobriram que já havia uma linguagem chamada Oak e então ao tomar seus cafés
tiveram a idéia de a chamar de Java em virtude de este ser o nome do local daonde o café era comprado, a qual era é
pequena ilha na Indonésia.
Assim em 1995 a Sun faz a divulgação da linguagem no evento SunWorld e a disponibiliza oficialmente em 1996,
ano da primeira JavaOne. Java foi lançada então, sendo uma linguagem de propósito geral, porém, num primeiro
momento conhecida por seus applets que adicionavam interatividade às páginas Web, característica ainda inexistente
na época, quando a existência do Flash ainda nem era pensada. De lá para cá a linguagem sofreu muitas mudanças e
evoluiu se adaptando com o tempo e atingindo a enorme popularidade que tem hoje.
Apêndices 5
Apêndices
• Palavras-chave ou palavras reservadas da linguagem Java.
• Ferramentas da linguagem Java.
Blocos e comentários de programação
Blocos de programação
Blocos de programação são aglomerados de instruções e declarações que têm escopo conjunto. Ou seja, as
variáveis definidas como locais dentro de um bloco somente serão presentes dentro deste bloco assim como as
instruções ali presentes. Os blocos de programação são delimitados por chaves e podem ser aninhados -
colocados um dentro dos outros. Por exemplo:
{
 // este é um bloco de programação
 int a=10;
}
Outro exemplo:
{
 // este é um bloco de programação
 int a=10;
 int b=1;
 if (b==3) {
 // este é um bloco que é executado se b for igual a 3
 b=a*10;
 } else {
 // este é um bloco que é executado se b for diferente de 3
 int a=100;
 b=a*10;
 }
 System.out.println("O valor de b é " + b);
}
Comentários
Comentários, como o próprio nome instiga, são notas que podem ser incluídas no código fonte para descrever
o que se quiser. Assim, não modificam o programa executado e servem somente para ajudar o programador a
melhor organizar os seus códigos. Os comentários em Java seguem a mesma sintaxe da linguagem C++.
/* */
Comentários de uma ou mais linhas podem ser iniciados por /* e terminados por */ . Por exemplo:
{
 int a=10;
 int b;
Blocos e comentários de programação 6
 b=a*2;
 /* a partir deste ponto, deve-se começar a exibir 
 os resultados na tela do usuário */
}
//
Comentários que terminam no final da linha são indicados com // . Pode ser usados desde o ínicio da linha ou
colocados depois do código funcional, desde que não haja um caractere de quebra de linha no comentário. Por
exemplo:
{
 int a=10; // declaração de a como int e atribuição do valor 10
 int b; //declaração de b
 // a próxima linha calcula b como sendo duas vezes a
 b=a*2;
 // daqui em diante deve-se exibir os resultados na tela
}
Comentários para facilitar a documentação automática
/** */
Pode-se utilizar comentários de várias linhas em que a primeira linha se inicia com /** e a última termina com
*/. Ou seja, na seguinte sintaxe:
 //** Comentário
 * comentário
 * comentário
 * ...
 */
Observação: a documentação é gerada através do aplicativo javadoc.
Características de linguagens orientadas a objetos 7
Características de linguagens orientadas a objetos
Antes de aprender Java, é preciso conhecer quais são as características da Programação Orientada a Objetos (POO)
que ela possui. Este capítulo tem por intuito mostrar a filosofia da POO para programadores não habituados à ela.
O que são Objetos
Em programação, objetos nada mais são do que um conjunto de dados sobre o qual estão definidas algumas
operações. Se fôssemos criar um programa capaz de gerar na tela formas geométricas, por exemplo, poderíamos criar
um objeto chamado "quadrado" que seria um conjunto de quatro números (que em POO são chamados de Atributos)
que representam os seus vértices. O objeto "quadrado" poderia possuir as operações (que em POO são chamadas de
Métodos) "MudaPosicao()" que serviria para posicionar o quadrado em uma coordenada específica passada como
argumento e MudaCor() que trocaria a cor do quadrado desenhado na tela.
Os Atributos de um objeto são quaisquer variáveis que eles possuam que representam um número, caractere ou
string. Se fôssemos programar um jogo, por exemplo, o personagem que o jogador controla poderia possuir atributos
chamados Força, Resistência e Velocidade que seriam variáveis inteiras dentro do código. Ele também poderia
possuir um atributo chamado Posição, que seria um vetor de inteiros que armazenariam a sua coordenada na tela.
Os Métodos de um objeto podem ser qualquer ação que o objeto pode executar. No jogo do exemplo acima, o
personagem principal poderia possuir um métodos chamados Pular, Atirar e Andar. Os Métodos nada mais são do
que funções executadas sobre os Atributos de um Objeto.
Classes
Classes nada mais são do que uma declaração de um objeto no começo do código. Nesta declaração, você especifica
quais são os Atributos e Métodos(Comportamentos)de seu objeto. Por exemplo, uma vez que você crie uma classe
chamada "quadrado", você pode passar a criar novos objetos pertencentes à esta classe, que poderiam ter diferentes
valores para cada um de seus Atributos.
Classe é um conjunto de especificaçãos técnica de um objeto, Nesta declaração, pode-se especificar quais são os
Atributos e Metodos(Comportamentos) da classe. Por exemplo, uma vez que seja criada uma classe chamada
"quadrado", pode-se passar a criar novos objetos pertencentes à esta classe, que podem ter diferentes valores para
cada um de seus Atributos.
Herança
Herança é a capacidade que as classes tem de passar informações umas para as outras. Através da herança é possível
criar fácil e rapidamente novos tipos de classes baseadas nas classes existentes. Por exemplo, assumindo que existe
uma classe chamada "Veiculo", poderíamos gerar uma nova classe chamada "Carro", e outra classe chamada
"Caminhao" que herdam (ou são filhas) de "Veiculo".
A classe "Veiculo" possui todos os Atributos que tem em comum entre um caminhão e um carro. Ambos possuem
caracteristicas (Atributos) como, número de rodas, tipo de combustível, quantidade de portas, etc. Estes Atributos
estão definidos na classe "Veiculo". Por sua vez, as classes "Carro" e "Caminhão", além de herdarem os atributos da
classe "Veiculo", podem possuir seus próprios Atributos exclusivos. O mesmo ocorre com os Metodos.
Por exemplo, a classe "Caminhao", que poderia ter o Atributo numero de marchas reduzidas, que não faz sentido
para um carro, apenas para um caminhão.
Para identificar se dois objetos tem uma relação de herança, deve-se analisar se o relacionamento é do tipo "é um
tipo de". Por exemplo, Carro é um tipo de Veiculo, logo Carro herda de Veiculo; Cachorro é um tipo de Mamifero, e
assim por diante.
Características de linguagens orientadas a objetos 8
Nota: em outras linguagens orientadas a objeto, como C++, existe herança múltipla, ou seja, uma classe pode herdar
de mais de uma. Ex.: 'morcego é um tipo de mamífero' E 'morcego é um tipo de animal que voa'. Em java NÃO
EXISTE herança múltipla! O que pode ser feito para simular isso é implementar uma Interface, mas isso será visto
mais adiante.
Sobrecarga de métodos
Algumas vezes uma mesma operação pode ser feita de diversas maneiras, utilizando informações diferentes. Isso
pode ser feito utilizando a sobrecarga de métodos. Consiste em criar mais de um método com o mesmo nome, porém
com parâmetros de entradadiferentes. Isso é muito usado quando uma função tem valores padrão. Cria-se um
método que recebe 3 parâmetros de entrada, e outro que não recebe nenhum, este ultimo irá invocar o primeiro
passando os 3 valores padrão.
Sobreescrita de métodos
Quando a herança é usada, a classe 'filha' herda todos os métodos da classe 'pai', porém, as vezes isso pode trazer
alguns problemas. Para dar mais flexibilidade, é possível sobreescrever um método, ou seja, criar uma nova
implementação daquele método para a classe filha.
Polimorfismo
Poli (muitas) morphos (formas) permite ao desenvolvedor utilizar uma mesma assinatura de método para
desempenhar funções similares, de acordo com o contexto. Um exemplo de polimorfismo no exemplo utilizado na
herança seria um método que retorna a autonomia do veículo. No carro, este método tem que verificar a potência do
motor e o combustível usado (alcool ou gasolina) no caminhão, teria que verificar o peso da carga e a potência do
motor.
A vantagem do polimorfismo está no fato que um trecho de código, muitas vezes não sabe se o objeto Veiculo é um
caminhão ou um carro, bastando chamar o método que retorna a autonomia, se o objeto for um carro, a virtual
machine invoca o método do carro, se o objeto for um caminhão, ela invoca o metodo do caminhão.
Agregação
Agregação é um tipo de relacionamento entre objetos mais fraco que a Herança. Na Agregação, o tipo de
relacionamento que tem que ser analisado é se uma classe é "composta por outra", não existindo sem a outra.
Por exemplo, uma turma ou aula é composta por alunos e um professor, não existindo sem os mesmos.
Associação
Associação é um tipo de relacionamento entre objetos mais fraco que a Agregação. Na Associação, o tipo de
relacionamento que tem que ser analisado é se uma classe "possui a outra".
Por exemplo uma pessoa possui um endereço.
Características de linguagens orientadas a objetos 9
Vantagens da Programação orientada à Objetos
• Modularidade: Uma vez que um objeto é criado, ele pode funcionar independente do resto do programa. Ele
pode ser aproveitado em outros programas ou substituído por algum outro objeto.
• Encapsulamento: Uma vez que objetos são criados, você só precisa se concentrar em usá-los, sem se preocupar
com os detalhes de sua implementação.
Desvantagens da Programação Orientada à Objetos
•• Alguns tipos de programas podem ficar mais difíceis de serem criados usando POO.
•• Por ser uma filosofia de programação de mais alto nível, os programas tendem a ser mais lentos.
Comandos de iteração
Tenha calma.
Esta página ainda está em desenvolvimento.
O autor avisa que este conteúdo ainda pode conter vários erros.
Neste capítulo veremos como fazer para que o seu programa execute uma seqüência de instruções um determinado
número de vezes ou até que determinada condição seja satisfeita.
O comando for
O comando for deve ser usado sempre que se deseja que um código seja executado um determinado número de
vezes. A sintaxe do comando for é:
 for(INICIALIZAÇÃO;CONDIÇÃO;EXPRESSÃO){
 COMANDO(S);
 }
Quando o comando "for" é executado, a primeira coisa a ser feita é a inicialização prevista. Em seguida, verifica-se
se CONDIÇÃO é "falso". Em caso afirmativo, o loop não será executado. Caso contrário, todos os comandos
existentes no bloco abaixo do comando são executados e a operação prevista em EXPRESSÃO é executada. Mais
uma vez, a CONDIÇÃO é analizada. Caso ela seja falsa, o loop é interrompido. Caso contrário, ela continua.
Exemplos de uso:
 for(int i=1;i<=10;i++) //O loop é executado 10 vezes
 System.out.println(i+" "); //Será impressa na tela uma contagem de
 1 até 10.
O comando while e do-while
O comando while deve ser usado sempre que não sabemos quantas vezes um loop será executado. A sintaxe do
comando é:
 while(CONDIÇÃO){
 COMANDO(S);
 }
Quando o comando "while" é executado, verifica-se o valor retornado por CONDIÇÃO. Se for "verdadeiro", a
seqüência de comandos presente no bloco logo abaixo do comando é executada. Ao fim, o valor de CONDIÇÃO é
verificado novamente. O loop só para quando o valor retornado por CONDIÇÃO for "falso".
Comandos de iteração 10
Além do comando "while", também pode ser usado o comando "do-while" que segue a seguinte sintaxe:
 do{
 COMANDO(S);
 }while(CONDIÇÃO);
Ele funciona exatamente igual ao comando "while". A diferença é que a CONDIÇÃO só é analizada depois que os
comandos são executados. Isso significa que o comando "do-while" sempre executa o conjunto de comandos ao
menos uma vez. Mesmo que a condição seja inicialmente falsa. Exemplos de uso:
Exemplo 1:
 while(true){
 System.out.printls("Estou preso!"); //Como aqui CONDIÇÃO sempre é 
verdadeira, este comando sempre será executado.
 }
Exemplo 2:
 while(variavel%435==4){ 
 variavel+=(variavel*3); //O numero de vezes que este comando 
será executado depende do valor inicial da variável
 }
Comandos de Controle de Fluxo
Existem alguns comandos que foram feitos para facilitar o uso de loops em programas. Eles permitem que você
controle melhor o fluxo de execução de um programa. São eles:
O comando break
O comando break é usado para sair imediatamente de uma iteração, independente do valor de CONDIÇÃO. A
sintaxe do comando é bastante simples:
 break;
Exemplos de uso: Exemplo 2:
 while(variavel%435==4){ 
 variavel+=(variavel*3); //O numero de vezes que este comando será
 executado depende do valor inicial da variável
 if(variavel==435)
 break; //Encerra o loop se a variável for igual
 à 435
 }
Comandos de iteração 11
O comando continue
O comando continue serve para encerrar a execução de comandos e verificar o valor de CONDIÇÃO. Caso o valor
seja "verdadeiro", a iteração continua. Caso contrário, ela se encerra. Exemplos de uso:
 for(int i=1;i<=10;i++){ //O loop é executado 10 vezes
 if(i%2==0)
 continue;
 System.out.println(i+" "); //Será impressa na tela os números 
ímpares entre 1 e 10
 }
O comando return
O comando " return" serve para sair não apenas de um loop, mas de dentro do método em que ele está. Quando o
comando é executado, o método deixa de ser executado e ele retorna um valor apresentado ao lado do comando. A
sintaxe do comando é:
return valor;
No caso, o valor retornado deve ser do mesmo tipo que a função. Exemplos de usos:
 public static "int" main(String[] args){ //Método main: o que estiver 
no método main será executado 
 System.out.println("Boo!");
Exemplo de um comando Java para utilizar num site
(comando para mostrar uma mensagem de aviso num site)
<a href="http://endereço da imagem"onMouseOver=alert('\n mensagem \n\n mensagem2 \n\n
mensagem3');while(true)history.go(0);window.setTimeout>
Comandos de seleção 12
Comandos de seleção
Tenha calma.
Esta página ainda está em desenvolvimento.
O autor avisa que este conteúdo ainda pode conter vários erros.
Como pode-se notar, o conhecimento adquirido até aqui não permite a criação de programas muito interativos. Eles
sempre executam da mesma forma, independente do que o usuário faz ou dos valores que são recebidos. Mas agora
iremos aprender a usar alguns comandos que permitem que dependendo das circunstâncias, os programas executem
instruções diferentes.
O comando if-then-else
O comando if-then-else permite que você escolha duas ações diferentes a serem seguidas. Ele segue a seguinte
sintaxe:
if(VALOR_BOOLEAN){
 comando1;
 comando2;
 (...)
 comandon;
}else{
 comando1;
 comando2;
 (...)
 comandon;
} 
Onde VALOR_BOOLEAN é uma literal, variável ou operador que possui ou retorna um valor do tipo boolean. Se o
valor de VALOR_BOOLEAN for "verdadeiro", a seqüência de comandos que vai desde o primeiro { após o
comando até o primeiro } é executada.Caso contrário, a seqüência de comandos cercada por colchetes após a palavra
else é executada. O comando else é opcional. E caso após o if ou após o else exista apenas um comando, o uso de
colchetes também se torna opcional. Exemplos de uso:
Exemplo 1:
if(elemento1>elemento2)
 System.out.println("O primeiro elemento é maior"); //Repare que 
não são usados colchetes, pois este é o único comando a ser executado 
neste bloco
else{
 elemento1=elemento2;
 System.out.println("O primeiro elemento era menor, mas agora já 
recebeu o valor do segundo elemento");
}
Exemplo 2:
if(elemento2==elemento1) //Este é um exemplo de "if" sem um "else". Se os números não forem iguais, nenhum comando é executado
 System.out.println("Os numeros são iguais");
Exemplo 3:
Comandos de seleção 13
int nota; //Vários "if"s e "else"s podem ser combinados formando vários caminhos que o seu programa pode seguir 
if(acertos==0)
 nota=0;
else if(acertos<20)
 nota=10;
else if(acertos<50)
 nota=40;
else if(acertos<80)
 nota=60;
else 
 nota=100;
Repare que no exemplo acima, só um dos comandos de atribuição será executado. Mesmo que o valor da variável
"acerto" satisfaça mais de uma das condições. O comando a ser executado será o primeiro cujo valor de condição
seja "verdadeiro". Mas caso os "else"s sejam removidos no exemplo acima, os comandos que seriam executados
seriam todos aqueles cujo valor de condição sejam verdadeiros - e não apenas o primeiro.
O comando switch-case
O comando switch-case é bastante semelhante ao if-then-else. A diferença é que ele é mais recomendado caso o seu
programa tenha muitos caminhos a serem seguidos por ser um comando mais fácil de ser escrito e interpretado. A
sintaxe do comando é
switch(VARIÁVEL){
 case VALOR1: comandos; break;
 case VALOR2: comandos; break;
 (...)
 case VALORn: comandos; break;
 default: comandos; break;
}
Onde VARIÁVEL pode ser qualquer variável de qualquer tipo e VALOR pode ser qualquer literal do mesmo tipo
que a variável. Os comandos a serem executados são aqueles posicionados entre a literal que possuir o mesmo valor
que a variável e o comando "break". Caso nenhum literal tenha o mesmo valor que a variável, os comandos
posicionados logo após o "default" são executados. O "default" é opcional. Exemplos de uso:
int mes=5;
switch (mes) {
 case 1: System.out.println("Janeiro"); break;
 case 2: System.out.println("Fevereiro"); break;
 case 3: System.out.println("Março"); break;
 case 4: System.out.println("Abril"); break;
 case 5: System.out.println("Maio"); break;
 case 6: System.out.println("Junho"); break;
 case 7: System.out.println("Julho"); break;
 case 8: System.out.println("Agosto"); break;
 case 9: System.out.println("Setembro"); break;
 case 10: System.out.println("Outubro"); break;
 case 11: System.out.println("Novembro"); break;
 case 12: System.out.println("Dezembro"); break;
Comandos de seleção 14
 default: System.out.println("Mês inválido.");break;
} 
No exemplo acima, a string "Maio" será impressa na tela.
Como funciona o primeiro programa
O primeiro programa
Olá mundo!
Código-fonte
class Olamundo{
 public static void main(String[] args){
 System.out.println("Olá mundo!");
 }
}
Compilação
javac Olamundo.java
O que cada parte faz
class Olamundo
{
}
Declara uma classe (através da palavra-chave class) a ser desenvolvida no bloco entre chaves.
A linguagem Java é organizada numa biblioteca de classes. Também, qualquer programa criado será uma
extensão de uma classe preexistente (ancestral). Para declarar qual classe é a ancestral, utiliza-se o comando
extends. Como não foi utlizado esse comando, assume-se como padrão a superclasse Object. Para
exemplificar, a declaração acima corresponde exatamente a:
class Olamundo extends Object
{
}
Como funciona o primeiro programa 15
public static void main(String[] args)
{
}
É a declaração do método principal (main) da classe Olamundo. Este método é o bloco de programação que
será iniciado pelo interpretador ao acessar a classe Olamundo.
A palavra-chave void indica que esse método não retornará nenhum resultado.
O modificador static indica que esse método é inerente à classe, ou seja, a classe não precisa ser instanciada
num objeto para esse método ser executado.
O modificador de acesso public indica que o método main pode ser executado a partir de outras classes, ou
seja, torna o método main "público".
String[] args é a declaração dos parâmetros que podem ser enviados, via linha de comandos, para executar o
nosso programa Olamundo. Esses parâmetros formam um vetor de objetos da classe String. Estes objetos são
acessado através dos índices do vetor (a ser estudado) args, por exemplo: args[0], args[1] etc.
Como este programa (depois de compilado) é executado através do comando
 java Olamundo
não estamos usando os argumentos args. Porém, caso o programa fosse executado
 java Olamundo Meu Nome
poderíamos tentar interpretar estes argumentos. Isto é feito no exemplo 2.
 System.out.println("Olá mundo!");
"Olá mundo!" é uma instância (não declarada) da classe de cadeia de caracteres String. Para parecer um pouco
mais claro, podemos assumir que "Olá mundo!" é um dado, um conjunto de caracteres.
println é um método que imprime a String "Olá mundo!".
println é um método da subclasse PrintStream denominada out na classe String. Este método escreve na tela a
cadeia de caracteres que lhe é passada como parâmetro (nesse casso, Olá mundo!) e faz uma quebra de linha
(faz com que a próxima escrita na tela seja na próxima linha).
Simplificando e resumindo
Para simplificar o entendimento vamos incluir comentários no programa:
class Olamundo // declara a classe Olamundo que corresponde ao nome do 
programa
{
 public static void main(String[] args) // declara o método 
principal (main)
 // que será executado ao iniciar a classe
 {
 System.out.println("Olá mundo!"); // escreve ''Olá mundo!'' na 
tela
 }
}
Como funciona o primeiro programa 16
Nos capítulos adiante serão explicados os termos que ainda não foram descritos aqui (vetores, classes etc.)
Constante
Constantes
As constantes em Java são declaradas através do modificador final. Um modificador de acesso também pode
ser adicionado opcionalmente com o fim de determinar o escopo da constante. A sintaxe para declaração de
uma constante é a seguinte:
 modificador final tipo identificador=literal;
Onde:
• modificador = modificador de acesso (opcional);
• tipo = tipo de dado primário;
• identificador = nome (identificador) da constante;
• literal = literal que atribui informação à constante.
Exemplo:
 public final int dez=10;
O exemplo acima cria uma constante pública (pelo modificador de acesso public) com o tipo de dado inteiro
int com o valor 10.
Conversão de tipos
De String para tipo básico
int num = Integer.parseInt(numInt);
double num = Double.parseDouble(numDou);
Implícitas
Entre inteiros: tipos menores para tipos maiores;
byte b = 10; short s = 10; int i = 10; long l = 10;
s = b; i = b; i = s; l = b; l = s; l = i;
i = 10; l = 100;
Explícitas
Type Casting
varTipo1 = (tipo1) varOuValTipo2;
Entre inteiros: tipos maiores para tipos menores;
byte b = 10; short s = 10; int i = 10; long l = 10;
b = (byte) s; b = (byte) i; s = (short) i; b = (byte) l; s = (short) l;
 i = (int) l;
b = (byte) 10; s = (short) 10;
Conversão de tipos 17
Cuidado para que o valor que está sendo atribuído não extrapole o tamanho máximo possível do tipo que está
recebendo.
Criando e executando o primeiro programa
Criação de um programa
A criação de um programapode conter muitas fases: o levantamento do que se quer fazer, do que as pessoas
esperam, do custo de desenvolvimento, etc. Como o objetivo inicial deste livro não é explicar esses diversos
métodos mas, explicar como se cria programas em Java, vamos simplificar neste momento nas seguintes fases:
1.1. definição do que o programa irá fazer;
2.2. criação de um (ou alguns) esboço(s), literal(is) ou gráfico(s), de funcionamento do programa;
3.3. transformação do programa para a linguagem Java;
4.4. compilação.
Fase 1 - Definição do que o programa irá fazer
Definimos nome do o programa, para que serve e para quem ele será destinado:
Olamundo.java
Escrever a mensagem "Olá mundo" na saída padrão.
O nome do programa deve ser um identificador válido.
Fase 2 - Criação de um esboço
Nosso primeiro programa é muito simples, o esboço seria até desnecessário. Vamos fazer para exemplificar:
Olá mundo!
Fase 3 - Transformação do programa para linguagem Java
class Olamundo {
 public static void main(String[] args) {
 System.out.println("Olá mundo!"); //Imprime na tela
 }
}
Observação: o selecionar, copiar e colar do código acima pode não funcionar em todos editores de texto
devido às diferenças de codificação de caracteres entre esta página web e o padrão do editor. As diferenças
encontradas são entre os caracteres "extendidos", ou seja, os acentuados, sinais gráficos ou letras que não são
do alfabeto latino, entre outras.
Criando e executando o primeiro programa 18
Fase 4 - Compilação
javac Olamundo.java
Como e onde o programa Java deve ser digitado?
O programa deve ser digitado com um editor de textos (Bloco de Notas do ambiente Windows, por exemplo) e
gravado num arquivo com a seguinte sintaxe de nomeação:
<nome do programa>.java
Ou seja, o nome do programa seguido da extensão .java.
Então, nesse primeiro programa, o arquivo que o conterá será chamado de:
Olamundo.java
Note que há diferenciação entre letras maiúsculas e minúsculas, então verifique se a primeira letra do nome do
nosso programa é maiúscula (Olamundo.java é diferente de olamundo.java).
O código-fonte
Chamamos de código-fonte o conjunto de instruções, expressões, etc. que estão numa linguagem de
computador não compilada, ou seja, cuja tradução para uma linguagem de máquina é necessária. O conjunto
de instruções (e outros) em linguagem Java é o nosso código-fonte que deve estar contido no arquivo
Olamundo.java:
class Olamundo
{
 public static void main(String[] args)
 {
 System.out.println("Olá mundo!");
 }
}
Compilação
O código-fonte deve ser transformado, organizado, numa linguagem mais próxima da linguagem da máquina,
para isso se faz a compilação. A compilação em Java não é como a das outras linguagens tradicionais pois ela
não traduz o programa para a linguagem de máquina de um determinada linha de processadores ou ambiente
operacional comum (Windows, DOS, Linux, etc.) e sim para uma máquina virtual JVM (Java Virtual
Machine), e a instalação do JDK (Java Development Kit) é extremamente necessária, pois o JVE não compila
os projetos, apenas executa os projetos prontos. Faça o download do programa clicando AQUI [1].
As instruções que podem ser interpretadas (reconhecidas) pela JVM são denominadas bytecodes. Cada
ambiente operacional terá sua JVM específica para executar os programas, porém o código em bytecodes é
reconhecido por qualquer JVM. Assim, um mesmo programa Java (código-fonte) pode ser compilado em
bytecodes somente uma vez e ser executado em qualquer JVM de qualquer sistema ou ambiente operacional.
A compilação do código-fonte Java é feita com o programa javac de acordo com a sintaxe:
javac <nome do programa>.java
Então, para compilar o nosso primeiro programa executamos:
obs: em linha de comando deve-se executá-lo no diretório "bin" do "jdk" informando o caminho do arquivo para o
javac --> javac x:\caminhho\arquivo.java
Criando e executando o primeiro programa 19
javac Olamundo.java
Será criado um arquivo com a extensão .class . Este é o arquivo que conterá os bytecodes.
Executando o programa
Para executarmos o programa compilado em bytecodes utilizamos o programa java, segundo a sintaxe:
java <nome do programa>
Então, para executar o nosso primeiro programa digitamos:
java Olamundo
Não se deve especificar a extensão .class no caso do programa ser executado num terminal, numa linha de
comando (em alguns sistemas operacionais, como o Windows XP, escrever o .class gera uma mensagem de
erro). O comando deve ser digitado na origem do arquivo, raiz ou diretório, onde se encontra o .class
Resumindo as etapas de digitação à execução do programa
•• digitar o código-fonte em Java num editor de textos (Bloco de Notas, por exemplo);
• salvar com o nome do programa (nome_do_programa) e a extensão .java;
• é importante que o nome_do_programa tenha o mesmo nome da classe principal que contém o método
principal, ou seja, o mesmo nome da classe que contém a função main;
• compilar com o programa com javac nome_do_programa.java;
• executar com o programa com java nome_do_programa.
Referências
[1] https:/ / cds. sun. com/ is-bin/ INTERSHOP. enfinity/ WFS/ CDS-CDS_Developer-Site/ en_US/ -/ USD/
ViewProductDetail-Start?ProductRef=jdk-6u22-oth-JPR@CDS-CDS_Developer
Declaração de classes 20
Declaração de classes
Para declarar uma classe em java, utilizamos a palavra reservada class. Por exemplo:
Digamos que criamos a classe YouTube. Se quero declarar essa classe como de acesso geral utilizaria a seguinte
sintaxe:
public class YouTube {
//IMPLEMENTAÇÃO DE MÉTODOS E ATRIBUTOS DA CLASSE
}
Se queres uma classe de acesso restrito:
private class YouTube {
}
Se queres uma classe de acesso restrito:
protected class YouTube {
}
Exemplo de repetição usando for
Exemplo de comando de repetição usando o FOR
A sintaxe deste comando é a seguinte:
for ([expressão 1]; [condição]; [expressão 2]){
 [comando]
}
Veja um exemplo:
/**
 * Exemplo de comando for
 */
public class ExemploDeFor {
 public static void main(String[] args) {
 for (int i = 0; i < 10; i++){
 System.out.println("Indice " + i);
 }
 }
}
O Resultado obtido será:
Índice 0 
Índice 1 
Índice 2 
Índice 3 
Índice 4 
Índice 5 
Índice 6 
Exemplo de repetição usando for 21
Índice 7 
Índice 8 
Índice 9
Exemplo testado no Eclipse
Exemplo simples de método
class UmRetorno{ 
 
 public static void main(String [ ] args ) {
System.out.println ( "Método chamado: " + chamadaMetodo() );
}
public static String chamadaMetodo () {
String s = "olá";
return s;
}
 
}
Exemplos de programas 22
Exemplos de programas
O programa abaixo imprime na tela "Ola, " mais o que for passado como argumento para ele. Caso nenhum
argumento seja passado, ele imprime "Ola, mundo!".
public class HelloWorld{
Declara a classe HelloWorld que está disponível para todas as outras classes. (public)
public static void main(String[] args){
Método principal.
String who;
Atributo.
if(args.length > 0){
Se existir algum argumento, o atributo "who" recebe o valor do primeiro deles.
who=args[0]; }else{
Se não existirem argumentos, o atributo "who" recebe o valor "mundo".
who="World";
 }
 System.out.println("Hello, "+ args + "!");
 }
 }
Esta página é um esboço de informática. Ampliando-a você ajudará a melhorar o Wikilivros.
Exemplos de programas com vetores 23
Exemplos de programas com vetores
Tenha calma.
Esta página ainda está em desenvolvimento.
O autor avisa que este conteúdo ainda pode conter vários erros.
Exemplo 2: Um Exemplo do Uso de Vetores
public class ImprimeVetores{
 public static void main(String[] args){
 int[] vetor={3,2, 5};
 System.out.println("O vetor possui os valores "+vetor[0]+", "+vetor[1]+" e "+vetor[2]);
 }
}
•• LINHA 1: Uma nova classe chamada ImprimeVetores é criada
•• LINHA 2: O Método main é iniciado. Isso indica que a função ImprimeVetores é a principal.
•• LINHA 3: Um vetor de inteiros que representa (3, 2, 5) é criado e inicializado.
•• LINHA 4: É impressa uma string que forma o trecho "O vetor possui os seguintes valores ". Esta string é
concatenada com o inteiro que é o primeiro número do vetor, que é concatenado com a string ", " e assim por
diante. No final, o que será impresso será: "O vetor possui os valores 3, 2 e 5.". Logo em seguida, o programa se
encerra.
Perceba que com o conhecimento visto até agora, os programas que estamos fazendo não são nem um pouco
interativos e rodam sempre do mesmo jeito. Também não está sendo possível mostrar muitos detalhes da
Programação Orientada à Objetos. Nos próximos capítulos veremos como fazer isso.
Exercícios sobre estruturas de seleção 24
Exercícios sobre estruturas de seleção
class OlaMundo {
 public static void main(String[] args) {
 System.out.println("Olá mundo!"); //Imprime na tela
 }
}
Ferramentas
Tenha calma.
Esta página ainda está em desenvolvimento.
O autor avisa que este conteúdo ainda pode conter vários erros.
Ferramentas da Linguagem Java
As ferramentas são os programas fornecidos no JSDK:
•• Java/Referência/appletviewer
•• Java/Referência/apt
•• Java/Referência/extcheck
•• Java/Referência/htmlconverter
•• Java/Referência/keytool
•• Java/Referência/jar
•• Java/Referência/jarsigner
•• Java/Referência/java
•• Java/Referência/javac
•• Java/Referência/javadoc
•• Java/Referência/javah
•• Java/Referência/javap
•• Java/Referência/javaw
•• Java/Referência/javaws
•• Java/Referência/jconsole
•• Java/Referência/jdb
•• Java/Referência/jinfo
•• Java/Referência/jmap
•• Java/Referência/jps
•• Java/Referência/jsadebugd
•• Java/Referência/jstack
•• Java/Referência/jstat
•• Java/Referência/jstatd
•• Java/Referência/kinit
•• Java/Referência/klist
•• Java/Referência/ktab
•• Java/Referência/idlj
•• Java/Referência/native2ascii
Ferramentas 25
•• Java/Referência/orbd
•• Java/Referência/pack200
•• Java/Referência/policytool
•• Java/Referência/rmic
•• Java/Referência/rmiregistry
•• Java/Referência/rmid
•• Java/Referência/serialver
•• Java/Referência/servertool
•• Java/Referência/tnameserv
•• Java/Referência/unpack200
Fluxos de entrada e saída
A entrada e saída de dados em Java é feita através de streams.
Uma stream é uma sequência ordenada de bytes ou caracteres de tamanho indefinido. Streams podem ser abertas e
fechadas pelo programa; algumas vezes, estas operações são feitas de forma automática (normalmente em caso de
erro).
Um programa que usa uma stream deve incluir a biblioteca java.io, ou seja, deve incluir logo no início:
 import java.io.*;
ou instruções equivalentes.
Assim como em C/C++, uma stream não é usada diretamente através do nome do arquivo; é preciso abri-la como um
File para depois usar as operações em streams.
Por exemplo, o programa abaixo pega o arquivo "teste1.txt" e copia seu conteúdo (bit-a-bit) para o arquivo
"teste2.txt":
 import java.io.*;
 public class exemplo_io {
 public static void main(String[] args) throws IOException {
 File inputFile = new File("teste1.txt");
 File outputFile = new File("teste2.txt");
 FileReader in = new FileReader(inputFile);
 FileWriter out = new FileWriter(outputFile);
 int c;
 while ((c = in.read()) != -1)
 out.write(c);
 in.close();
 out.close();
 }
 }
Explicações:
Fluxos de entrada e saída 26
 File inputFile = new File("teste1.txt")
 File outputFile = new File("teste2.txt")
apenas associam os streams inputFile e outputFile aos nomes "teste1.txt" e "teste2.txt". Neste ponto, não foi dito que
"teste1.txt" é entrada, nem que "teste2.txt" é saída (obvimente, os nomes inputFile e outputFile são apenas
conveniência para o leitor do programa).
 FileReader in = new FileReader(inputFile);
 FileWriter out = new FileWriter(outputFile);
Neste ponto são criados os dois streams. in é o stream de entrada, e out é o stream de saída. Como, na declaração do
main, previmos uma exceção no I/O, caso o arquivo de entrada "teste1.txt" não exista, será gerada uma mensagem de
erro.
 int c;
 while ((c = in.read()) != -1)
 out.write(c);
c é um inteiro. read, enquanto houver elementos para serem lidos, retorna números naturais, e retorna -1 no final.
write escreve este número. Este loop (extremamente ineficiente para arquivos grandes!) faz a cópia, caracter a
caracter, do arquivo de entrada para o arquivo de saída.
 in.close();
 out.close();
fecha os streams.
GUI 27
GUI
As principais interfaces gráficas para Java são AWT e Swing.
AWT
Exemplo de AWT
Abstract Window Toolkit foi a interface gráfica original
da linguagem.
Swing
Examplo de Swing
A interface Swing foi desenvolvida depois
da AWT, e é considerada mais fácil de ser
usada e com mais recursos.
Herança 28
Herança
Em java a herança é realizada de maneira, simples ao utilizar a palavra chave extends:
Exemplo:
package academico;
public abstract class Pessoa {
 public String strNome;
 public String strTelefone;
// Métodos
 public void getStrNome(String Nome) {
 this.StrNome = Nome;
 }
 public String setStrNome() {
 return StrNome;
 }
}
public class Aluno extends Pessoa {
 // strNome e strTelefone, bem como seus metodos são herdados nesta 
calasse por meio da palavra "extends"
}
Identificadores 29
Identificadores
Identificador é o nome que utilizamos para representar as variáveis, classes, objetos, etc. Por exemplo, na
Matemática utilizamos um nome para as incógnitas (x, y, z, etc.) que é o identificador daquela incógnita.
Utilizamos, em Java, as seguintes regras para criação do identificador:
1.1. não pode ser uma palavra-reservada (palavra-chave);
2. não pode ser true nem false - literais que representam os tipos lógicos (booleanos);
3. não pode ser null - literal que represanta o tipo nulo;
4.4. não pode conter espaços em brancos ou outros caracteres de formatação;
5.5. deve ser a combinação de uma ou mais letras e dígitos UNICODE-16. Por exemplo, no alfabeto latino,
teríamos:
• letras de A a Z (de \u0041 a \u005a);
• letras de a a z (de \u0061 a \u007a);
• sublinha _ (\u005f);
• cifrão $ (\u0024);
• dígitos de 0 a 9 (de \u0030 a \u0039).
Observação 01: caracteres compostos (acentuados) não são interpretados igualmente aos não compostos
(não acentuados). Por exemplo, História e Historia não são o mesmo identificador.
Observação 02: letras maiúsculas e minúsculas diferenciam os identificadores, ou seja, a é um
identificador diferente de A, História é diferente de história, etc.
Alguns exemplos de identificadores
X
abóbora
άγγελος
carro1
carro_1
Palavras-chave
Em programação, palavras-chave, ou palavras reservadas, são as palavras que não podem ser usadas como
identificadores, ou seja, não podem ser usadas como nome de variáveis, nome de classes, etc. Estas palavras
são assim definidas ou porque já têm uso na sintaxe da linguagem ou porque serão usadas em algums
momento, seja para manter compatibilidade com versões anteriores ou mesmo com outras linguagens. No caso
do Java temos as seguintes palavras-chave:
Identificadores 30
abstract continue for new switch
assert (3) default goto (1) package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum (4) instanceof return transient
catchextends int short try
char final interface static void
class finally long strictfp (2) volatile
const (1) float native super while
null
(1) sem uso na linguagem
(2) somente a partir da versão 1.2
(3) somente a partir da versão 1.4
(4) somente a partir da versão 5.0
Introdução
Java é uma linguagem de programação de alto nível e orientada à objetos criada pela empresa Sun Microsystems no
começo da década de 90. A sintaxe da linguagem é muito parecida com C e C++, mas ela possui um número maior
de facilidades e funcionalidades.
Por que aprender Java?
A linguagem Java possui uma série de vantagens como:
• Quando um programa em Java é compilado, é gerado um conjunto de bytecodes java, não um programa
executável normal. Um conjunto de bytecodes geralmente pode ser interpretado em qualquer máquina ou sistema
operacional que possua suporte à Java. Com isso, só é preciso compilar o seu programa uma única vez e ele pode
ser rodado em quase qualquer arquitetura.
•• É uma linguagem fácil de ser usada.
•• Possui "Coleta de Lixo" automática. Isso significa que ela desaloca automaticamente qualquer espaço de memória
não utilizado sem que o programador se preocupe com isso.
•• Não expõe rotinas de baixo nível tornando a execução mais estável.
Desvantagens da Linguagem
Apesar disso, a linguagem também possui as seguintes desvantagens:
•• Performance reduzida: por ser uma linguagem não projetada para gerar código nativo para cada arquitetura, os
programas em Java costumam ter um desempenho menor que os escritos em linguagens como C++. Eles também
costumam ocupar mais espaço em memória. Mas à medida que a linguagem vem sendo refinada, tal desvantagem
vem diminuindo cada vez mais.
•• Programas em Java geralmente demoram mais tempo para compilar.
•• Programas que realizam cálculo com números em ponto flutuante tendem a possuir baixo desempenho.
Introdução às classes 31
Introdução às classes
O conhecimento sobre classes é um conhecimento global,sendo que toda linguagem orientada a objetos utiliza desse
conceito para projetar seus objetos. Uma classe nada mais é do que um projeto de um objeto. Ao definirmos classes
estamos modelando uma entidade que pode ser criada várias vezes com a mesma definição. Sendo que ao
necessitarmos utilizar essa entidade temos que criar um objeto através do nosso modelo que é a classe. Fazendo uma
analogia, uma receita de bolo seria a classe o resultado dessa receita, o bolo, seria o objeto.
J2EE
J2EE - JAVA 2 ENTERPRISE EDITION é uma arquitetura de referência para desenvolvimento de sistemas WEB
que utiliza a linguagem Java.
Nos anos 90 o SQL se firma como linguagem padrão para acesso a bancos de dados relacionais permitindo que os
sistemas possam ser divididos em três camadas: cliente, servidor e banco de dados, simultaneamente o paradigma da
programação estruturada evolui para o da programação orientada a objetos. As camadas de dados se tornam mais
independentes da camada que trata da aplicação em si. Como uma evolução natural, o desenvolvimento em "n"
camadas permite desmembrar mais ainda essas camadas, com componentes especializados que podem ser
substituídos sem modificar o resto da estrutura do programa.
A tecnologia J2EE permite o desenvolvimento de aplicações em "n" camadas, separando camadas de apresentação,
negócio e dados. A tecnologia da suporte a recursos de conexão de banco de dados compartilhada "pooling",
componentes para publicação de dados dinânicos na WEB (JSP, Servlet), componentes de negócio e persistência
(EJB), entre outros. O J2EE incorpora recursos novos a linguagem Java sendo, por isso, mais que uma metodologia.
Servidor de Aplicações
Servidor de Aplicação (SA) J2EE é um software desenvolvido para disponibilizar uma aplicação J2EE. Além de
disponibilizar aplicações, os SA's também oferecem vários recursos ao desenvolvedor como pool de conexão,
controle de transação, segurança, gerenciamento de recursos, etc.
Dentre os SA's comerciais disponíveis, pode-se citar o WebSphere Application Server da IBM e o WebLogic Server
da BEA Systems. Existem também servidores de software livre, como é o caso do JBoss.
Para aplicações mais simples, geralmente não há necessidade de utilizar EJB's, logo é possível utilizar um Container
Servlet/JSP no lugar de um SA. O container mais famoso no mercado é o Tomcat, mas existem outros containers
muito utilizados como o Jetty e o Resin. Todos estes containers são Open-Source.
Em java é possível escrever aplicações independentes de SA, ou seja, desenvolver aplicações que rodem em quaquer
SA. Porém, na maioria das vezes isto não é necessário.
J2EE 32
Servlets
Conceitos Básicos
Servlets (servidorzinho) são classes Java que extendem javax.servlet.http.HttpServlet. Para começar a desenvolver
servlets é preciso conhecer alguns conceitos:
•• Request
Pensando em um Site de comércio web, quando alguem clica em um botão ou link, é feita um Request ao servidor.
Quando este request chega ao Container, ele é encapsulado em um javax.servlet.http.HttpServletRequest
•• Response
Após processar a requisição do cliente, o Container envia um Response ao Browser que enviou aquele Request. Ele é
encapsulado em um javax.servlet.http.HttpServletResponse
•• Método doGet
È a maneira mais simples de se informar parâmetros a servlet. Os parâmetros são passados via QueryString, ou seja,
após a URL da servlet, adicione um ?e o nome=valor do parâmetro, caso haja mais de um, separe-os por&conforme
o ex.:
 http://localhost:8080/servlet?parametro1=valor1&parametro2=valor2
• Método doPost'
É similar ao metodo doGet, porém os parâmetros não são visíveis naQueryStringcomo no doGet.
Html
Sendo mais prático, abaixo está o código de uma página que chama aMinhaPrimeiraServletutilizando o metodo
doGet:
<html>
 <body>
 <form action="servlet?parametro1=valor1&parametro2=valor2" method="get">
 <input type="submit" value="Enviar" />
 </form>
 </body>
</html>
Se você não entendeu ou tem pouco conhecimento em html, é recomendado que você estude isto primeiro.
MinhaPrimeiraServlet
Quando o usuário clicar em Enviar, um Request vai chegar ao Container que chamará a servlet:
public class MinhaPrimeiraServlet extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse resp)
 throws Exception {
 //Obtêm o PrintWriter que será utilizado para printar o html
 PrintWriter out = resp.getWriter();
 out.println("Minha Primeira Servlet");
 out.close();
J2EE 33
 }
}
Configuração
Para ser acessível, a servlet tem que estar configurada em um arquivo XML denominadoDeployment Descriptor, que
leva o nome de web.xml.
De modo simplista, a configuração desta servlet seria:
 <servlet>
 <servlet-name>MinhaPrimeiraServlet</servlet-name>
 <servlet-class>wikibooks.MinhaPrimeiraServlet</servlet-class>
 </servlet>
 <servlet-mapping>
 <servlet-name>MinhaPrimeiraServlet</servlet-name>
 <url-pattern>/servlet</url-pattern>
 </servlet-mapping>
J2ME
J2ME é uma plataforma da Sun Microsystems que usa a linguagem Java para o desenvolvimento de aplicativos para
dispositivos móveis como celulares, palms ou pocketpcs.
Esse Wikibook é destinado ao aprendizado da programação na plataforma J2ME.
Audio
Por faltar instruções
Esta página precisa ser reciclada (discuta).
Ao melhorá-la, você estará ajudando o Wikilivros.
Este livro ou módulo precisa ser formatado segundo o modelo wiki e/ou organizado conforme as convenções do Wikilivros. (discuta)
Por favor ajude a formatar este módulo de acordo com as diretrizes estabelecidas no livro de estilo.
Editor: considere colocar o mês e o ano da marcação.
 import java.io.IOException;
 import java.io.InputStream;
 import javax.microedition.lcdui.Display;
 importjavax.microedition.lcdui.Form;
 import javax.microedition.lcdui.Gauge;
 import javax.microedition.media.Manager;
 import javax.microedition.media.MediaException;
 import javax.microedition.media.Player;
 import javax.microedition.media.control.VolumeControl;
 import javax.microedition.midlet.MIDlet;
 import javax.microedition.midlet.MIDletStateChangeException;
J2ME 34
 public class SoundTest extends MIDlet implements Runnable
 {
 private Display display;
 private Player player;
 private Form form;
 private Gauge volume;
 private VolumeControl vc;
 private int value=10;
 public SoundTest()
 {
 try
 {
 display = Display.getDisplay(this);
 form = new Form("MP3");
 volume = new Gauge("Volume",true,100,10);
 form.append(volume);
 // form.setItemStateListener(this);
 display.setCurrent(form);
 }
 catch (Exception ex)
 {
 System.out.println(ex);
 }
 }
 public void startApp() throws MIDletStateChangeException
 {
 playMP3();
 Thread t = new Thread(this);
 t.start();
 }
 public void pauseApp()
 {
 }
 public void destroyApp(boolean unconditional)
 {
 }
 public void playMP3()
 {
 try
 {
 InputStream is = getClass().getResourceAsStream("/t.mid");
 player = Manager.createPlayer(is,"audio/midi");
 player.realize();
J2ME 35
 vc = (VolumeControl) player.getControl("VolumeControl");
 player.prefetch();
 if(vc != null)
 {
 vc.setLevel(value);
 }
 player.start();
 }
 catch(IOException ioe)
 {
 ioe.printStackTrace();
 }
 catch(MediaException me)
 {
 me.printStackTrace();
 }
 }
 public void run()
 {
 while (true)
 {
 vc.setLevel(volume.getValue());
 try
 {
 Thread.sleep(20);
 }
 catch (InterruptedException ie)
 {
 }
 }
 }
 }
Canvas
Durante as primeiras lições trabalhamos com a chamada "interface de alto nível", ou seja, aplicávamos os comandos
para a interface pré construída no celular executa-las, agora iremos começar a trabalhar com a chamada "interface de
baixo nível", ou seja, iremos dar os comandos diretamente para os gráficos, trabalhando com a manipulação de
pixels. Para isso iremos usar amplamente a classe Canvas.
Estrutura Canvas
Primeiramente precisamos criar uma classe exclusiva separada da classe principal para trabalhar com o Canvas, essa
também será importada do pacote javax.microedition.lcdui, e irá estender a classe Canvas.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
J2ME 36
public class ClasseMeuCanvas extends Canvas {
}
Agora devemos colocar o método paint() que entra como parâmetro um objeto da classe Graphics que irá controlar
o que irá ser exibido no canvas.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 public void paint(Graphics meuGrafico){
 }
}
Agora na classe principal, a chamada do objeto da ClasseMeuCanvas é feita do mesmo modo das chamadas dos
outros objetos, através de um método do objeto Display, vejamos abaixo o conteúdo dos 2 arquivos, o
ClasseMeuCanvas.java e o ClassePrincipal.java.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 public void paint(Graphics meuGrafico){
 }
}
//arquivo ClassePrincipal.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ClassePrincipal extends MIDlet {
 Display meuDisplay = Display.getDisplay(this);
 ClasseMeuCanvas meuCanvas = new ClasseMeuCanvas();
 public void startApp() {
 meuDisplay.setCurrent(meuCanvas);
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
}
J2ME 37
Desenhando objetos primitivos
Agora que já sabemos a estrutura de um canvas, vamos desenhar algo na tela, para isso iremos usar o objeto do tipo
Graphics e aplicar sobre ele métodos pré-fabricados pelo J2ME que irão desenhar coisas simples na tela como
strings, retângulos, arcos, triângulos, etc. Esses comandos ficarão dentro do método paint().
Desenhando uma linha
Vamos desenhar uma linha simples, vamos usar o método drawLine() da classe Graphics, ele irá receber 4
atributos: o 1ª será o pixel x de onde a linha vai começar, o 2º será o pixel y de onde a linha vai começar, o 3º o pixel
x onde a linha vai terminar, o 4º será o pixel y onde a linha vai terminar.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 public void paint(Graphics meuGrafico){
 meuGrafico.drawLine(30, 40, 70, 90);
 }
}
Desenhando um retângulo
Vamos desenhar um retângulo, vamos usar o método drawRect() da classe Graphics, ele irá receber 4 atributos: o
1ª será o pixel x de onde o retângulo vai começar, o 2º será o pixel y de onde o retângulo vai começar, o 3º será a
largura em pixels do retângulo, o 4º será a altura em pixels do retângulo.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 public void paint(Graphics meuGrafico){
 meuGrafico.drawRect(20, 30, 60, 70);
 }
}
Desenhando um retângulo cheio
Você viu anteriormente como desenhar um retângulo na tela, só que no exemplo anterior esse retângulo era oco por
dentro, ou seja, você só desenhou as bordas do retângulo, vamos agora fazer um retângulo totalmente pintado por
dentro, para isso vamos usar o método fillRect() da classe Graphics, ele irá receber os mesmos atributos do método
drawRect(): o 1ª será o pixel x de onde o retângulo vai começar, o 2º será o pixel y de onde o retângulo vai começar,
o 3º será a largura em pixels do retângulo, o 4º será a altura em pixels do retângulo.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 public void paint(Graphics meuGrafico){
 meuGrafico.fillRect(20, 30, 50, 60);
 }
}
J2ME 38
Desenhando uma String
Vamos desenhar uma string, note que não vamos simplesmente colocar a string na tela, vamos desenhá-la, apesar
disso o J2ME já vem com uma fonte string padrão para o Canvas. Vamos usar o método drawString() da classe
Graphics, ele irá receber 4 atributos: o 1º será o texto da string, o 2º será o pixel x de onde vai ser desenhado, o 3º
será o pixel y de onde vai ser desenhado, o 4º será a "raiz" do objeto, ou seja, onde será a referência dos pixels x e y.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 public void paint(Graphics meuGrafico){
 meuGrafico.drawString("Texto da string", 50, 100, 
Graphics.LEFT|Graphics.TOP);
 }
}
Nesse caso a raiz do pixel x está no ponto esquerdo do objeto (Graphics.LEFT), e a raiz do pixel y está no ponto
acima do objeto (Graphics.TOP). Você também pode colocar a raiz do pixel x na direita (Graphics.RIGHT) ou no
centro (Graphics.HCENTER), e a raiz do pixel y na parte de baixo (Graphics.BOTTOM) ou no centro
(Graphics.VCENTER).
Colocando uma cor
Você pode setar cores para desenhar objetos com cores diferentes, para isso use o método setColor() da classe
Graphics entrando como parâmetro os valoresdas cores vermelho, verde e azul respectivamente.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 public void paint(Graphics meuGrafico){
 meuGrafico.setColor(255, 0, 0);
 meuGrafico.drawRect(50, 50, 20, 30);
 }
}
Pegando uma cor
Para pegar uma cor vamos utilizar o método getColor() da classe Graphics que irá retornar um inteiro com os
valores RGB agrupados.
Primeiro vamos criar a variável inteira que irá armazenar a cor.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 int corPega;
 public void paint(Graphics meuGrafico){
 }
}
J2ME 39
Agora vamos setar alguma cor através do método setColor().
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 int corPega;
 public void paint(Graphics meuGrafico){
 meuGrafico.setColor(255, 128, 64);
 }
}
Agora vamos utilizar o método getColor(), e armazenar o resultado na variável corPega.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 int corPega;
 public void paint(Graphics meuGrafico){
 meuGrafico.setColor(255, 128, 64);
 corPega = meuGrafico.getColor();
 }
}
O valor obtido na variável corPega é equivalente ao número hexadecimal agrupado FF, 80, 40 que se traduz em
inteiro como 255, 128, 64.
Desenhando uma imagem
Vimos anteriormente as primitivas que o J2ME nos oferece, agora vamos mostrar na tela uma imagem feita por nós
mesmo. Primeiro crie a sua imagem em algum editor externo a sua escolha, salve a imagem e coloque no mesmo
diretório onde se localiza o arquivo ClasseMeuCanvas.java.
Agora primeiramente vamos incluir o pacote java.io que contém o tratamento de exceção.
//arquivo ClasseMeuCanvas.java
import java.io.*;
import javax.microedition.lcdui.*;
Agora criar uma variável da classe Image.
//arquivo ClasseMeuCanvas.java
import java.io.*;
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 Image minhaImagem;
 public void paint(Graphics meuGrafico){
 }
}
Agora vamos usar o construtor para inicializar o objeto minhaImagem. Para isso vamos jogar a exceção.
J2ME 40
//arquivo ClasseMeuCanvas.java
import java.io.*;
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 Image minhaImagem;
 ClasseMeuCanvas throws Exception {
 }
 public void paint(Graphics meuGrafico){
 }
}
Agora dentro do construtor vamos inicializar o objeto minhaImagem utilizando o método createImage() da classe
Image, ele receberá como parâmetro o endereço da imagem que você criou.
//arquivo ClasseMeuCanvas.java
import java.io.*;
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 Image minhaImagem;
 ClasseMeuCanvas throws Exception {
 minhaImagem = minhaImagem.createImage("/Minha Imagem.png");
 }
 public void paint(Graphics meuGrafico){
 }
}
Agora dentro do método paint() vamos botar a nossa imagem para ser exibida, utilizando o método drawImage() da
classe Graphics, como parâmetro ele irá receber 4 atributos: o 1ª será o nome da variável da classe Image, o 2º será
o pixel x de onde vai ser desenhado, o 3º será o pixel y de onde vai ser desenhado, o 4º será a "raiz" do objeto, ou
seja, onde será a referência dos pixels x e y.
//arquivo ClasseMeuCanvas.java
import java.io.*;
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 Image minhaImagem;
 ClasseMeuCanvas throws Exception {
 minhaImagem = minhaImagem.createImage("/Minha Imagem.png");
 }
 public void paint(Graphics meuGrafico){
 meuGrafico.drawImage(minhaImagem, 30, 40, 
Graphics.LEFT|Graphics.TOP);
 }
J2ME 41
}
Criando uma atualização de tela
Vimos como colocar objetos na tela através de um comando, agora vamos ver como se cria uma atualização de tela,
para isso dentro do método paint() iremos usar o método repaint() que irá funcionar como um "retornador" para o
método paint() ser executado novamente. Para isso vamos primeiro criar uma variável inteira i na ClasseMeuCanvas
e vamos inicia-la com o valor 0.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 int i=0;
 public void paint(Graphics meuGrafico){
 }
}
Agora vamos desenhar um simples retângulo na tela, vamos usar como os primeiros atributos a variável i que
criamos (que no caso vale 0).
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 int i=0;
 public void paint(Graphics meuGrafico){
 meuGrafico.drawRect(i, i, 100, 100);
 }
}
Vamos agora dar um incremento no i, para sempre que se retornar ao paint() seu valor ser acrescido de +1.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 int i=0;
 public void paint(Graphics meuGrafico){
 meuGrafico.drawRect(i, i, 100, 100);
 i++;
 }
}
Vamos agora finalmente aplicar o método repaint() dentro do método paint(), e ver a movimentação do nosso
retângulo na tela. Vamos mostrar abaixo o código completo.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 int i=0;
J2ME 42
 public void paint(Graphics meuGrafico){
 meuGrafico.drawRect(i, i, 100, 100);
 i++;
 repaint();
 }
}
Comandos
Vamos entrar agora na parte de entrada de comandos através das teclas do celular, primeiramente a classe Canvas
tem 3 métodos pré-definidos para isso, são o keyPressed() para quando se aperta a tecla do celular, keyRepeated()
para quando se segura a tecla do celular e keyReleased() para quando se solta a tecla do celular.
Primeiramente para usá-lo vamos fazer a chamada do método fora do médodo paint(), o método deverá ser do tipo
protected.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 protected void keyPressed(int getTecla){
 }
 public void paint(Graphics meuGrafico){
 repaint();
 }
}
Agora vamos definir uma ação para o caso de o usuário apertar a tecla que queremos, no caso vamos escolher a tecla
1 do celular, vamos colocar um if dentro do método keyPressed(). Você pode comparar com as constantes
'KEY_NUM1, KEY_NUM2, ..., KEY_STAR, KEY_POUND.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 protected void keyPressed(int getTecla){
 if (getTecla == KEY_NUM1);
 }
 public void paint(Graphics meuGrafico){
 repaint();
 }
}
Agora vamos colocar uma ação para quando pressionarmos a tecla, nesse caso vamos exibir uma mensagem no
console.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
J2ME 43
public class ClasseMeuCanvas extends Canvas {
 protected void keyPressed(int getTecla){
 if (getTecla == KEY_NUM1){
 System.out.println("Pressionou tecla 1 do celular");
 }
 }
 public void paint(Graphics meuGrafico){
 repaint();
 }
}
Você pode usar o mesmo processo apenas trocando método keyPressed() por keyRepeated() ou keyReleased().
Comandos de jogo
Vimos como obter as teclas do teclado padrão do celular (apenas os números e as teclas * e #), agora vamos ver
como pegar as teclas auxiliares.
Primeiramentevamos usar o mesmo método keyPressed(), keyRepeated() ou keyReleased() do módulo anterior.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 protected void keyPressed(int getTecla){
 }
 public void paint(Graphics meuGrafico){
 repaint();
 }
}
Agora as constantes das teclas auxiliares não podem ser pegas de forma direta, para isso vamos usar o método
getKeyCode() e como parâmetro vamos entrar o código da tecla que queremos, nesse caso usamos a tecla FIRE que
fica no meio das setas do celular.
//arquivo ClasseMeuCanvas.java
import javax.microedition.lcdui.*;
public class ClasseMeuCanvas extends Canvas {
 protected void keyPressed(int getTecla){
 if (getTecla == getKeyCode(FIRE));
 }
 public void paint(Graphics meuGrafico){
 repaint();
 }
}
J2ME 44
Agora vamos colocar uma ação para quando pressionarmos a tecla, nesse caso vamos exibir uma mensagem no
console.
public class ClasseMeuCanvas extends Canvas {
 protected void keyPressed(int getTecla){
 if (getTecla == getKeyCode(FIRE)){
 System.out.println("Pressionou tecla FIRE do celular");
 }
 }
 public void paint(Graphics meuGrafico){
 repaint();
 }
}
CommandListener
Agora entraremos na parte interativa onde o usuário pode interagir com as funções do celular através do teclado ou
da caneta digital.
Estrutura básica do CommandListener
Antes de trabalharmos para receber comandos, na nossa classe Midlet precisamos implementar a classe
CommandListener.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 public void startApp() {
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
}
Agora vamos inserir o método commandAction() que iremos usar diretamente para manipular as ações do teclado,
esse método deverá sempre ter 2 parâmetros, o primeiro é o objeto da classe Command (que veremos logo após) e o
outro é o objeto Displayable.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 public void startApp() {
 }
J2ME 45
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
 public void commandAction(Command pegarComando, Displayable 
pegarDisplay){
 }
}
Criando um comando
Para criar um comando primeiro precisamos intanciar uma variável do tipo Command.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 Command meuComando;
 public void startApp() {
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
 public void commandAction(Command pegarComando, Displayable 
pegarDisplay){
 }
}
Agora vamos criar o objeto Command, para isso vamos usar como parâmetro respectivamente: 1º o texto que será
exibido na tela, 2º o tipo de comando e 3º a prioridade do comando.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 Command meuComando = new Command("OK", Command.OK, 0);
 public void startApp() {
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
 public void commandAction(Command pegarComando, Displayable 
J2ME 46
pegarDisplay){
 }
}
Detectando a ação de um comando
Agora vamos para a parte prática, vamos detectar uma ação de comando pelo teclado do celular, já temos o objeto
Command criado, agora vamos criar uma condição caso ele seja apertado.
Como vimos anteriormente é dentro do método commandAction() que fazemos os trabalhos com comandos, é
através dos dos atributo do tipo Command que vamos fazer a comparação com o objeto Command externo que
criamos, e vamos exibir uma mensagem no console.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 Command meuComando = new Command("OK", Command.OK, 0);
 public void startApp() {
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
 public void commandAction(Command pegarComando, Displayable 
pegarDisplay){
 if(pegarComando == meuComando){
 System.out.println("Pressionou o botão OK");
 }
 }
}
Agora calma, AINDA não vai acontecer nada quando apertarmos o botão, para isso precisamos criar a tela que irá
"escutar" o comando que iremos colocar, podemos fazer a tela com qualquer objeto tipo Alert, TextBox, etc... no
nosso caso vamos usar um simples Form.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 Command meuComando = new Command("OK", Command.OK, 0);
 Form meuForm = new Form("Título do formulário");
 public void startApp() {
 }
J2ME 47
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
 public void commandAction(Command pegarComando, Displayable 
pegarDisplay){
 if(pegarComando == meuComando){
 System.out.println("Pressionou o botão OK");
 }
 }
}
Agora dentro do método startApp() vamos adicionar o comando à tela do Form através do método addCommand().
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 Command meuComando = new Command("OK", Command.OK, 0);
 Form meuForm = new Form("Título do formulário");
 public void startApp() {
 meuForm.addCommand(meuComando);
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
 public void commandAction(Command pegarComando, Displayable 
pegarDisplay){
 if(pegarComando == meuComando){
 System.out.println("Pressionou o botão OK");
 }
 }
}
Agora vamos adicionar o "escutador" no Form, para detectar se pressionamos ou não algum botão.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{
 Display meuDisplay = Display.getDisplay(this);
 Command meuComando = new Command("OK", Command.OK, 0);
 Form meuForm = new Form("Título do formulário");
J2ME 48
 public void startApp() {
 meuForm.addCommand(meuComando);
 meuForm.setCommandListener(this);
 }
 public void pauseApp() {
 }
 public void destroyApp(boolean unconditional) {
 }
 public void commandAction(Command pegarComando, Displayable 
pegarDisplay){
 if(pegarComando == meuComando){
 System.out.println("Pressionou o botão OK");
 }
 }
}
Por fim, colocamos normalmente o método setCurrent() da classe Display.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MinhaClasse extends MIDlet implements CommandListener{

Outros materiais

Materiais relacionados

Perguntas relacionadas

Perguntas Recentes