Java para Angolanos
Java para Angolanos
Java Standard
Java - 2
JAVA.LANG.......................................................................................................................................................73
JAVA.UTIL..........................................................................................................................................................81
JAVA.TEXT..........................................................................................................................................................82
JAVA.IO..............................................................................................................................................................93
THREADS............................................................................................................................................................101
JAVA.NET..........................................................................................................................................................102
JAVAX.SWING....................................................................................................................................................107
JAVA.SQL.JDBC...............................................................................................................................................122
FONTES DE PESQUISA................................................................................................................................136
Exercícios..........................................................................................................................................................137
Java - 3
Introdução
“Java é uma Linguagem de Programação e uma Plataforma de Desenvolvimento de Aplicações”
Site(s) http://java.sun.com/docs/white/langenv/Intro.doc2.html
Java - 4
Java possui a singular característica de ser compilada e interpretada obtendo o melhor desses dois
mecanismos de tradução/execução de programas. Primeiro o compilador Java transforma um
programa fonte em bytecodes e posteriormente, na execução, os bytecodes são interpretados pela
máquina virtual Java (JVM).
Com isso um programa Java é um conjunto de instruções para a JVM, dessa forma o mesmo é
independente de plataforma, pois basta que haja uma implementação de máquina virtual para a
plataforma a ser utilizada.
Java - 5
Observação : Esse foi o modelo inicial para execução de programas Java, a fim de possibilitar
independência de plataforma, sendo que atualmente o processo de interpretação foi substituído por
outra compilação, sendo que, não mais para bytecodes e sim para código executável dependente de
plataforma. Dessa forma a perda de performance com a interpretação foi eliminada e o programa em
bytecodes continua independente de plataforma, pois a MVJ de cada plataforma será responsável
pela compilação em executável.
Site(s) http://www.javasoft.com/products/hotspot/
Java - 6
Java como Plataforma de Desenvolvimento de Aplicações
O termo plataforma normalmente é definido como a combinação de sistema operacional mais
hardware, sendo que a plataforma Java é definida apenas em software, por isso o conceito de
máquina virtual.
A plataforma Java possui dois componentes:
1. Máquina Virtual Java (JVM)
2. Interface para Desenvolvimento de Aplicações (API Java)
Java - 7
Conceitos Básicos
A Máquina Virtual Java
A Especificação da Máquina Virtual Java define a JVM (Máquina Virtual Java) como:
Uma máquina imaginária que é implementada através da emulação em um software executado em
uma máquina real.
A Especificação da Máquina Virtual Java fornece as especificações da plataforma de hardware para
a qual todo o código Java está compilado. Essa especificação permite que os programas Java sejam
independentes de plataforma já que a compilação é feita para uma máquina imaginária. Cabe ao
Interpretador Java de cada plataforma de hardware assegurar a execução do código compilado para
a JVM.
A especificação da JVM fornece definições concretas para a implementação dos seguintes itens:
Conjunto de Instruções (equivalente ao conjunto de instruções de uma CPU)
Conjunto de registradores
Formato do arquivo de classe
Pilha
Heap (coletado como lixo)
Área da memória
Java - 8
Coleta de lixo (Garbage Collector)
Várias linguagens de programação permitem a alocação dinâmica da memória no tempo de
execução. O processo de alocação de memória varia baseado na sintaxe da linguagem, mas sempre
envolve o retorno de um ponteiro ao endereço inicial do bloco de memória.
Quando a memória alocada não é mais necessária (quando o ponteiro que faz referência à memória
está fora do escopo), é aconselhável que o ambiente do programa ou do tempo de execução
desaloque a memória para evitar que o programa seja executado com falta de memória.
No C e C++ (e outras linguagens), o desenvolvedor do programa é responsável pela desalocação da
memória. Esse procedimento algumas vezes pode ser trabalhoso, principalmente porque nem
sempre é possível saber antecipadamente quando a memória deve ser liberada. Os programas que
não são desalocados da memória podem, conseqüentemente, sofrer algum tipo de falha caso não
haja memória suficiente a ser alocada pelo sistema. Esses programas têm, portanto, vazamentos de
memória.
A linguagem Java realiza a liberação da memória, que antes era responsabilidade do programador,
fornecendo um thread em segundo plano, em nível de sistema, que registra cada alocação de
memória e mantém uma contagem do número de referências feitas a cada ponteiro de memória.
Durante os ciclos ociosos, no tempo de execução da Máquina Virtual Java, o thread da coleta de lixo
verifica se existe algum ponteiro de memória em que o número de referências tenha baixado para 0.
Se houver, a memória marcada pelo thread da coleta de lixo será varrida (desalocada).
A coleta de lixo ocorre automaticamente durante o tempo de vida de um programa Java e dispensa a
desalocação de memória, além de eliminar os vazamentos de memória.
Java - 9
Java Development Kit - JDK
Conjunto de ferramentas para o desenvolvimento em JAVA fornecidas pela Sun, sendo os principais:
Ferramenta Descrição
javac Compilador
java Executor de Programas
javadoc Gerador de documentação da API
appletviewer Visualizador de applet
jar Gerenciador de arquivos .jar
jdb Debuger
javap Faz engenharia reversa de classes
Versões Existentes: JDK 1.0.x JDK 1.1.x JDK 1.2.x JDK 1.3.x JDK 1.4.x
Site(s) http://www.javasoft.com/products/
Java - 10
Ambiente Integrado de Desenvolvimento - IDE
Ambiente com interface gráfica que interage com o JDK para oferecer um ambiente de
desenvolvimento mais produtivo.
Exemplos:
Inprise JBuilder Microsoft Visual J++ Symantec Visual Café
Tek-Tols Kawa Sun Forte CE
Java - 11
Exercício :
/**
* Demonstração de um Application Java
*/
/* Definição do pacote */
package introducao;
/* Definição da classe */
public class Aplicacao {
Java - 12
Tipos de Programas Java: Applications, Applets e Servlets
A linguagem Java possui diferentes tipos de programas, sendo que a classificação é feita através da
modalidade/localização de execução dos mesmos.
Applications
Aplicações stand-alone com "todos" os recursos de acesso ao Sistema Operacional. Semelhantes
aos programas convencionais.
Applets
Programas que são carregadas através de uma rede TCP/IP (Internet/Intranet) e são executadas na
JVM de um browser. A máquina virtual impõe sérias restrições aos Applets, em relação ao uso de
recursos do sistema operacional local, para evitar problemas de segurança.
Servlets
Programas que são executadas remotamente no servidor Web através de um Gerenciador de
Servlets (Servlet Engine). São utilizados em aplicações para Internet/Intranet, os quais são
executadas no servidor, evitando assim problemas de compatibilidade, distribuições de versões e
aumentando a segurança.
Java - 13
Estrutura de um Programa Java
Todo programa Java é uma classe e mesmo possuindo três possíveis modalidades para programas
Java (Applications, Applets e Servlets) a estrutura básica é sempre a mesma : "uma classe".
Um Programa Java é organizado em arquivos texto com a extensão .java e cada arquivo contem
apenas uma classe pública. O nome do arquivo da classe Java deve possuir exatamente o mesmo
nome da classe pública, pois a máquina virtual procura o arquivo da classe através do nome da
classe. O comando package informar a qual pacote (diretório) a classe pertence. Quando uma
classe utilizar outras classes, estas devem ser importadas através do comando import, o qual deve
indicar o pacote da classe importada e o seu nome.
/* Definição do pacote */
package introducao;
/* Corpo da Classe */
/* Atributos */
/* Construtore(s) */
public ClasseJava ( /* Parâmetros */ ) {
/* procedimentos de inicialização da classe */
}
/* Finalizador */
protected void finalize () {
/* procedimentos de finalização da classe */
}
/* Métodos */
}
Java - 14
Aplicações Java - Application
Como demonstrado anteriormente, a linguagem de programação Java possui três tipos de
programas. Dessa forma iremos nos aprofundar um pouco mais no tipo Application, pois os recursos
básicos da linguagem Java serão demonstrados através de Application.
Um application Java nada mais é que uma classe Java possuindo um método específico que o
caracteriza como uma aplicação para a Máquina Virtual Java. Dessa forma, todo programa/classe
Java que possuir o método com o seguinte assinatura “public static void main (String[]
argumentos){ }“ será um application. E o corpo desse método será executado automaticamente
quando o programa for submetido a JVM. Um detalhe importante é que o array String[] argumentos
contém os parâmetros de linha de comando passados ao programa.
/* Definição do pacote */
package introducao;
/* Definição da classe */
public class Aplicacao {
Java - 15
A Linguagem Java
Comentários
Existem três tipos de comentários em Java, sendo eles :
// Usado para indicar comentários em uma única linha, pode ser inserido em qualquer
posição de uma linha, e todo o texto até o final do marcador de linha é tratado como
comentário.
/* */ Usados para indicar comentários que se estendem por uma ou mais linhas.
/** */ Comentário de documentação. Devem ser inseridos imediatamente antes de uma
declaração de classes, variável ou método e indicam que o comentário deve ser incluído
em qualquer documentação gerada automaticamente (como os arquivos HTML gerados
pelo comando javadoc)
//Definição do pacote
package introducao;
//Definição de classe
public class Comentarios {
/**
* Método main da Aplicação
* @param args parâmetros da linha de comando
*/
public static void main(String[] args) {
/*
* O laço abaixo irá passar por todos os parâmetros fornecidos na linha
* de comando e irá escrevê-los na saída padrão
*/
int i = 0; // Variável inteira
System.out.print("Parâmetros : ");
while (i < args.length) {
/* Ecreve posição i do array args na saída padrão */
System.out.print(args[i] + " ");
i++; // Incrementa a variável i de 1 unidade
}
}
}
Java - 16
Identificadores
Os identificadores em Java devem seguir as seguintes regras :
1. A primeira posição deverá ser com uma letra, “_” ou “$”
2. Ser formado por caracteres UNICODE
3. Não ser uma palavra reservada
4. Não ser igual as literais : true, false ou null
5. Não ser repetido dentro do seu escopo
Observação : Os identificadores Java são case-sensitive
Palavras Reservadas
abstract double int strictfp
boolean else interface super
break extends long switch
byte final native synchronized
case finally new this
catch float package throw
char for private throws
class goto protected transient
const if public try
continue implements return void
default import short volatile
do instanceof static while
Java - 17
Variáveis e Constantes
Podem ser declaradas em qualquer lugar dentro de uma classe ou de um método. Uma constante é
definida com a palavra reservada final e o seu conteúdo uma vez atribuído não poderá mais ser
alterado.
A declaração de variáveis e constantes em Java é feita colocando o identificador do tipo seguido do
identificador da variável.
Java - 18
Tipo caracter
Tipo Tamanho em bits Faixa
char 16 UNICODE - 65536 caracteres possíveis
Observação: Um caracter é delimitado por apóstrofos ‘caracter’. O que causa confusão, pois as
Strings são delimitadas por aspas “String”.
Java - 19
Tipo Lógico
Tipo Faixa
boolean true ou false
Java - 20
Programa(s) Demonstração introducao.TiposPrimitivos.java
/**
* Demonstração de Tipos Primitivos
*/
package introducao;
/*
* quando uma variável é declarada como final a mesmo não pode ter seu
* conteúdo alterado
*/
final char FLAG = 'F';
/*
* Erro, pois literais numéricas com casas decimais são double
*/
// nota1 = 8.5
nota1 = 8.5f; // conversão explicita para float
nota2 = 7.0f; // conversão explicita para float
nota3 = (float) 9.0; // conversão explicita para float
System.out.println("Dados do Aluno");
System.out.print("Idade \t= " + idade + "\n" );
System.out.println("Sexo \t= " + sexo);
System.out.println("Notas \t= " +
nota1 + "\t" +
nota2 + "\t" +
nota3);
System.out.println("Achou \t= " + achou);
System.out.println("Flag \t= " + FLAG);
}
}
Java - 21
Arrays
São estruturas homogêneas e estáticas. A linguagem Java possui somente arrays unidimensionais,
sendo que arrays multidimensionais podem ser simulados, através da definição de array de array. A
propriedade length representa o tamanho do array. A primeira posição de um array é 0 e a última
(length – 1)
package introducao;
Java - 22
Lendo e Escrevendo Variáveis
A linguagem Java não possui comandos específicos para leitura de variáveis, pois a entrada e saída
de dados são tratadas de forma independente de dispositivo, através das classes do pacote
java.io. Dessa forma foi criada uma classe (Keyboard), contendo métodos "estáticos" para leitura
de variáveis do tipo int, char, float e String, afim de facilitar a prática dos conceitos visto
durante o curso.
System.out.print(String);
System.out.println(String); //Salta Linha
Observação: Tipos primitivos/“objetos” podem ser concatenados com o sinal "+".
package introducao;
import util.Keyboard;
Java - 23
Operadores
Aritméticos
Operador Uso Descrição
+ op1 + op2 Adiciona op1 e op2
- op1 - op2 Subtrai op2 de op1
* op1 * op2 Multiplica op1 por op2
/ op1 / op2 Divide op1 por op2
% op1 % op2 Resto de op1 / op2
Incremento
Operador Uso Descrição
++ var++ usa a variável e depois incrementa
++var incrementa a variável e depois usa
-- var-- usa a variável e pois decrementa
--var decrementa a variável e depois usa
Relacionais
Operador Descrição
== Igual
!= Diferente
< Menor
> Maior
<= Menor ou igual
>= Maior ou igual
Java - 24
Atribuição
Operador Uso Equivale a
=
+= Op1 += op2 Op1 = op1 + op2
-= Op1 -= op2 Op1 = op1 - op2
*= Op1 *= op2 Op1 = op1 * op2
/= Op1 /= op2 Op1 = op1 / op2
%= Op1 %= op2 Op1 = op1 % op2
&= Op1 &= op2 Op1 = op1 & op2
|= Op1 |= op2 Op1 = op1 | op2
^= Op1 ^= op2 Op1 = op1 ^ op2
<<= Op1 <<= op2 Op1 = op1 << op2
>>= Op1 >>= op2 Op1 = op1 >> op2
>>>= Op1 >>>= op2 Op1 = op1 >>> op2
Java - 25
Binários
Operador Descrição
>> shift binário para direita
<< shift binário para esquerda
>>> shift binário para direita (unsigned)
& AND binário
| OR binário
^ XOR binário
~ complemento binário
Lógicos
Operador Descrição
&& AND com curto-circuito
|| OR com curto-circuito
! NOT
& AND sem curto-circuito
| OR sem curto-circuito
Java - 26
Condicional
Operador Uso Descrição
?: expressão_logica?val1:val2 Caso a expressão lógica seja verdade o val1 será
retornado, caso contrário será retornado val2
Descrição Operadores
operadores do sufixo [ ] . () Chamada de função
operadores unários !, ~, +, -, ++, --
Criação (Type-cast), new
multiplicativos *, /, %
aditivos +, -
SHIFT <<, >>, >>>
relacional <, >, <=, >= instanceof
igualdade ==, !=
AND binário &
XOR binário ^
OR binário |
AND lógico &&
OR lógico ||
Condicional ?:
Atribuição +=, -=, *=, /=, %=, &=, ^=, |=, <=, <=, >>, >=, >>, =
Java - 27
Programa(s) Demonstração introducao.Operadores.java
/**
* Demonstração do Operadores
*/
package introducao;
import util.Keyboard;
public class Operadores {
public static void main(String[] args) {
/* declarando e inicializando 3 variáveis inteiras */
int i1 = 7;
int i2 = 3;
int i3;
i3 = i1 + i2; // adição
i3 = i1 - i2; // subtração
i3 = i1 * i2; // multiplicação
i3 = i1 / i2; // divisão inteira, pois n1 e n2 são do tipo int
i3 = i1 % i2; // resto da divisão inteira
/* declarando e inicializando 3 variáveis float */
float f1 = 12.8f; // conversão explícita para float
float f2 = 6.4f;
float f3;
f3 = i1 * f2; // conversão implícita para float
f3 = f2 / i2; // divisão float, pois o numerador é float
f3++; // incremento
f3--; // decremento
f1 = ++f2 + f3; // a variável i2 será incrementada antes da atribuição
f1 = f2++ + f3; // a variável i2 será incrementada após a atribuição
/* Operador relacional */
System.out.println( f1 > f2 ? f1 : f2 );
System.out.println( "f1 = " + f1 );
System.out.println( "f2 = " + f2 );
/* Calculo do preço de venda um produto baseado no preço de compra e
e no percentual de lucro */
float preçoCompra;
float percentualLucro;
System.out.print( "Preço de Compra : " );
preçoCompra = Keyboard.readFloat();
System.out.print("Percentual de Lucro : ");
percentualLucro = Keyboard.readFloat();
float lucro = preçoCompra * (percentualLucro/100);
float preçoVenda = preçoCompra + lucro;
System.out.println("Preço de Compra : " + preçoCompra +
"\nPercentual de Lucro : " + percentualLucro +
"\nLucro : " + lucro +
"\nPreço de Venda : " + preçoVenda);
int i = 10;
System.out.println( " i " + i );
i = i << 1;
System.out.println( " i " + i );
i = i >> 2;
System.out.println( " i " + i );
int a = 5;
int b = 10;
int c = a | b;
int d = a & b;
System.out.println( "a = " + a + "\nb = " + b +
"\nc = " + c + "\nd = " + d);
}
}
Java - 28
Comandos
Sequência { sequência }
Cria uma seqüência, a qual agrupa comandos e variáveis. Quando uma sequência possuir apenas
um comando os operadores { e } são opcionais, caso contrários são obrigatórios e cada comando
dentro da sequência deve ser terminado por “;”
Java - 29
Comando if – else
Comando de seleção, o qual permite analisar uma expressão lógica e direcionar a execução do
programa. Caso a expressão lógica seja verdadeira (true) a sequência do if será executado e
caso a expressão lógica seja falsa (false), e exista a cláusula else, a sequência do else será
executada.
if ( expressão_lógica )
Sequência;
if ( expressão_lógica )
Sequência_1;
else
Sequência_2;
if ( expressão_lógica )
Sequência_1;
else if ( expressão_lógica )
Sequência_2;
else if ( expressão_lógica )
Sequência_3;
else if ( expressão_lógica )
Sequência_4;
else
Sequência_5;
Java - 30
Programa(s) Demonstração comandos.ComandoIF.java
/**
* Demonstração do comando if else
*/
package comandos;
import util.Keyboard;
Java - 31
Comando switch
Compara (igualdade) uma variável ( byte, char, short ou int ) a uma relação de valores,
permitindo associar comandos a cada valor da relação.
switch (variável) {
case valor1 : sequência_1;
case valor2 : sequência2;
...
case valorN : sequênciaN;
[ default : sequênciaDefault; ]
}
Obs : O comando break normalmente é utilizado como último comando de cada sequência, indicando
que, quando uma sequência for executada todas as outras serão ignoradas.
Java - 32
Programa(s) Demonstração comandos.ComandoSwitch.java
/**
* Demonstração do comando switch
*/
package comandos;
import util.Keyboard;
Java - 33
Comando while
Executa a sequência do comando enquanto a expressão lógica for verdadeira. Sendo que, antes de
cada execução a expressão lógica é analisada.
while ( expressão_lógica )
Sequência;
package comandos;
import util.Keyboard;
Java - 34
Comando do while
Executa a sequência do comando enquanto a expressão lógica for verdadeira. Sendo que, após a
execução da sequência a expressão lógica é analisada.
do
Sequência;
while ( expressão_lógica );
package comandos;
import java.lang.String;
import util.Keyboard;
Java - 35
Comando for
Executa a sequência do comando enquanto a expressão lógica for verdadeira. Sendo que permite
inicializar variável, na entrada do comando e incrementar variável a cada repetição.
package comandos;
import util.Keyboard;
Java - 36
Comando break
Força a saída de um comando de repetição ou do comando switch
Comando continue
Força o início da próxima iteração de um comando de repetição
package comandos;
Java - 37
Exercício(s) Exercício 2: Resolva os problemas abaixo com applications Java
Problema 1: "Leia um valor inteiro representando o valor solicitado para saque num caixa
eletrônico, em seguida, sabendo que o caixa está alimentado com notas de 1, 5, 10, 50 e 100 reais,
calcule e escreva quantas notas de cada valor serão necessárias para atender a solicitação de
saque"
Problema 3: Ler três valores float e imprimir se estes podem ou não formar os lados de um
triângulo e qual triângulo seria (Equilátero, Isóceles ou escaleno).
Observação: Para formar os lados de um triângulo cada um dos valores deve ser menor que a
soma dos outros dois. Um triângulo pode ser : equilátero (3 lados iguais), isósceles (apenas 2 lados
iguais) e escaleno (3 lados diferentes).
Problema 4: Leia o nome, as três notas e o número de faltas de um aluno e calcule e imprima sua
situação ("Aprovado", "Reprovado por Falta" ou "Reprovado por média").
Observação: A média para aprovação é 5,0 (cinco) e o limite de faltas é 18 e a reprovação por falta
sobrepõe a reprovação pode média.
Problema 5: Leia um conjunto de números inteiros, onde o flag será o valor 0 (zero) e em seguida
escreva a média dos números lidos e o maior valor lido.
Problema 6: Leia (ou inicialize) um vetor com 10 elementos de números inteiros e em seguida leia
um conjunto de números inteiros e para cada número lido informe se o mesmo está ou não
presente no vetor.
Problema 7: Leia (ou inicialize) uma matriz 5x5 de números inteiros e em seguida escreva cada
valor presente na matriz e quantas vezes o mesmo aparece na matriz.
Java - 38
Introdução a Orientação a Objetos
A metodologia orientada a objetos representa um modo muito diferente dos enfoques usuais
sustentados por linguagens de programação estruturadas. Os recursos fornecidos pela metodologia
orientada a objetos suportam conceitos que tornam a solução de problemas pelo computador uma
atividade mais humanizada.
A programação orientada a objetos é um método relativamente novo na concepção e implementação
de sistemas de software. Seus maiores objetivos são aumentar a produtividade do programador
através de uma maior expansibilidade e reutilização de software, além de controlar a complexidade e
o custo de manutenção do mesmo.
A programação orientada a objetos centraliza-se nos seguintes conceitos : Tipos de dados abstratos,
herança e polimorfismo.
O objetivo principal da orientação a objetos é permitir que os programas sejam organizados de forma
a espelhar o modo como os objetos são organizados no mundo real.
Java - 39
Tipos de Dados Abstratos
Representam a parte central da metodologia orientada a objetos. Um tipo de dado abstrato é um
modelo formado por propriedades (atributos) e operações (métodos), onde estas definem o
comportamento básico do mesmo. Tipo de dado abstrato permite a modelagem de entidades do
mundo real de uma forma mais natural, pois estamos acostumados a lidar com "objetos" os quais
possuem características "atributos" e funcionalidades "métodos".
Classe
Representa a implementação de um tipo de dado abstrato, onde a mesma possuirá a declaração dos
atributos e implementação dos métodos. Uma classe representa o "molde" através do qual os objetos
serão criados, assim a definição de uma classe possui todas as propriedades e funções que
caracterizam o comportamento de qualquer objeto da classe.
Objeto
É a instância de uma classe possuindo valores próprios para os atributos definidos na classe.
Encapsulamento
Mecanismo utilizado com o objetivo de esconder detalhes de implementação das classes, permitindo
assim, maior domínio da complexidade, pois uma classe deve ofertar apenas o que ela pode fazer e
não como ela faz. Uma classe deve impedir o acesso aos seus atributos e métodos internos e
disponibilizar métodos públicos, os quais representam a "real" funcionalidade da classe. Dessa forma
é possível utilizar uma classe como um objeto real, pois assistimos televisão, ouvimos rádio, ..., sem
ter a menor idéia de como os mesmos funcionam internamente, basta apenas saber como interagir
(ligar, desligar, mudar de canal, ...) com os mesmos.
Java - 40
Mensagem
É a forma como um objeto interage com outro objeto, corresponde a chamada (execução) de um
método do objeto, o que pode exigir a passagem de parâmetro(s).
Herança
É a capacidade de herdar atributos e métodos de uma classe já definida (superclasse), possibilitando
estender o comportamento de uma classe adicionando novos atributos e métodos (subclasse). A
grande vantagem da herança é permitir o reaproveitamento de código, pois a subclasse recebe os
atributos e métodos da superclasse e permite a implementação de novas funcionalidades.
Java - 41
Orientação a Objetos em Java
Pacotes
As classes Java são organizadas em pacotes, os quais são estruturas de diretórios com a finalidade
de melhor agrupar e organizar as classes. Outras vantagens obtidas com a utilização de pacotes são
evitar conflito de nomes e proteger o acesso às classes. A criação de um pacote consiste na criação
de uma estrutura de diretório, colocação das classes nesses diretórios e definição do pacote nas
classes através do identificador package seguido do nome do pacote. Para utilizar classes é
necessário importá-las através do identificador import seguido de nomeDoPacote.NomeDaClasse
ou nomeDoPacote.* quando for necessário importar todas as classes do pacote (diretório).
Java - 42
Arquivos JAR (Java Archive) e CLASSPATH
São arquivos compactados e independentes de plataforma que agregam classes Java e arquivos
utilizados por estas classes. Os applets normalmente são colocados num arquivo .jar contendo os
arquivos .class, imagens e sons utilizados pelo applet, facilitando assim o download do mesmo.
Normalmente bibliotecas de classes são distribuídas em arquivos .jar, os quais podem ser inseridos
na variável CLASSPATH da máquina virtual Java, após o que as classes contidas no jar podem ser
importadas (utilizadas).
O arquivo .jar usa o mesmo algoritmo de compactação do programa zip, tendo a peculiaridade de
possuir no diretório meta-inf o arquivo Manifest.MF, o qual possui atributos para os arquivos
contidos no jar e pode indicar qual a classe main a ser executada quando o comando “java –jar
arquivo.jar” for executado.
Java - 43
Classe
Em Java uma classe é definida através da palavra reservada class, normalmente cada classe fica
num arquivo fonte separado. A definição de uma classe é dividida em declaração e corpo da classe,
onde na declaração são definidas a sua visibilidade, nome, superclasse e interfaces. E no corpo da
classe são definidos os atributos e os métodos. Normalmente as classes possuem um tipo de
método especial chamado construtor, o qual possui o mesmo nome da classe e é utilizado para
instanciar objetos da classe. É possível também definir um método com a assinatura protected
void finalize(), o qual será executado pelo garbage collector antes do objeto ser retirado da
memória.
A definição de uma classe é feita de acordo com a sintaxe abaixo
Java - 44
Programa(s) Demonstração oo.cadastroDeClientes.Cliente.java
/**
* Classe modelando cliente com o objetivo de demonstrar os seguintes
* conceitos de orientação a objetos : Classe, Encapsulamento e Membros
* (Atributos e Métodos)
*/
package oo.cadastroDeClientes;
/* Definição da classe */
public class Cliente {
/* Corpo da classe */
/* Atributos da classe */
private int matrícula; //Matrícula do cliente
private String nome; //Nome do cliente
private char plano; //Plano de assinatura do cliente
/* Métodos da classe */
/* Construtor */
public Cliente() {
super();
}
/* Construtor */
public Cliente (int matrícula, String nome, char plano) {
setMatrícula(matrícula);
setNome(nome);
setPlano(plano);
}
/* Métodos para leitura e escrita dos atributos */
public void setMatrícula (int matrícula) {
this.matrícula = matrícula;
}
public void setNome (String nome) {
this.nome = nome;
}
public void setPlano (char plano) {
this.plano = plano;
}
public int getMatrícula () {
return matrícula;
}
public String getNome () {
return nome;
}
public char getPlano () {
return plano;
}
/* Método que escreve os atributos do cliente na saída padrão */
public void escreve() {
System.out.print(matrícula + " | " + nome);
if (plano == '1')
System.out.println(" | 20 horas");
else if (plano == '2')
System.out.println(" | Horas livres");
else
System.out.println(" | Plano Inválido");
}
}
Java - 45
Encapsulamento
O encapsulamento é feito através da definição da visibilidade de classes, atributos e métodos. A
visibilidade é definida pelos identificadores: private, protected e public. Quando nenhum
destes identificadores é usado a visibilidade definida é package. Classes somente podem possuir
visibilidades public ou package.
Identificador Visibilidade
public Qualquer classe de qualquer pacote.
private Apenas na própria classe.
protected Na própria classe, sub-classes e classes no mesmo pacote.
package Classes do mesmo pacote.
Observação: Normalmente os atributos de uma classe devem ser privados e o acesso (atribuição e
leitura) destes devem ser feitos através de métodos públicos. É comum também a existência de
métodos privados com a finalidade de auxiliar os métodos públicos, esses métodos privados são
comumente chamados de métodos de serviço. Os métodos públicos representam o que a classe
oferece.
Java - 46
Membros de Classe
Os atributos e métodos de uma classe são chamados de membros da classe e os mesmo são
definidos no corpo da classe.
Atributos
São as variáveis da classe podendo ser de tipos primitivos ou outras classes. Onde as mesmas são
definidas de acordo com a sintaxe abaixo.
Java - 47
Métodos
Cada método possui uma assinatura e corpo, onde a assinatura é definida por: Visibilidade, Tipo de
Retorno, Nome e Lista de Parâmetros. E o Corpo representa a implementação do método.
No corpo de um método o identificador this pode ser utilizado para fazer referência a uma variável
da classe, pois é comum que parâmetros possuam nomes iguais a variáveis de classe, dessa forma
o identificador this serve para resolver conflitos de nomes entre parâmetros e variáveis da classe.
Na verdade o identificador this é uma referência ao objeto corrente, ou seja, aquele no qual o
método está sendo executado. E this() representa uma chamada ao construtor da classe.
Java - 48
Objeto
Um objeto é criado a partir de uma classe através do identificador new seguido do construtor da
classe. O nomeDoObjeto na verdade é uma referência para o objeto criado.
Java - 49
Mensagem
É a chamada a um método através do nome da classe ou objeto seguido de ".", nome do método e
lista de parâmetros entre parêntesis.
package oo.cadastroDeClientes;
System.out.println("\nTodos os Clientes");
/*
* Exemplo de Polimorfismo, pois os métodos escreve() de
* ClientePF e ClientePJ são chamados automaticamente
*/
System.out.println(clientes.quantidade() + " Clientes");
clientes.escreve();
Java - 50
Sobrecarga de Métodos
Em Java é possível que uma classe possua métodos com o mesmo nome, desde que, as listas de
parâmetros sejam diferentes em quantidade, tipo ou em ordem. Esse tipo de polimorfismo é
chamado de sobrecarga de métodos.
Observação: O tipo de retorno não diferencia métodos, ou seja, não é possível definir métodos com
nome iguais e lista de parâmetros iguais, mesmo que possuam tipos de retorno diferentes.
Java - 51
Herança
Para que uma classe Java (SubClasse) herde atributos e métodos de outra classe Java
(SuperClasse) basta que na declaração da SubClasse o identificador extends seja seguido do
nome da SuperClasse. Assim todos os membros "públicos" serão herdados pela SubClasse. Uma
SubClasse apenas pode possuir uma SuperClasse, ou seja, herança múltipla não é permitida em
Java. Caso métodos tenham sido redefinidos e seja necessário chamar os métodos da SuperClasse
o identificador super deve ser utilizado (super.MetodoDaSuperClasse()), sendo que super()
representa o construtor da SuperClasse. Toda classe Java é automaticamente subclasse de
Object.
Java - 52
Programa(s) Demonstração oo.cadastroDeClientes.*
/**
* Classe modelando cliente com o objetivo de demonstrar os seguintes
* conceitos de orientação a objetos : Classe, Encapsulamento e Membros
* (Atributos e Métodos)
*/
package oo.cadastroDeClientes;
/* Definição da classe */
public class Cliente {
/* Corpo da classe */
/* Atributos da classe */
private int matrícula; //Matrícula do cliente
private String nome; //Nome do cliente
private char plano; //Plano de assinatura do cliente
/* Métodos da classe */
/* Construtor */
public Cliente() {
super();
}
/* Construtor */
public Cliente (int matrícula, String nome, char plano) {
setMatrícula(matrícula);
setNome(nome);
setPlano(plano);
}
Java - 53
/**
SubClasse de Cliente com o objetico de demonstrar os seguintes conceitos de
orientação a objetos : Herança, Redefinição de Métodos, Polimorfismo e
SobreCarga de Métodos
*/
package oo.cadastroDeClientes;
/* Construtores */
public ClientePF () {
super();
}
public ClientePF (int matrícula, String nome, char plano, String cpf) {
/* Chamando o construtor da superclasse (Cliente) */
super(matrícula, nome, plano);
setCPF ( cpf );
}
Java - 54
/**
* SubClasse de Cliente com o objetico de demonstrar os seguintes conceitos de
* orientação a objetos : Herança, Redefinição de Métodos, Polimorfismo e
* SobreCarga de Métodos
*/
package oo.cadastroDeClientes;
public ClientePJ () {
super();
}
public ClientePJ (int matrícula, String nome, char plano, String cgc) {
super(matrícula, nome, plano);
this.cgc = cgc;
}
Java - 55
Redefinição de Métodos
É possível que métodos herdados sejam redefinidos, ou seja, implementados de uma forma diferente
bastando para isso que seja criado um método com a mesma assinatura que o método a ser
redefinido (Caso o método herdado seja final não é possível redefini-lo).
Java - 56
Classes e Métodos Abstratos
Numa hierarquia de classes, quanto mais alta for uma classe, mais abstrata é sua definição. Uma
classe no topo (raiz) de uma hierarquia de classes define o comportamento e atributos comuns a
todas as subclasses, e quando mais as classes estiveram próximas das folhas (abaixo) na hierarquia
de classes, mas especializadas elas serão. Assim é possível definir classes em Java que sirvam
apenas como base para uma hierarquia de classe, sendo que classes abstratas não podem ser
instanciadas. A sua utilidade é apenas servir como superclasse, onde as subclasses irão acrescentar
e redefinir seus métodos a medida da necessidade.
Para definir uma classe como abstrata basta colocar o identificador abstract na definição da
mesma.
Java - 57
Programa(s) Demonstração oo.classeAbstrata.*
/**
* Classe asbstrata pessoa
*/
package oo.classeAbstrata;
public abstract class Pessoa {
private String identificacao;
private String nome;
private String dataNascimento;
private char sexo;
public Pessoa (String id, String nome, String datNasc, char sexo) {
this.nome = nome;
this.dataNascimento = datNasc;
this.sexo = sexo;
}
public void id (String id) {
this.identificacao = id;
}
public void nome (String nome) {
this.nome = nome;
}
public void dataNascimento (String dataNascimento) {
this.dataNascimento = dataNascimento;
}
public void sexo (char sexo) {
this.sexo = sexo;
}
public String id () {
return identificacao;
}
public String nome () {
return nome;
}
public String dataNascimento () {
return dataNascimento;
}
public char sexo () {
return sexo;
}
Java - 58
Classes, Métodos e Variáveis Final
É possível definir uma classe, método ou variável como final, significando que :
Classes final não podem ser herdadas
Métodos final não podem ser redefinidos
Variáveis final não podem ter seu conteúdo alterado.
Para definir uma classe, método ou variável como final, basta acrescentar o identificador final na
definição dos mesmos.
Observação: Métodos final são executados com maior eficiência pela JVM.
Observação: Todos os métodos de uma classe final também são final, independente de possuir o
identificador final na sua declaração.
Observação: Algumas das classes da API Java são final tais como : java.lang.String,
java.lang.Math, java.net.InetAddress, ...
package oo.classeFinal;
public MinhaString() {
}
}
Java - 59
Membros Estáticos
Atributos e métodos podem ser de classe ou de objeto (instância). A diferença entre ambos está no
fato de que os membros de instância são propriedades de cada objeto e os membros de classe são
compartilhados por todos os objetos. Assim quando houver a necessidade de compartilhar o
conteúdo de um atributo com todos os objetos de uma classe, esse atributo deverá ser estático. Já
os métodos estáticos possuem a características de poder serem chamados diretamente através da
classe, sem a necessidade de instanciar um objeto. Os métodos estáticos somente podem utilizar
atributos estáticos. Para definir um membro como estático basta colocar o identificador static na
sua declaração.
package oo.membrosEstaticos;
/* Atributo estático */
private static int contObjetos = 0;
public MembrosEstaticos () {
contObjetos++;
}
/* Método estático */
public static void numeroDeOjetos () {
System.out.println("Número de objetos instanciados : " + contObjetos);
}
}
/**
* Application para demonstrar membros estáticos
*/
package oo.membrosEstaticos;
Java - 60
Classes Internas
São classes definidas dentro de outras classes. Normalmente são utilizadas para simular a estrutura
de dados conhecida como registro.
Observação: As classes internas geram arquivos .class diferentes sendo que o nome segue o
seguinte formato : Classe$ClasseInterna.class
package oo.classeInterna;
public Alunos() {
alunos = new Aluno[10];
}
public void insere (int mat, String nome, float n1, float n2, float n3) {
alunos[posNovoAluno] = new Aluno(mat, nome, n1, n2,n3);
posNovoAluno++;
}
Aluno (int mat, String nome, float n1, float n2, float n3) {
this.matricula = mat;
this.nome = nome;
this.nota1 = n1;
this.nota2 = n2;
this.nota3 = n3;
}
void escreve() {
String linha = "_________________________________________________";
System.out.println(linha +
"\nMatrícula : \t" + matricula +
"\nNome : \t" + nome +
"\nNotas : \t" + nota1 + "\t" + nota2 + "\t" +
nota3 +
"\n" + linha);
}
}
}
Java - 61
Interfaces
Representam a definição de comportamentos esperados na definição de classes, contendo apenas
definições de métodos abstratos e constantes, ou seja, não possuem variáveis de instância ou
implementação de métodos.
A definição de uma interface é feita semelhante a uma classe, sendo que no lugar do identificador
class é usado interface. Uma interface não pode ser instanciada, seu objetivo é definir um
modelo de comportamento abstrato para classes. Para que uma classe implemente uma interface, na
definição da classe deve ser colocado o identificador implements seguido da lista de interfaces
separadas por vírgulas. Quando uma classe implementa uma interface, é obrigado a essa classe
implementar todos os métodos definidos na interface e a classe pode acessar qualquer constante
definida na interface.
package oo.classeAbstrata;
Java - 62
Polimorfismo
Em Java todo objeto de uma subclasse pode ser tratado como um objeto da superclasse, e isso
permite que objetos sejam tratados de forma genérica dentro de uma hierarquia de classe. É possível
também realizar uma conversão explicita de um objeto de uma classe para outra, essa operação é
conhecida como typecast e para isso é necessário colocar o tipo da classe, entre parêntesis antes do
objeto a ser convertido: (Classe) Objeto. Sendo que as classes origem e destino da conversão
devem ter relação de herança.
Obaservação : O typecast de uma subclasse para uma superclasse é automático e garantido, mas o
inverso não é garantido e é necessário o typecast explícito.
É possível verificar se um objeto é de uma determinada classe através do operador instanceof.
Java - 63
Tratamento de Exceções
Uma exceção em Java é um sinal que alguma condição excepcional aconteceu. Por exemplo,
solicitação de abertura de um arquivo não encontrado, índice de um array fora de faixa ou uma
conexão de rede perdida. Verificações com recursos convencionais de programação por essas
situações indesejadas, normalmente levam a programas de difícil compreensão e manutenção, pois
é comum haver mais código tratando tais situações, que código desempenhando realmente o
objetivo do programa. Java prover um mecanismo para tratar de forma sistemática essas situações
indesejadas denominado tratamento de exceções.
Exceções em Java são objetos e a hierarquia de classe possui diversas classes representando
exceções. O uso da API Java, em muitos casos, exige o tratamento dessas exceções para verificar
as potenciais situações de erros na execução dos programas.
Esse mecanismo é baseado no paradigma Tentar-e-Capturar (try-and-catch), onde, quando um
comando puder gerar exceções, o mesmo será tentado (executado) e caso a exceção ocorra, a
mesma será capturada.
Para tratar exceções à linguagem Java fornece a seguinte estrutura de comandos:
try {
/* Comandos do Try */
} catch ( TipoDaExceção1 ObjetoDaExceção1 ) {
/* Tratamento da Exceção1*/
} ... {
} catch ( TipoDaExceção2 ObjetoDaExceção2 ) {
/* Tratamento da Exceção2*/
} finally {
/* Comandos do Finally*/
}
, onde :
1º Os Comandos do Try serão executados
2º Caso ocorram exceções, o Tratamento da Exceção ocorrida será executado
3º Os Comandos do Finally serão executados
Observações
Podem existir diversos catchs.
Apenas uma cláusula Finally pode ser usada por try.
Assim que um tratamento de exceção for executado os demais serão ignorados.
Os Comandos do Finally sempre serão executados.
Assim como qualquer classe uma exceção deve ser importada para ser usada.
Caso um método possa gerar uma exceção é possível que na definição do mesmo seja utilizado o
identificador throws seguido da lista das possíveis exceções geradas, dessa forma fica "obrigado"
(Existem exceções que não obrigam) ao usuário do método, tratar tais exceções. Ainda assim é
possível o levantamento explícito de uma exceção através do identificador throw seguido de new e
o construtor da classe da exceção.
Java - 64
/**
* Classe representando um array de inteiros, com o objetivo de demonstrar
* Tratamento de Exceções
*/
package oo.tratamentoDeExcecoes.arrayDeInteiros;
import java.lang.NegativeArraySizeException;
import java.lang.ArrayIndexOutOfBoundsException;
import java.lang.ArithmeticException;
public ArrayDeInteiros() {
posNovo = 0;
array = new int[10];
}
if ( quantElementos == 0 ) {
throw new DivideByZeroException();
}
try {
for (int i = posInicial; i <= posFinal; i ++) {
Java - 65
soma += array[i];
}
media = ( soma / quantElementos );
} catch (ArrayIndexOutOfBoundsException e1 ) {
String msg = "Erro: Intervalo[" + posInicial + "..." + posFinal +
"] Inválido";
throw new ArrayIndexOutOfBoundsException(msg);
} catch ( ArithmeticException e2 ) {
String msg = "Divisao por zero";
throw new ArrayIndexOutOfBoundsException(msg);
}
return media;
}
return sb.toString();
}
Java - 66
package oo.tratamentoDeExcecoes.arrayDeInteiros;
public DivideByZeroException() {
super("Divisão por zero.");
}
/**
* Application demonstrando o uso da classe ArrayDeInteiros
*/
package oo.tratamentoDeExcecoes.arrayDeInteiros;
inteiros.escreve();
try {
inteiros.insere(0,0);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println( e.getMessage() );
}
inteiros.escreve();
try {
inteiros.insere(-1,0);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println( e.getMessage() );
}
try {
System.out.println(inteiros.media(2,1));
} catch ( Exception e ) {
System.out.println( e.getMessage() );
}
try {
inteiros.preenche(5);
} catch (Exception e) {}
inteiros.escreve();
}
}
Java - 67
JavaDoc
JavaDoc é uma ferramenta para geração de documentação de classes, distribuída com o jdk (Java
Development Kit), sendo que, processa classes java e transforma os comentários /**...*/ em
documentos html, os quais possibilitam um "fácil" entendimento e uso das classes (API)
documentadas. Para que a documentação seja gerada adequadamente tags reconhecidas pelo
JavaDoc devem ser inseridas nos comentários.
Tag Descrição
@author autor
@version versão
@param parâmetro do método
@return retorno do método
@exception exceção
@see veja também
Java - 68
Programa(s) Demonstração controleEstoque.*
/**
* @author José Maria Rodrigues Santos Junior
* [email protected] - www.unit.br/zemaria
*
*/
package oo.controleDeEstoque.cliente;
import oo.controleDeEstoque.util.Registro;
import oo.controleDeEstoque.util.Endereco;
/**
* Classe representando um cliente
* @see oo.controleDeEstoque.util.Registro
* @see oo.controleDeEstoque.util.Endereco
* @see oo.controleDeEstoque.cliente.DataAniversario
*/
public class Cliente extends Registro {
/** data de aniversário */
public DataAniversario aniv;
/** telefone */
private String fone;
/** observacao */
private String obs;
/** endereço */
public Endereco end;
/**
* Construtor da classe
* @param cod código do cliente
* @param nome nome do cliente
* @param end endereço do cliente
* @param aniv data de aniversário
* @param fone telefone
* @param obs observação
*/
public Cliente (int cod, String nome, Endereco end,
DataAniversario aniv,
String fone, String obs) {
super(cod,nome);
this.end = end;
this.aniv = aniv;
this.fone = fone;
}
/**
* atribui o nome
* @param nome nome do cliente
*/
public void nome (String nome) {
desc(nome);
}
/**
* obtem o nome
* @return nome do cliente
*/
public String nome () {
return super.desc();
}
/**
* obtem a data de aniversário
* @return data de aniversário
* @see controleDeEstoque.cliente.DataAniversario
*/
Java - 69
public DataAniversario dataAniversario () {
return aniv;
}
/**
* Retorna a representação string do objeto
* @return objeto como string
*/
public String toString () {
return "[" + chave() + ", " + desc() + ", " + end + ", " + aniv +
", " + fone + "]";
}
}
Site(s) http://java.sun.com/products/jdk/javadoc/index.html#javadoc1.3documents
Java - 70
Code Conventions
Um fator determinante na qualidade de um programa é como o mesmo está escrito, dessa forma,
veremos algumas regras que devem ser seguidas para padronizar a escrita de programas em Java a
fim de evitar dificuldades na leitura dos mesmo, regras estas extraídas de publicação da própria Sun
como proposta para a padronização da escrita de programas em Java.
Site(s) http://java.sun.com/docs/codeconv/index.html
Java - 71
API Java
A API Java é bastante extensa. O JavaDoc da API Java é a melhor referência para o programador
Java.
Os principais pacotes são :
Pacote Descrição
java.applet Applets
java.awt Interface com usuário
java.beans JavaBeans
java.io Entrada e Saída de Dados
java.lang Classes fundamentais à programação Java
java.math Operações matemáticas
java.net Implementação de aplicações de rede
java.rmi Chamada Remota de Métodos
java.security Segurança
java.sql Acesso a Banco de Dados
java.text Formatação de texto, datas e números
java.util Classes utilitárias. As principais representam estrutura de dados.
javax.accessibilit Acessibilidade
y
javax.naming Serviço de Acesso de Nomes
javax.rmi RMI-IIOP
javax.sound Som - MIDI (Musical Instrument Digital Interface)
javax.swing Interface Gráfica com o usuário
Java - 72
java.lang
Contém classes básicas para a programação Java e suas classes não precisam ser importadas, pois
todo o pacote java.lang é importado automaticamente por qualquer classe Java.
Classe Descrição
System Representa o sistema no qual as aplicações são executadas.
Runtime Representa o ambiente de execução.
Object Superclasse de toda classe Java (Raiz da hierarquia de classe), ou seja,
qualquer objeto Java é um Object.
Class Representação de classes e interface na execução de programas Java. Útil
para extrair em tempo de execução informações sobre objetos, tais como :
atributos, métodos, superclasse, etc.
String Classes para tratamento de cadeias de caracteres, sendo que a classe
StringBuffer String não permite alteração na cadeia de caracteres armazenados.
Classes Wrappers Classes que encapsulam os tipos primitivos, sendo elas : Boolean, Byte,
Character, Double, Float, Integer, Long e Short.
Math Operações matemáticas
Java - 73
Programa(s) Demonstração api.java.lang.JavaLangSystem
/* @author José Maria R S Junior
* [email protected] / www.unit.br/zemaria
*
* Aplicação para demonstrar as principais classes do pacote java.lang
* Math, Object, String, StringBuffer, System, Execptions e Wrappers
*
**/
package api.java.lang;
import java.util.Properties;
import java.util.Enumeration;
import java.io.IOException;
Java - 74
Programa(s) Demonstração api.java.lang.JavaLangObject
package api.java.lang;
System.out.println( obj1 );
Java - 75
Programa(s) Demonstração api.java.lang.JavaLangClass
package api.java.lang;
import java.lang.reflect.Method;
Java - 76
Programa(s) Demonstração api.java.lang.JavaLangStringStringBuffer
package api.java.lang;
Java - 77
Programa(s) Demonstração api.java.lang.JavaLangWrappers
package api.java.lang;
Java - 78
Programa(s) Demonstração api.java.lang.JavaLangMath
package api.java.lang;
Java - 79
Exceptions
Java - 80
java.util
Pacote que tem como principal objetivo fornecer classes representando estruturas de dados
(Coleções), sendo que possui também classes de uso geral para manipulação de hora e data,
internacionalização, geração de números randômicos, etc.
Uma coleção representa um grupo de objetos agrupados em uma única classe. As coleções Java
são capazes de armazenar elementos do tipo Object, dessa forma qualquer objeto criado pode ser
armazenado nas classes coleções. As coleções possuem duas interfaces base (Collection e Map)
que determinam o seu padrão de comportamento. As classes que implementam Collection
armazém objetos, enquanto as que implementam Map armazenam pares de objetos, onde um dos
objeto s funciona como chave.
<<Interface>> <<Interface>>
Collection Map
<<Interface>>
HashMap HashTable
SortedMap
<<Interface>> <<Interface>>
Set List
TreeMap
TreeSet
Interface Descrição
Collection Interface base que determina quais operações as classes armazenam coleções de
objetos deve possuir.
Set Estende a interface Collection não permitindo a repetição de elementos.
SortedSet Estende a Interface Set para manter os elementos ordenados.
List Estende a interface Collection representando uma lista de elementos.
Map Interface base para classes que armazenam elementos associados a uma chave.
SortedMap Estende a interface Map para armazenar os elementos ordenados pela chave.
Java - 81
Principais Classes
Classes Coleções
Classe Descrição
Collections Possui métodos estáticos para realizar operações sobre coleções, tais como :
copia, valor máximo e mínimo, pesquisa, ordenação, etc.
Stack Representa a estrutura de dados Pilha.
Vector Coleção de objetos, os quais podem ser acessados através do índice.
HashTable Estrutura de dados Hashtable armazenado pares de objetos (chave + dados),
não permite chaves repetidas. Os objetos armazenados devem implementar os
métodos hashcode e equals. Os valores podem ser recuperados pela chave.
TreeMap Árvore que armazena pares de objetos (chave + dados), armazenado-os em
ordem ascendente de chaves. Garante acesso em ordem de complexidade
Log(n).
TreeSet Conjunto de objetos armazenado em ordem ascendente e sem repetição.
Garante acesso em ordem de complexidade Log(n).
Observação : As classes que armazena objetos sem repetição necessitam que os objetos a ser
armazenados implementem o método public boolean equals(Object obj) e as que
armazenam objetos ordenadamente necessitam da implementação da interface comparable e
consequente redefinição do método : public int compareTO (Object obj), onde o mesmo
deve retorna um valor negativo quando obj for menor, 0 quando for igual e positivo quando for
maior.
Classes Utilitárias
Classe Descrição
StringTokenizer Permite quebrar uma string em tokens.
Date Classe Data.
Calendar Permite trabalhar com datas, extraindo seus campos (dia, mês, ano, hora, etc).
Random Geração de números randômicos.
java.text
Possui um conjunto de classes e interfaces para tratamento de texto, datas, números e mensagens.
Principais Classes
Classe Descrição
SimpleDateFormat Permite formatar, converter e tratar datas.
DecimalFormat Permite formatação de números decimais.
Java - 82
Programa(s) Demonstração api.java.util.Item
package api.java.util;
Java - 83
Programa(s) Demonstração api.java.util.JavaUtilVector
package api.java.util;
import java.util.Vector;
import java.util.Collections;
Java - 84
Programa(s) Demonstração api.java.util.JavaUtilHashtable
package api.java.util;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Enumeration;
System.out.println( itens );
/*
* O metodo values() retorna um collection, o qual possui o metodo
* iterator()
*/
Iterator valores = itens.values().iterator();
while ( valores.hasNext() ) {
System.out.println( valores.next() );
}
}
}
Java - 85
Programa(s) Demonstração api.java.util.JavaUtilTreeSet
package api.java.util;
import java.util.TreeSet;
import java.util.Iterator;
import java.util.SortedSet;
}
}
Java - 86
Programa(s) Demonstração api.java.util.JavautilTreeMap
package api.java.util;
import java.util.TreeMap;
import java.util.Iterator;
System.out.println("Obtendo um elemento");
System.out.println( itens.get("3") );
System.out.println( "Itens" );
}
}
Java - 87
Programa(s) Demonstração api.java.util.JavaUtilStack
package api.java.util;
import java.util.Stack;
Java - 88
Programa(s) Demonstração api.java.util.JavaUtilDate
package api.java.util;
import java.util.Date;
import java.util.Calendar;
import java.text.DateFormat;
Java - 89
Programa(s) Demonstração api.java.util.JavaUtilCalendar
package api.java.util;
import java.util.Date;
import java.util.TimeZone;
import java.util.Calendar;
Java - 90
Programa(s) Demonstração api.java.util.JavaUtilRandom
package api.java.util;
import java.io.*;
import java.lang.StringBuffer;
import java.lang.NumberFormatException;
import java.util.Random;
import util.Keyboard;
do {
System.out.print("Digite um número entre " + limiteInferior +
" e " + limiteSuperior + " = > ");
chute = Keyboard.readInt();
if ((chute >= limiteInferior) && (chute <= limiteSuperior)) {
if (chute > numeroSorteado) {
limiteSuperior = chute - 1;
} else {
limiteInferior = chute + 1;
}
} else {
System.out.println("Número digitado fora do intervalo");
}
tentativas++;
} while (chute != numeroSorteado);
Java - 91
Programa(s) Demonstração api.java.util.JavaUtilStringTokeninzer
package api.java.util;
import java.util.StringTokenizer;
Java - 92
java.io
O pacote java.io fornece uma extensa biblioteca de classes para operações de Entrada e
Saída, Serialização e acesso ao Sistema de Arquivos
As operações de I/O são realizadas através da conexão de objetos Streams (Fluxo de
Dados), aos dispositivos de I/O. Representando assim, uma forma uniforme para operações
de I/O.
Existem conjuntos de classes representando streams de entrada e saída, representando a
origem e o destino dos dados respectivamente.
Filtros (streams) podem ser associados a outros streams a fim de fornecer novas
funcionalidades.
As classes de I/O são divididas em dois grandes grupos, um grupo para dados no formato de
bytes (Stream) e outro para dados no formato de caracteres UNICODE (Read/Write).
Esses grupos ainda são divididos em dois sub-grupos um para tratar dados de forma bruta e
outro que realiza algum tipo de processamento (buferização ou codificação).
O pacote java.io também fornece classes para acesso randômico a arquivos e uma interface
que interage com o sistema de arquivos da plataforma host.
As interfaces e superclasses do pacote java.io fornecem o padrão de comportamento para entrada e
saída de dados. Numa operação de I/O fluxos devem ser associado a dispositivos de I/O. Os fluxos
são abertos automaticamente na sua criação e fechados com o métodos close().
Caractes Bytes
Reader InputStream (Bytes)
int read() int read()
int read(char cbuf[]) int read(byte cbuf[])
int read(char cbuf[], int offset, int length) int read(byte cbuf[], int offset, int length)
Writer OutputStream
int write(int c) int write(int c)
int write(char cbuf[]) int write(byte cbuf[])
int write(char cbuf[], int offset, int length) int write(byte cbuf[], int offset, int length)
Java - 93
File
Fornece um mecanismo independente de plataforma para acessar o sistema de arquivos.
Representa o pathname de um arquivo ou diretório e permite também realizar operações e obter
informações sobre o sistema de arquivos da máquina host, tais como : separador de arquivos,
criação de diretório, etc. Essa classe não fornece mecanismo para manipular o conteúdo do arquivo,
para isso devem ser usadas às classes : FilerReader, FileWriter, FileInputStream, FileOutputStream
e RandomAccessFile.
Java - 94
Programa(s) Demonstração api.java.io.JavaIOFile
package api.java.io;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
System.out.println( );
}
}
Java - 95
Fluxo de Dados para Arquivos
As seguintes classes são usadas para interação com arquivos : FileReader, FileWriter,
FileInputStream, FileOutputStream e RandomAccessFile. Os fluxos para leitura e escrita em arquivos
podem ser criados através de um objeto da classe File ou FileDescriptor.
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.FileNotFoundException;
import java.io.IOException;
Java - 96
Filtrandro Fluxos e “Serializando Objetos” ( Serializable )
Serializar um objeto significa criar uma seqüência de bytes que represente o objeto, dessa forma o
mesmo pode ser trasmitido através de um stream. Para que um objeto seja serializado o mesmo
deve implementar a interface Serializable.
java.io.Serializable;
java.io.FileOutputStream;
java.io.FileInputStream;
java.io.ObjectOutputStream;
java.io.ObjectInputStream;
Java - 97
Programa(s) Demonstração api.java.io.JavaIOSerializable
package api.java.io;
import java.io.Serializable;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.FileNotFoundException;
import java.io.NotSerializableException;
import java.io.OptionalDataException;
import java.io.IOException;
import java.util.Vector;
Java - 98
* Demonstração da gravação e leitura de diversos objetos no arquivo
*/
/* Gravando os objetos no arquivo */
fos = new FileOutputStream( "Objetos.dat" );
oos = new ObjectOutputStream( fos );
for ( int i = 0; i < v.size(); i++ ) {
oos.writeObject( v.get( i ) );
}
v.clear();
oos.flush();
fis = new FileInputStream( "Objetos.dat" );
ois = new ObjectInputStream( fis );
try {
while ( true ) {
v.add( ois.readObject() );
}
} catch ( IOException e ) {
System.out.println( "Todos os objetos foram lidos : " +
e.getMessage() );
}
System.out.println( v );
} catch ( FileNotFoundException e ) {
System.out.println( "Arquivo não encontrado : " +
e.getMessage() );
} catch ( NotSerializableException e ) {
System.out.println( "Objeto não serializável : " +
e.getMessage() );
} catch ( IOException e ) {
System.out.println( "Erro de I/O : " + e.getMessage() );
} catch ( ClassNotFoundException e ) {
System.out.println( "Classe não encontrada : " +
e.getMessage() );
}
}
}
Java - 99
RandomAccessFile
Fornece acesso direto a arquivos, onde bytes podem ser lido e/ou gravados em uma determinada
posição do arquivo. Um objeto do tipo RandomAccess deve ser criado e associado a um arquivo
antes de ser usado.
import java.io.RandomAccessFile;
import java.io.File;
import java.io.IOException;
Java - 100
Threads
Documento Threads.doc
Java - 101
java.net
Redes
Camada de Aplicação
...
Camada de Transporte
Transport Control Protocol
Comunicação ponto a ponto com confirmação de entrega. (HTTP, FTP)
User Datagram Protocol
Comunicação ponto a ponto sem confirmação de entrega.
Endereço IP ( xxx.xxx.xxx.xxx ), onde 0 <= xxx <= 254
Portas :
Número inteiro 16 bits (0..65535)
As portas de 0 a 1023 são dos Well-Known Services
TCP e UDP usam portas para mapear a comunicação com processos.
URL (Uniform Resource Locator)
Protocolo + Recurso
Socket
Endereço IP + Porta
Socket Servidor
Socket Client
Java - 102
URL
URLConnection
Programa(s) Demonstração api.java.net.url.JavaNetUrl
package api.java.net.url;
import java.io.*;
import java.net.*;
import util.Keyboard;
Java - 103
Sockets
ServerSockets
Programa(s) Demonstração api.java.net.socket.ClientSocket
package api.java.net.socket;
import java.io.*;
import java.net.*;
import util.Keyboard;
Java - 104
Programa(s) Demonstração api.java.net.socket.ServerSocketThread
package api.java.net.socket;
import java.net.*;
import java.io.*;
import util.Keyboard;
Java - 105
Programa(s) Demonstração api.java.net.socket.ServerSocketApplication
package api.java.net.socket;
import java.net.*;
import java.io.*;
import util.Keyboard;
Java - 106
javax.swing
Java Foundation Classes (JFC) : Conjunto de ferramentas para desenvolvimento de interfaces
gráficas, com as seguintes características :
1. Componentes SWING
2. Look and Feel
3. API de acessibilidade
4. Java 2D API
5. Suporte para Drag and Drop
Pacote : javax.swing
Os nomes dos componentes SWINGs começam com a letra "J", exemplo : JButton.
Diferentemente dos componentes AWT, os componentes SWINGs são escritos completamente em
Java sem possuir código nativo.
Componente Container
Componentes “CONTAINERES” são componentes com a capacidade de armazenar e exibir outros
componentes.
Todo programa que possuir componentes SWINGs irá necessitar de um componente container top-
level (JFrame ou JDialog), o qual prover suporte para exibição e tratamento de eventos para os
demais componentes. Sendo que, os componentes não serão inseridos diretamente no container
top-level e sim em outro componente container, JPanel por exemplo, o qual será inserido no
container top-level.
Java - 107
Layout Managers
São objetos que determinam como os componentes visuais de um container serão exibidos, com o
objetivo de permitir o ajuste automático da interface de acordo com a plataforma. Todo componente
container possui um layout manager, o qual irá controlar como os seus componentes serão exibidos
(tamanho e posição). A API padrão Java possui seis layout managers, sendo eles: FlowLayout,
GridLayout, BorderLayout, CardLayout, GridLayout e BoxLayout.
BorderLayout
Possui cinco áreas para colocação de componetes (NORTH, SOUTH, WEST, EAST E CENTER).
BoxLayout
Armazena os componentes numa simples coluna, respeitando os seus tamanhos.
CarLayout
Permite definir áreas para armazenar diferentes componentes em momentos diferentes.
FlowLayout
Armazena os componentes da esquerda para direita, passando para próxima linha quando
necessário.
GridLayout
Redimensiona os componentes para o mesmo tamanho e exibe-os numa tabela com número de
linhas e colunas especificadas.
GridBagLayout
Alinha os componentes colocando-os numa tabela, permitindo que um componente ocupe mais de
uma célula.
Java - 108
Criando uma aplicação Swing no JBuilder
Para criar uma aplicação swing devemos criar uma classe que estenda a classe
javax.swing.JFrame e em seguida utilizar a opção de design do JBuilder, lembrando que a
primeira coisa a ser feita é inserir um JPanel. O JBuilder irá a partir de agora manipular o código
fonte da classe para refletir as alterações feitas no design. Para isso o JBuilder declara e instancia
cada objeto visual utilizado como um atributo da classe e no método jbInit() realiza as alterações
nas propriedades dos objetos. Para que o JFrame seja exibido é necessário adicionar o método
this.show() ao construtor.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public SwingApp() {
try {
jbInit();
this.pack();
this.show();
}
catch(Exception e) {
e.printStackTrace();
}
}
void jButton1_actionPerformed(ActionEvent e) {
System.out.println( "Resposta ao evento" );
}
}
Java - 109
Caixa de Diálogo
Uma forma simples de exibir diálogos é através da classe javax.swing.JOptionPane, usando
um dos métodos showXxxxDialog.
package swing;
import javax.swing.JOptionPane;
System.exit( 0 );
}
}
Java - 110
Agenda Eletrônica usando Swing
package swing.agenda;
import java.lang.Comparable;
import java.io.Serializable;
/**
* Classe representando um item a ser armazenado na agenda
*/
public class ItemAgenda implements Comparable, Serializable {
private String nome;
private String telefone;
private String email;
/**
* Construtor padrão
*/
public ItemAgenda ( ) {
}
/**
* Construtor inicializando todos os atributos
* @param nome Nome
* @param telefone Telefone
* @param email Email
*/
public ItemAgenda ( String nome, String telefone, String email ) {
setNome( nome );
setTelefone ( telefone );
setEmail ( email );
}
/**
* Atribui o nome
* @param nome Nome
*/
public void setNome ( String nome ) {
/* nome não pode ser nulo */
if ( ! nome.equals( "" ) ) {
this.nome = nome;
}
}
/**
* Atribui o telefone
* @param telefone Telefone
*/
public void setTelefone ( String telefone ) {
this.telefone = telefone;
}
/**
* Atribui o Email
* @param email Email
*/
public void setEmail ( String email ) {
this.email = email;
}
Java - 111
/**
* Retorna o nome
* @result Nome
*/
public String getNome () {
return nome;
}
/**
* Retorna o Telefone
* @result Telefone
*/
public String getTelefone () {
return telefone;
}
/**
* Retorna o email
* @result Email
*/
public String getEmail () {
return email;
}
/**
* Retorna a representaçao String do Objeto
* @result representação String do Objeto
*/
public String toString () {
return "[" + nome + ", " + telefone + ", " + email + "]";
}
/**
* Redefiniçao do método java.Object.equals()
* @see java.lang.Object.equals()
*/
public boolean equals ( Object obj) {
/* o nome determina a igualdade */
ItemAgenda itemAgenda = ( ItemAgenda ) obj;
return getNome().endsWith( itemAgenda.getNome() );
}
/**
* Redefiniçao do método java.Comparable.compareTo()
* @see java.lang.Comparable.compareTo();
*/
public int compareTo ( Object obj ) {
ItemAgenda itemAgenda = ( ItemAgenda ) obj;
return getNome().compareTo( itemAgenda.getNome() );
}
}
Java - 112
Programa(s) Demonstração swing.agenda.ItensAgenda
/**
* Title: <p> ItensAgenda
* Description: <p> Classe para armazenar os itens da Agenda
* @author José Maria Rodrigues Santos Junior / [email protected]
*/
package swing.agenda;
import java.util.Vector;
import java.util.Collections;
import java.io.*;
/**
* Classe para armazenar uma coleçao de items da Agenda
*/
public class ItensAgenda {
/** Vector para armazenar os itens da Agenda */
private Vector itensAgenda;
/**
* Posiçao do item corrente da Agenda
*/
private int posItemCorrente;
/** Nome do arquivo para salvar/carregar o Vector dos itens da agenda */
private String arquivo;
/**
* Construtor
* @param nome do arquivo para salvar/carregar a coleçao de itens
*/
public ItensAgenda( String arquivo ) {
this.posItemCorrente = -1;
this.itensAgenda = new Vector();
this.setArquivo( arquivo );
}
FileInputStream fis;
ObjectInputStream ois;
Java - 113
try {
fis = new FileInputStream( arquivo );
ois = new ObjectInputStream( fis );
itensAgenda = ( Vector ) ois.readObject();
} catch ( FileNotFoundException e ) {
String msg = "Arquivo não encontrado : " + e.getMessage();
throw new FileNotFoundException( msg );
} catch ( IOException e ) {
String msg = "Erro de I/O : " + e.getMessage();
throw new IOException( msg );
} catch ( ClassNotFoundException e ) {
String msg = "Classe não encontrada : " + e.getMessage();
throw new ClassNotFoundException( msg );
}
posItemCorrente = 0;
}
Java - 114
if ( pos != -1 ) {
itensAgenda.remove( pos );
}
itensAgenda.addElement( itemAgenda );
Collections.sort( itensAgenda );
posItemCorrente = itensAgenda.indexOf( itemAgenda );
}
}
Java - 115
Programa(s) Demonstração swing.agenda.AgendaFrame
/**
* Title: <p> AgendaFrame
* Description: <p> Aplicação swing de Agenda Eletrônica
* @author José Maria Rodrigues Santos Junior / [email protected]
*/
package swing.agenda;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
public AgendaFrame() {
/* Inicializando os itens da agenda a partir do arquivo */
try {
Java - 116
itensAgenda.abrir( nomeArquivo );
ItemAgendaParaJTextFields( itensAgenda.getItemCorrente() );
} catch ( Exception e ) {
JOptionPane.showMessageDialog(null, e.getMessage(), "Aviso",
JOptionPane.WARNING_MESSAGE);
}
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
Java - 117
jButtonUltimo.setText("Último");
jButtonUltimo.setBounds(new Rectangle(294, 30, 99, 27));
jButtonUltimo.addActionListener(new java.awt.event.ActionListener() {
Java - 118
jButtonProcurar.addActionListener(new java.awt.event.ActionListener() {
jMenuBar.add(jMenuArquivo);
jMenuBar.add(jMenu1);
jMenuBar.add(jMenuAjuda);
jMenuArquivo.addSeparator();
jMenuArquivo.add(jMenuSair);
jMenuAjuda.add(jMenuSobre);
jMenu1.add(jRadioButtonMenuItemMetal);
jMenu1.add(jRadioButtonMenuItemMotif);
jMenu1.add(jRadioButtonMenuItemWindows);
this.getContentPane().add(jPanel, BorderLayout.CENTER);
jPanel.add(jTextFieldTelefone, null);
jPanel.add(jTextFieldNome, null);
jPanel.add(jLabelNome, null);
jPanel.add(jLabelTelefone, null);
jPanel.add(jLabelEmail, null);
jPanel.add(jTextFieldEmail, null);
jPanel.add(jPanelBotoes, null);
jPanelBotoes.add(jButtonConfirmar, null);
jPanelBotoes.add(jButtonApagar, null);
jPanelBotoes.add(jButtonPrimeiro, null);
jPanelBotoes.add(jButtonNovo, null);
jPanelBotoes.add(jButtonAnterior, null);
jPanelBotoes.add(jButtonProximo, null);
jPanelBotoes.add(jButtonUltimo, null);
jPanelBotoes.add(jButtonProcurar, null);
}
void jMenuSair_actionPerformed(ActionEvent e) {
try {
itensAgenda.salvar();
} catch ( Exception exc ) {
JOptionPane.showMessageDialog(null, exc.getMessage(), "Aviso",
JOptionPane.WARNING_MESSAGE);
}
System.exit( 0 );
}
Java - 119
void jButtonConfirmar_actionPerformed(ActionEvent e) {
jButtonNovo.setEnabled( true );
botoesAcoes( true );
botoesNavegacao( true );
if ( atualizacao ) {
jTextFieldsParaItemAgenda( itensAgenda.getItemCorrente() );
} else {
ItemAgenda itemAgenda = new ItemAgenda();
jTextFieldsParaItemAgenda( itemAgenda );
if ( ! itensAgenda.existe( itemAgenda ) ) {
itensAgenda.insere( itemAgenda );
} else {
String msg = "Item já cadastrado.";
String pergunta = "Deseja substiruir ?";
Object[] opcoes = {"Sim","Não"};
int resp = JOptionPane.showOptionDialog(null, pergunta,
msg,
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
opcoes,
opcoes[1]
);
if ( resp == 0 ) {
itensAgenda.insere( itemAgenda );
}
}
}
atualizacao = true ;
this.exibirItemCorrente();
System.out.println( "Agenda = " + itensAgenda);
System.out.println( "Item Corrente = " +
itensAgenda.getItemCorrente() );
}
void jRadioButtonMenuItemMetal_actionPerformed(ActionEvent e) {
lookAndFeel ( 0 );
}
void jRadioButtonMenuItemMotif_actionPerformed(ActionEvent e) {
lookAndFeel ( 1 );
}
void jRadioButtonMenuItemWindows_actionPerformed(ActionEvent e) {
lookAndFeel ( 2 );
}
Java - 120
try {
UIManager.setLookAndFeel(
lookAndFeel[lf].getClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch ( Exception e ) {
System.out.println( "Problemas na alteração do LookAndFeel :" +
e.hashCode() );
}
}
void jButtonNovo_actionPerformed(ActionEvent e) {
atualizacao = false;
limparJTextFields();
botoesAcoes( false );
botoesNavegacao( false );
jButtonNovo.setEnabled( false );
jTextFieldNome.requestFocus();
}
void jButtonProcurar_actionPerformed(ActionEvent e) {
String nome = JOptionPane.showInputDialog(null,"Nome : ",
"Procura por nome",
JOptionPane.PLAIN_MESSAGE);
if ( nome != null ) {
itensAgenda.procuraAproximadaPorNome( nome );
this.exibirItemCorrente();
}
this.escreveAgenda();
}
void jButtonApagar_actionPerformed(ActionEvent e) {
itensAgenda.apaga( );
exibirItemCorrente();
this.escreveAgenda();
}
void jButtonPrimeiro_actionPerformed(ActionEvent e) {
this.itensAgenda.primeiro();
this.exibirItemCorrente();
this.escreveAgenda();
}
void jButtonAnterior_actionPerformed(ActionEvent e) {
this.itensAgenda.anterior();
this.exibirItemCorrente();
this.escreveAgenda();
}
void jButtonProximo_actionPerformed(ActionEvent e) {
this.itensAgenda.proximo();
this.exibirItemCorrente();
this.escreveAgenda();
}
void jButtonUltimo_actionPerformed(ActionEvent e) {
this.itensAgenda.ultimo();
this.exibirItemCorrente();
this.escreveAgenda();
}
}
Java - 121
java.sql.jdbc
JDBC representa a definição de uma API para acesso, através da linguagem Java, a Sistemas
Gerenciadores de Banco de Dados. Isto permite que através da API JDBC um programa Java
acesse o banco de dados independente do SGBD, desde que exista a implementação do driver
JDBC para o SGBD utilizado. Desta forma, a linguagem Java fornece independência de plataforma e
JDBC fornece independência de SGBD.
JDBC representa uma interface de baixo nível fornecendo mecanismos para executar setenças sql
em bancos de dados relacionais, servindo como base para o desenvolvimento de interfaces de níveis
mais alto.
SQL é uma linguagem padrão, mas nem tanto assim, pois há variações consideráveis entre SGBDs,
a maioria delas, relacionadas aos tipos de dados, dessa forma JDBC defini um conjunto de tipos
genéricos na classe java.sql.Types. Em relação às divergências dos comandos SQLs, JDBC
permite que qualquer setença SQL seja enviada ao SGBD, sendo que caso o SGBD utilizado não
suporte tal setença uma SQLException será lançada.
JDBC fornece também o recurso de obter metadados, através da classe DatabaseMetadata, sobre
o banco de dados em uso, dessa forma é possível que a aplicação faça ajustes em relação a
características do SGBD em uso.
Para que um programa Java acesse um SGBD com JDBC o driver JBDC do SGBD (implementado
pelo fabricante do SGBD) a ser utilizado deve está disponível.
Java - 122
Programa(s) Demonstração jdbc.listaDiscussao.ListaDiscussaoApp
package jdbc.listaDiscussao;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Locale;
/* criando tabelas */
try {
criaTabelas( stmt );
} catch (Exception e) {
System.out.println(e.getMessage());
}
/* Consultando as tabelas */
consultaTabelas( stmt );
Java - 123
try {
con.close();
System.out.println( "Conexão com o banco de dados fechada" );
} catch ( SQLException sqle ) {
System.out.println( "Erro no fechamento da conexão : " );
}
}
stmt.executeUpdate( TB_LST_LISTA );
System.out.println( TB_LST_LISTA );
stmt.executeUpdate( TB_MSG_MENSAGEM );
System.out.println( TB_MSG_MENSAGEM );
stmt.executeUpdate( TB_ML_MEMBRO_LISTA );
System.out.println( TB_ML_MEMBRO_LISTA );
Java - 124
"\ngetErrorCode() = " + sqle.getErrorCode() );
}
}
Java - 125
rs = stmt.executeQuery( selectTbLista );
/* Navegando pelo resultado */
while ( rs.next() ) {
System.out.print( rs.getString( 2 ) );
System.out.print( " - " );
System.out.println( rs.getString( 3 ) );
}
Java - 126
Comandos SQL Preparados
Programa(s) Demonstração jdbc.listaDiscussao.JavaSqlPreparedStatement
package jdbc.listaDiscussao;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
try {
con.close();
System.out.println( "Conexão com o banco de dados fechada" );
} catch ( SQLException sqle ) {
System.out.println( "Erro no fechamento da conexão : " +
sqle.getMessage() );
}
}
}
Java - 127
Procedimentos Armazenados – Stored Procedures
Programa(s) Demonstração jdbc.listaDiscussao.JavaSqlStoredProcedure
package jdbc.listaDiscussao;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.Types;
try {
System.out.println("Criando Stored Procedured 2");
criaStoredProcedure2(stmt);
} catch (Exception e) {
System.out.println(e.getMessage());
}
/* Fechando a conexão */
try {
con.close();
System.out.println( "Conexão com o banco de dados fechada" );
} catch ( SQLException sqle ) {
System.out.println( "Erro no fechamento da conexão : " +
sqle.getMessage() );
}
}
Java - 128
private static void criaStoredProcedure1 (Statement stmt) {
/* Comando sql para criação da strored procedure */
String storedProcedure =
"CREATE PROCEDURE INSERE_MEMBRO" +
"(@codigo VARCHAR(10), @nome VARCHAR(50), @email VARCHAR(50), @senha VARCHAR(10))"
+
"AS " +
" INSERT INTO TB_MEM_MEMBRO (MEM_CD_MEMBRO, MEM_NM_MEMBRO, MEM_EMAIL , MEM_SENHA)"
+
" VALUES (@codigo, @nome, @email, @senha)";
try {
/* Executando o comando sql de criação da stored procedure */
stmt.executeUpdate( storedProcedure );
System.out.println( "Stored Procedure criada" );
} catch ( SQLException sqle ) {
System.out.println( "Erro criando a Stored Procedure :" +
sqle.getMessage() );
}
}
private static void criaStoredProcedure2 (Statement stmt) {
/* Exemplo de Stored Procedure que retorna valores */
String storedProcedure =
"CREATE PROCEDURE MEMBRO_LOGIN" +
"(@codigo VARCHAR(10))" +
"AS" +
" SELECT MEM_EMAIL, MEM_SENHA" +
" FROM TB_MEM_MEMBRO " +
" WHERE MEM_CD_MEMBRO = @codigo";
try {
stmt.executeUpdate( storedProcedure );
System.out.println( "Stored Procedure criada" );
} catch ( SQLException sqle ) {
System.out.println("Erro criando a Stored Procedure :" +
sqle.getMessage() +
"ErrorCode: " + sqle.getErrorCode());
}
}
Java - 129
CallableStatement cstmt = con.prepareCall( storedProcedureCall );
String codigo = "90";
cstmt.setString(1, codigo);
// cstmt.execute();
/* Executando a stored procedure e obtendo o seu retorno */
ResultSet rs = cstmt.executeQuery();
if ( rs.next() ) {
String email = rs.getString(1);
String senha = rs.getString(2);
System.out.println("Email : " + email);
System.out.println("Senha : " + senha);
}
System.out.println( "Stored Procedure Executada." );
} catch ( SQLException sqle ) {
System.out.println( "Erro executando a Stored Procedure : " +
sqle.getMessage() +
"ErrorCode: " + sqle.getErrorCode());
}
}
}
Java - 130
Controle de Transações
Programa(s) Demonstração jdbc.listaDiscussao.JavaSqlTransacao
package jdbc.listaDiscussao;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
Java - 131
}
Java - 132
Metadados de comandos SQL
Programa(s) Demonstração jdbc.listaDiscussao.JavaSqlResultSetMetaData
package jdbc.listaDiscussao;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
try {
/* Comando sql a ser executado */
String query = "SELECT * FROM TB_LST_LISTA";
/* Executando o comando sql */
ResultSet rs = stmt.executeQuery( query );
/* Obtendo objeto com metadados do resultado da execução */
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println( "[ ColumnLabel , ColumnName, " +
"ColumnType , ColumnTypeName ]" );
/* Obtendo metados */
for ( int i = 1 ; i <= rsmd.getColumnCount() ; i++ ) {
System.out.print( rsmd.getColumnLabel( i ) + " , " );
System.out.print( rsmd.getColumnName( i ) + " , " );
System.out.print( rsmd.getColumnType( i ) + " , " );
System.out.println( rsmd.getColumnTypeName( i ) );
}
} catch ( SQLException sqle ) {
System.out.println( "Erro obtendo metadadata :" +
sqle.getMessage() );
}
}
}
Java - 133
Metadados do Banco de Dados
Programa(s) Demonstração jdbc.listaDiscussao.JavaSqlDatabaseMetaData
package jdbc.listaDiscussao;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
try {
/* Obtendo objeto com metadados do banco de dados */
DatabaseMetaData dbmd = con.getMetaData();
ResultSet rs = null;
/* Obtendo metadados do banco de dados */
Java - 134
Interface com as contantes para as operações no banco de dados
Programa(s) Demonstração jdbc.listaDiscussao.DataBaseConstantes
package jdbc.listaDiscussao;
Java - 135
Classe utilitária facilitando o acesso e execução de comandos sql
Programa(s) Demonstração jdbc.listaDiscussao.DataBaseConnection
/**
* Classe com métodos estático permitindo a conexão com o banco de dados e
* a obtenção do objeto statement para exexução de comandos sql
*/
package jdbc.listaDiscussao;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.Statement;
Java - 136
Aplicação gráfica para execução de comandos SQL
Programa(s) Demonstração jdbc.ISQL
Java - 137
package jdbc;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Types;
public ISQL() {
try {
jbInit();
}
catch(Exception e) {
e.printStackTrace();
}
}
Java - 138
public static void main(String[] args) {
ISQL isql = new ISQL();
isql.setSize(530,450);
isql.show();
}
Java - 139
this.setTitle("SQL");
buttonGroup1.add(jRadioButtonQuery);
buttonGroup1.add(jRadioButtonUpdate);
this.getContentPane().add(jPanelApp, BorderLayout.CENTER);
jPanelApp.add(jPanelConfig, null);
jPanelConfig.add(jLabel1, null);
jPanelConfig.add(jLabel2, null);
jPanelConfig.add(jLabel3, null);
jPanelConfig.add(jLabel4, null);
jPanelConfig.add(jComboBoxDriver, null);
jPanelConfig.add(jTextFieldURL, null);
jPanelConfig.add(jTextFieldUsuario, null);
jPanelConfig.add(jTextFieldSenha, null);
jPanelConfig.add(jTextAreaQuery, null);
jPanelConfig.add(jButtonExecutar, null);
jPanelConfig.add(jButtonLimpar, null);
jPanelConfig.add(jButtonSair, null);
jPanelConfig.add(jRadioButtonQuery, null);
jPanelConfig.add(jRadioButtonUpdate, null);
jPanelApp.add(jPanelQuery, null);
jPanelQuery.add(jScrollPaneQuery, BorderLayout.CENTER);
}
void jButtonSair_actionPerformed(ActionEvent e) {
System.exit( 0 );
}
void jComboBoxDriver_itemStateChanged(ItemEvent e) {
if ( jComboBoxDriver.getSelectedIndex() == 0 ) {
jTextFieldURL.setText(ORACLE_URL);
} else if (jComboBoxDriver.getSelectedIndex() == 1 ) {
jTextFieldURL.setText(INTERBASE_URL);
} else {
jTextFieldURL.setText(SQLSERVER_URL);
}
}
void jButtonExecutar_mouseClicked(MouseEvent e) {
executarConsulta();
}
Java - 140
String msg = "Erro ao carregar o driver";
JOptionPane.showMessageDialog(null, msg + "\n" +
classEx.getMessage(), "Erro",
JOptionPane.ERROR_MESSAGE);
} catch (SQLException sqlEx) {
String msg = "Erro na conexão ao banco de dados";
JOptionPane.showMessageDialog(null, msg + "\n" +
sqlEx.getMessage(), "Erro",
JOptionPane.ERROR_MESSAGE);
} catch (Exception ex) {
String msg = "Erro Geral" + ex.getMessage();
JOptionPane.showMessageDialog(null, msg + "\n" +
ex.getMessage(), "Erro",
JOptionPane.ERROR_MESSAGE);
}
}
return colunas;
}
Java - 141
void jButtonLimpar_mouseClicked(MouseEvent e) {
jTextAreaQuery.setText("");
}
}
Java - 142
Bibliografia/
1. DEITEL. "Java - How To Program, Third Edition". Prentice Hall, 1999
2. MUGHAL. Khalid. "A Programmer´s Guide to JAVA Cetification." Addison-Wesley, 1999
3. CAPIONE, Mary. "The Java Tutorial Second Edition. Object-Oriented Programming for the
Internet". Sun Microsystem, 1998.
4. MUGHAL. Khalid. "A Programmer´s Guide to JAVA Cetification." Addison-Wesley, 1999
5. HAMILTON. Graham. "JDBC Database Access with Java". Sun Microsystem, 1997.
6. LEMAY, Laura. "Aprenda Java em 21 dias". Campus, 1999
7. HAEFEL. Richard Monson. "Enterprise JavaBeans". O´Reilly, 2000
8. "Professional Java Server Programming". WROX Press, 1999
9. LEA, Doug. "Concurrent Programming in Java. Design Principles and Patterns". Sun
Microsystem, 1998.
Fontes de Pesquisa
Links Descrição
http://www.javasoft.com/j2se/1.3/download-windows.html Download jdk1.3
http://www.borland.com/jbuilder/foundation/download/windows.html Download JBuilder 3.5 Foundation
http://web2.java.sun.com/docs/books/tutorial/ Tutorial java
http://www.dcc.ufrj.br/~schneide/MSI2_962/grupo4/g41.htm Glossário de orientação a objetos
http://java.sun.com/products/jdk/javadoc/index.html#javadoc1.3documents Tags JavaDoc
http://java.sun.com/docs/codeconv/index.html Code Conventions
http://www.unit.br/zemaria/MaterialDidatico.htm Programando com Qualidade, contendo
Code Conventions em português.
http://www.unit.br/zemaria/MaterialDidatico.htm Threads em Java
Java - 143
Exercícios
Java - 144
Exercício 2: Resolva os problemas abaixo com applications Java
Problema 1: "Leia um valor inteiro representando o valor solicitado para saque num caixa
eletrônico, em seguida, sabendo que o caixa está alimentado com notas de 1, 5, 10, 50 e 100 reais,
calcule e escreva quantas notas de cada valor serão necessárias para atender a solicitação de
saque"
Problema 3: "Ler três valores float e imprimir se estes podem ou não formar os lados de um
triângulo e qual triangulo seria.
Observação: Para formar os lados de um triângulo cada um dos valores deve ser menor que a
soma dos outros dois. Um triangulo pode ser : eqüilátero (3 lados iguais), isósceles (apenas 2 lados
iguais) e escaleno (3 lados diferentes)"
Problema 4: "Leia o nome, as três notas e o número de faltas de um aluno e calcule e imprima sua
situação ("Aprovado", "Reprovado por Falta" ou "Reprovado por média").
Observação: A média para aprovação é 5,0 (cinco) e o limite de faltas é 18."
Problema 5: "Leia um conjunto de números inteiros, onde o flag será o valor 0 (zero) e em seguida
escreva a média dos números lidos e o maior valor lido"
Problema 6: "Leia (ou inicialize) um vetor com 10 elementos de números inteiros e em seguida leia
um conjunto de números inteiros e para cada número lido informe se o mesmo está ou não
presente no vetor.
Problema 7: "Leia (ou inicialize) uma matriz 5x5 de números inteiros e em seguida escreva cada
valor presente na matriz e quantas vezes o mesmo aparece na matriz"
Java - 145
Exercício 3: Relacione classes, atributos e métodos para os seguintes contextos :
Contexto 1: Carro
Contexto 2: Aquário
Contexto 3: Jogo de futebol
Contexto 4: Banco
Contexto 5: Farmácia
Contexto 6: Supermercado
Contexto 7: Hospital
Contexto 8: "Uma pequena loja deseja manter informações sobre clientes, produtos e pedidos de
produtos feitos pelos clientes, as informações necessárias para atender um pedido são : nome e
endereço do cliente que fez o pedido, relação das descrições e preços dos produtos solicitados e
data e endereço de entrega dos produtos."
Exercício 4:
Implemente uma classe em Java que forneça as seguintes funcionalidades :
1. Armazenar um conjunto de números inteiros (int)
2. Inicializar com um array de números inteiros
3. Instanciar definindo a quantidade máxima de números a serem armazenados
4. inserir um valor
5. Obter a quantidade de valores armazenados
6. Preencher todo o conjunto com um determinado valor a ser fornecido
7. Preencher todo o conjunto com números aleatórios, fornecendo o valor máximo para o
número aleatório
8. Obter o maior valor armazenado
9. Obter o menor valor armazenado
10. Obter a média dos valores armazenados
11. Inverter as posições dos números
12. Obter o número de uma determinada posição a ser fornecida
13. Imprimir todos os valores armazenados
Implemente também um application que demonstre o uso de todos os métodos da classe.
Java - 146
Exercício 5: Implemente uma hierarquia de classes e uma aplicação, que demonstre o seu uso,
para atender as requisições abaixo.
1. Armazenar informações sobre veículos: chassi, placa, marca, modelo, revendedor,
endereço do revendedor e telefone do revendedor. Caso seja um veículo de passeio: a
velocidade máxima e quantidade de passageiros. Caso seja um veículo de carga: a carga
máxima. Observação : O cadastro será de no máximo 10 veículos.
2. Armazenar informações sobre motoristas: Matrícula, nome, correção visual, validade da
habilitação e tipo (A, B ou C). Observação : o cadastro será de no máximo 10 motoristas
3. Registrar movimentações para os veículos, onde em cada movimentação será necessário
registrar: o motorista, a kilometragem inicial e final e a data. Observação : apenas as 5
últimas movimentações devem ser armazenadas.
4. Registrar manutenções realizadas nos veículos, onde para manutenção deverá ser
registrado: uma descrição da manutenção e a data. Observação : apenas as 5 últimas
manutenções devem ser armazenadas.
5. Listar para todos os veículos as últimas movimentações
6. Listar para todos os veículos as últimas manutenções
Java - 147
Exercício 6:
Faça uma aplicação Java utilizando componentes Swing para modelar um aluno com as seguintes
informações : matricula, nome, endereco e telefones. Sendo que, a aplicação deverá permitir o
cadastro e consulta de alunos na tabela "Alunos" do banco de dados
"jdbc:interbase://140.100.0.20/c:/InfoNet//HouseTech.gdb", utilizando o driver
"interbase.interclient.Driver" e usuário "SYSDBA" e senha "masterkey".
Observações:
A classe Aluno deverá possuir os seguintes métodos para operações de banco de dados :
public void insertInto (String driver, String url, String usuario, String senha)
public void updateFrom (String driver, String url, String usuario, String senha)
public static Aluno selectFrom (String matricula, String driver, String url, String usuario, String senha)
public static void deleteFrom (String matricula, String driver, String url, String usuario, String senha)
O comando sql para inserir numa tabela é "insert into Alunos values ('00000','José Maria R S
Junior', 'Av. Adélia Franco, 2850. Bloco I, apt. 101', '217-7883/9133-8410')"
O comando sql para consultar numa tabela é "select * from Alunos where matricula =
'00001'"
O comando sql para apagar um registro é : "delete from Alunos where matricula = '00000'"
O comando sql para alterar um registro é : "update Alunos set nome = 'Novo Nome',
endereco = 'Novo Endereco', telefones = 'Novo telefone' where matricula = '00000'
O Comando de criação da tabela foi o seguinte:
create table Alunos (
matricula char(05) not null primary key,
nome char(50) not null,
endereco char(60),
telefones char(30)
)
Exercício n:
Java - 148