Escolar Documentos
Profissional Documentos
Cultura Documentos
Programando em Java PDF
Programando em Java PDF
em JAVA
Este livro foi originado a partir de nossas experincias com o ensino da linguagem Java
em laboratrio nos Cursos de Extenso no Departamento de Informtica e Estatstica,
Centro Tecnolgico, Universidade Federal de Santa Catarina.
Desde sua primeira verso no primeiro semestre de 2000, algumas revises foram
realizadas e aplicadas nos cursos dos anos subseqentes.
Este livro aborda a linguagem Java de uma forma mais objetiva, considerando o histrico
da linguagem, as caractersticas principais, os seus fundamentos, a orientao a objetos
em Java, programao de interfaces grficas, manipulao de programas para
Web(Applets), simulao de processamento concorrente(Threads), programao em redes
com Sockets e acesso a banco de dados utilizando o JDBC.
Pag.: 2
Agradecimentos
E queles que sempre nos apoiaram em todos os momentos, em especial, Olga Amparo
Garcia de Barreiro (in memorium), Olga Maria Barreiro Claro e Antonio Carlos Claro
Fernandez.
Tambm agradecemos aos Grupos de Usurios Java que hoje so numerosos em todo o
pas e que permitem uma troca de informaes entre a comunidade Java.
Pag.: 3
2008, Daniela Barreiro Claro e Joo Bosco Mangueira Sobral.
Fica autorizada a utilizao deste material para qualquer fim que no o comercial desde
que os seus autores sejam devidamente citados.
Pag.: 4
ndice
PREFCIO ........................................................................................................................... 2
AGRADECIMENTOS ......................................................................................................... 3
NDICE.................................................................................................................................. 4
1. ORIENTAO A OBJETOS ......................................................................................... 8
2. INTRODUO AO JAVA............................................................................................ 12
2.1 HISTRICO ................................................................................................................... 12
2.2 WEB X APLICATIVOS ...................................................................................................... 13
2.3 JAVA DEVELOPEMENT KIT - JDK .................................................................................. 13
2.4 MANIPULAO DO JDK(JAVA DEVELOPEMENT KIT) .................................................. 14
2.5 CARACTERSTICAS DA LINGUAGEM................................................................................. 15
2.6 COMPILAO DOS PROGRAMAS .................................................................................... 17
2.6.1 COMPILAO JAVA .................................................................................................... 17
2.6.2 COMPILAO DE OUTRAS LINGUAGENS ...................................................................... 17
2.7 AMBIENTES INTEGRADOS DE DESENVOLVIMENTO ........................................................... 17
2.7 AMBIENTES INTEGRADOS DE DESENVOLVIMENTO ........................................................... 18
2.8 INSTALAO DO COMPILADOR/INTERPRETADOR ( JDK ) ................................................ 18
2.9 ESTRUTURA DAS APLICAES JAVA................................................................................ 19
2.9.1 Elementos da Aplicao ...................................................................................... 20
Passagem de Parmetros da Linha de Comando......................................................... 21
3. FUNDAMENTOS DA LINGUAGEM ......................................................................... 22
3.1 COMENTRIOS ............................................................................................................. 22
3.2 PALAVRAS CHAVES ..................................................................................................... 22
3.3 TIPOS DE DADOS .......................................................................................................... 23
3.4 VARIAVEIS OU ATRIBUTOS ........................................................................................... 23
3.5 CONSTANTES ............................................................................................................... 24
3.6 OPERADORES ............................................................................................................... 24
3.6.1 Operadores Aritmticos....................................................................................... 24
3.6.2 Operadores Relacionais ...................................................................................... 24
3.6.3 Operadores Lgicos ............................................................................................ 25
3.6.4 Atribuio Composta........................................................................................... 25
3.6.5 Operadores Incremental e Decremental ............................................................. 25
3.6.6 Operador Ternrio .............................................................................................. 26
O VALOR DE A SERA MENOR , VISTO QUE 1 E MENOR QUE 2. .......................................... 26
3.7 CONVERSES COM TIPOS PRIMITIVOS.......................................................................... 26
3.8 CONTROLE DE FLUXO .................................................................................................. 28
3.8.1 Sentenas Condicionais....................................................................................... 28
3.8.2 Loops Indeterminados ......................................................................................... 29
3.8.3 Loops Determinados............................................................................................ 29
3.8.4 Mltiplas Selees ............................................................................................... 30
3.8.5 Manipulaes diversas ........................................................................................ 30
Pag.: 5
3.9 ARRAYS ....................................................................................................................... 31
3.10 STRINGS ..................................................................................................................... 32
4. ORIENTAO A OBJETOS EM JAVA .................................................................... 33
4.1 VANTAGENS DA OO EM JAVA ...................................................................................... 33
4.2 COMPONENTES DA ORIENTAO A OBJETOS ............................................................... 33
4.2.1 Atributos (Variveis) ........................................................................................... 34
4.2.2. Escopo de variveis ............................................................................................ 35
4.2.3 Mtodos ............................................................................................................... 35
#Modificadores de Acesso ............................................................................................ 37
4.2.4 Classes................................................................................................................. 37
4.2.5 Pacote .................................................................................................................. 38
4.2.6 Objetos................................................................................................................. 39
4.3 ATRIBUTOS DE INSTANCIA ........................................................................................... 40
4.4 METODOS DE INSTANCIA ............................................................................................. 40
4.5 ATRIBUTOS E MTODOS ESTTICOS (STATIC FIELDS / STATIC METHODS) .................. 41
4.5.1 Atributos Estticos............................................................................................... 41
4.5.2 Mtodos Estticos ou Mtodos de Classe ........................................................... 41
4.6 PASSAGEM DE PARAMETROS: POR VALOR E POR REFERENCIA ...................................... 43
4.7 HERANA .................................................................................................................... 44
4.8 CLASSES E MTODOS FINAL ........................................................................................ 48
4.9 CLASSES E MTODOS ABSTRATOS ............................................................................... 48
4.10 CONVERSES EXPLICITAS E IMPLICITAS .................................................................... 49
4.11 INTERFACES ............................................................................................................... 51
5. TRATAMENTO DE EXCEES ............................................................................... 52
5.1 CRIANDO UMA EXCEO ............................................................................................. 53
5.2 CLAUSULA THROWS .................................................................................................... 54
6. ABSTRACT WINDOW TOOLKIT - AWT ................................................................ 56
6.1 ELEMENTOS DA INTERFACE AWT ............................................................................... 58
6.2 TRATAMENTO DE EVENTOS ......................................................................................... 60
6.2.1 Classes de Eventos .............................................................................................. 61
6.2.2 Tratadores de Eventos ou Listeners .................................................................... 61
6.2.3 Classe Adapter..................................................................................................... 62
6.3 COMPONENTES E EVENTOS SUPORTADOS .................................................................... 63
7. INTERFACE GRFICA - SWING.............................................................................. 64
7.1 FRAMES ....................................................................................................................... 65
8. APPLETS ........................................................................................................................ 67
8.1 HIERARQUIA ................................................................................................................ 67
8.2 ESTRUTURA ................................................................................................................. 67
8.3 ARQUIVOS HTML ....................................................................................................... 68
8.4 EXECUTANDO UM APPLET ........................................................................................... 68
8.4.1 Passagem de Parmetros .................................................................................... 68
8.6 RESTRIES DE SEGURANA ....................................................................................... 69
Pag.: 6
8.7 PRINCIPAIS MTODOS .................................................................................................. 69
8.8 OBJETO GRFICO CLASSE JAVA.AWT.GRAPHICS........................................................ 70
8.9 FONTES ........................................................................................................................ 70
8.10 CORES........................................................................................................................ 70
9. PROCESSAMENTO CONCORRENTE - THREADS .............................................. 72
9.1 SINCRONIZAO .......................................................................................................... 75
10. SOCKETS ..................................................................................................................... 77
10.1 CLASSE SERVERSOCKET ............................................................................................ 78
10.2 CLASSE SOCKET ........................................................................................................ 78
11. ACESSO A BANCO DE DADOS - JDBC ................................................................. 80
11.1 VERSES DO JDBC.................................................................................................... 81
11.1.1 JDBC 1.0 ........................................................................................................... 81
11.1.2 JDBC 2.0 ........................................................................................................... 81
11.1.3 JDBC 3.0 ........................................................................................................... 81
11.2 TIPOS DE DRIVERS ..................................................................................................... 81
11.2.1 Driver JDBC Tipo 1 .......................................................................................... 81
11.2.2 Driver JDBC Tipo 2 .......................................................................................... 82
11.2.3 Driver JDBC Tipo 3 .......................................................................................... 82
11.2.4 Driver JDBC Tipo 4 .......................................................................................... 83
11.3 CLASSES DO JDBC CONEXO COM O BD ............................................................... 83
11.3.1 Driver ................................................................................................................ 83
11.3.2 DriverManager.................................................................................................. 83
11.3.3 java.sql.Connection ........................................................................................... 84
11.4 CLASSES JDBC ACESSO AO BD.............................................................................. 84
11.4.1 java.sql.Statement.............................................................................................. 84
11.4.2 java.sql.ResultSet............................................................................................... 85
11.4.3 java.sql.PreparedStatement............................................................................... 85
11.5 JDBC 2.0................................................................................................................... 86
11.5.1 Scrollable ResultSet........................................................................................... 86
11.5.2 Atualizaes de Dados via Programao ......................................................... 87
11.5.3 Consultas com o SQL 3 ..................................................................................... 87
12. REFERNCIAS BIBLIOGRFICAS ....................................................................... 88
LINKS ................................................................................................................................ 88
LIVROS .............................................................................................................................. 88
13. BIBLIOGRAFIA DOS AUTORES............................................................................. 89
Pag.: 7
Orientao a Objetos
1. Orientao a Objetos
Inovaes tecnolgicas surgidas na rea de Informtica tm criado uma necessidade de
utilizao e manipulao de informaes que antigamente no eram utilizadas. Os tipos
de dados complexos, como os objetos, passaram a ser manipulados atravs das
linguagens de programao, que passaram a receber a conotao de Linguagem de
Programao Orientada a Objetos.
A orientao a objetos tem como objetivo principal modelar o mundo real, e garantir que
as taxas de manutenibilidade (manuteno) sero maiores diante deste contexto. Isso
possvel, pois utilizando uma linguagem de programao orientada a objetos consegue-se
obter um desenvolvimento mais rpido, visto que este desenvolvimento ocorre em
mdulos, em blocos de cdigos correspondentes aos objetos e seus acoplamentos. Atravs
da orientao a objetos pode-se obter uma maior qualidade e agilidade no
desenvolvimento, pois o fator reusabilidade (reutilizao) permite que se re-utilize outros
objetos que foram anteriormente desenvolvidos e podem ser facilmente incorporados na
aplicao. A reusabilidade tambm garante uma manuseabilidade melhor do programa,
pois os testes referentes aos componentes, j foram previamente executados, garantindo
assim a utilizao coesa dos objetos.
A orientao a objetos surgiu na dcada de 60, baseada na Teoria dos Tipos da lgebra,
mas somente na dcada de 90 comeou a ser amplamente utilizada computacionalmente.
Ela tem como principio fundamental representar o mundo real e a forma de se interagir
com os objetos. Mas, o que um objeto?
Vamos pensar no mundo dos automveis. Pensemos em uma montadora de veculo, onde
h uma fbrica de automveis. Cada automvel que sai desta fbrica nico,
identificado por um nmero de chassi. O meu carro nico, o nico que possui um
arranho na parte traseira esquerda ... Por mais que tenha diversos carros iguais ao meu,
com a mesma cor, da mesma marca, mesma categoria, o meu carro nico, por ter
caractersticas que somente pertencem a ele. E assim so os objetos.
Pag.: 8
Orientao a Objetos
Objeto B Objeto A
Figura 1. Troca de mensagens entre os objetos.
Pag.: 9
Orientao a Objetos
elas podem adicionar variveis e mtodos ao seu escopo. Entre estas caractersticas da
herana, a manipulao das classes que herdam mtodos e atributos permite que se
modularize o cdigo de tal forma que cada objeto tem uma funcionalidade prpria e
garante assim uma coeso das informaes.
Um usurio somente precisa saber o que o objeto capaz de fazer, mas no interessa
como ele dever ser feito. Assim, a interface permite que se utilize o conceito do
encapsulamento, onde somente as assinaturas dos mtodos esto disponveis para
exibio aos usurios.
Podemos criar uma estrutura mais prxima da manipulao de classes e objetos dentro
da linguagem Java, como podemos ter uma classe PESSOA que possui atributos
(caractersticas) tais como: cor_de_olho, cor_de_cabelo, idade. Esta classe PESSOA
tambm possui mtodos (aes, comportamentos) tais como: faz_aniversario,
pinta_cor_de_cabelo.
PESSOA
cor_de_olho
cor_de_cabelo
idade
pinta_cor_cabelo()
faz_aniversario()
Enquanto que o objeto antonio possui outros valores para seus atributos.
bosco.cor_de_olho = castanho;
Pag.: 10
Orientao a Objetos
bosco.cor_de_cabelo = preto;
bosco.idade = 55;
daniela.faz_aniversario ( );
faz_aniversario( ) {
daniela.idade = daniela.idade+1;
}
daniela.pinta_cor_cabelo(preto);
Este segundo mtodo age sobre o objeto daniela e realiza a ao de pintar a cor do cabelo
passando como parmetro a cor desejada.
Pag.: 11
Introduo ao Java
2. Introduo ao JAVA
2.1 Histrico
Em 1993, surgiu uma oportunidade para o grupo Green, agora incorporado como
FirstPerson a Time-Warner, uma empresa que estava solicitando propostas de sistemas
operacionais de decodificadores e tecnologias de vdeo sob demanda. Isso foi na mesma
poca em que o NCSA lanou o MOSAIC 1.0, o primeiro navegador grfico para Web. A
FirstPerson apostou nos testes de TV da Time-Warner, mas esta empresa preferiu optar
pela tecnologia oferecida pela Silicon Graphics.
A Sun considera o sucesso do Java na Internet como sendo o primeiro passo para utiliz-
lo em decodificadores da televiso interativa em dispositivos portteis e outros produtos
eletrnicos de consumo exatamente como o Java tinha comeado em 1991. Sua
natureza porttil e o projeto robusto permitem o desenvolvimento para mltiplas
plataformas, em ambientes to exigentes como os da eletrnica de consumo.
Pag.: 12
Introduo ao Java
java <nomedaclasse>
Pag.: 13
Introduo ao Java
Compilador Interpretador
javac Teste.java java Teste
Sendo um Applet, deve-se construir uma pgina HTML para abrigar o applet e carreg-la
atravs de um browser ou do appletviewer (visualidador de applets Java):
appletviewer <nomedoarquivo.html>
Compilador
javac Teste.java
Pag.: 14
Introduo ao Java
Orientada a Objetos
Paradigma atualmente mais utilizado na construo de softwares. Permite que se focalize
o dado, enfim, o objeto. Java no uma linguagem 100% orientada a objetos, como
Smaltalk, onde qualquer elemento, (operadores, sinais, tipos de dados,...) so objetos. Em
Java h os tipos primitivos de dados que no so objetos, mas foram criados e
incorporados ao Java para permitir uma melhor forma de utilizao da linguagem pelos
programadores. Outra caracterstica importante da linguagem Java em relao
linguagem C++, que Java no suporta herana mltipla.
Compilada e Interpretada
Um programa desenvolvido em Java necessita ser compilado, gerando um bytecode. Para
execut-lo necessrio ento, que um interpretador leia o cdigo binrio, o bytecode e
repasse as instrues ao processador da mquina especfica. Esse interpretador
conhecido como JVM (Java Virtual Machine). Os bytecodes so conjuntos de instrues,
parecidas com cdigo de mquina. um formato prprio do Java para a representao
das instrues no cdigo compilado.
Distribudo
Programas Java so linkados em tempo de execuo. Os bytecodes gerados durante a
compilao s sero integrados na execuo. Um objeto X existente em um arquivo
quando instanciado, somente ser alocado na memria em tempo de execuo. Se alguma
alterao ocorrer na classe que define o objeto X, somente o arquivo da classe com a
alterao necessita ser compilado.
Multiprocessamento (Multithread)
Suporta a utilizao de threads. Threads so linhas de execuo, executadas
concorrentemente dentro de um mesmo processo. Diferentemente de outras linguagens,
programar utilizando Threads simples e fcil na linguagem Java.
Portabilidade
Pode ser executado em qualquer arquitetura de hardware e sistema operacional, sem
precisar ser re-compilado. Um programa Java pode ser executado em qualquer plataforma
que possua um interpretador Java (ambiente de execuo). Alm disso, no h
dependncia de implementao, como por exemplo, os tamanhos dos tipos primitivos no
diferem entre si, so independentes da maquina em que est a aplicao. Assim, o tipo int
possui sempre um tamanho de 32-bits em Java e em qualquer mquina que esteja sendo
executado.
Pag.: 15
Introduo ao Java
Segura
O Java fornece uma srie de mecanismos para garantir a segurana dos aplicativos. Um
programa em Java no tem contato com o computador real; ele conhece apenas a
mquina virtual (JVM). A mquina virtual decide o que pode ou no ser feito. Um
programa Java nunca acessa dispositivos de entrada e sada, sistema de arquivos,
memria, ao invs disso ele pede a JVM que acesse.
Pag.: 16
Introduo ao Java
Compilador Interpretador
Java Java
(PowerPC) (PowerPC)
Compilador Interpretador
Java (Sparc) Java (Sparc)
Figura 4. Compilao em Java
Compilador
PowerPC
Cdigo binrio
Compilador
Sparc
Pag.: 17
Introduo ao Java
VisualCaf - Symantec
IBM Visual Age for Java - Sun
Borland JBuilder Borland
Microsoft Visual J++ - Microsoft
Oracle JDeveloper Oracle
Forte for Java Sun
Eclipse Comunidade Aberta(IBM, Rational, Suse, Red Hat,..)
JCreator - Xinox Software
Apesar das facilidades, a utilizao destes ambientes pode trazer alguns inconvenientes
como: a criao visual de componentes como botes, caixas de texto, barras de rolagem e
outros, especificamente de um ambiente. Alguns ambientes incorporam grande
quantidade de cdigo na aplicao e uma hierarquia interna de organizao dos pacotes,
que obriga a aplicao final a carreg-los consigo. Particularidades dos produtos tambm
criam uma dependncia que contraria os princpios de Java.
Outro ponto a ser observado a grande abstrao provocada sobre o domnio da
aplicao, ou seja, o programador acaba inserindo na aplicao possveis bugs (erros de
programao) dos ambientes e no tem controle para corrig-los, e muitas vezes nem
detect-los. Assim, mais razovel sempre ter domnio direto do cdigo que se est
desenvolvendo. Dessa forma, a utilizao do JDK diretamente, gera aplicaes mais
robustas e enxutas.
http://java.sun.com
O JDK utiliza algumas variveis de ambiente para indicar onde localizar as classes
usadas pelo compilador e os arquivos necessrios para compilar e interpretar os
programas desenvolvidos. Para que o compilador fique visvel em qualquer sesso de DOS
ou por qualquer IDE utilizada e configurada, basta adicionar o cdigo abaixo no PATH:
Caso esteja sendo utilizado o Windows 2000,ou Windows XP, basta acrescentar esta
varivel dentro do Painel de Controle, no System, onde h a descrio das variveis de
ambiente. Nas ultimas verses de Java, a partir da 1.2.x este procedimento do path no
mais necessario visto que no momento da instalao estas configuraes ja so
realizadas.
Caso desejo rodar o interpretador Java dentro de uma janela DOS, voc provavelmente
necessitara setar a variael CLASSPATH para o diretorio local, como segue:
Pag.: 18
Introduo ao Java
set classpath=%classpath%;.;
O .; significa justamente que voc esta setando o diretorio corrente, ou seja o diretorio
onde voc esta localizado. Por exemplo, se voc esta localizado no diretorio
c:\daniela\arquivos, e voc seta o classpath com o .; como se voce estivesse setando o
proprio diretorio, como segue:
class NomeDaClasse {
// Atributos
// Mtodos
public static void main( String[] args ) {
//corpo principal do programa
}
}
Claro que uma classe Java tera somente a classe, os mtodos e seus atributos, no
contendo a parte do mtodo main.
Uma aplicao em Java caracterizada por possuir um mtodo main(). O mtodo main
o mtodo chamado pelo interpretador Java quando executado. A declarao do mtodo
deve ser rigorosamente: public static void main( String[] args), onde define um mtodo
de classe de acesso pblico, sem retorno, que recebe como parmetro um array de Strings
de tamanho indefinido, representado pela varivel args. O args a declarao do objeto
do Array de String, por isso pode ser atribudo a ele qualquer nome.
Abaixo demonstrada uma primeira aplicao que somente imprime na tela uma
mensagem qualquer. Seguem os passos para construo da aplicao:
class OlaMundo {
public static void main( String[] args ) {
//corpo do programa
//Escreve na tela: Ola Mundo.
System.out.println(Ola Mundo);
}
}
Pag.: 19
Introduo ao Java
2. Salvar o arquivo dando a ele o mesmo nome da classe e com a extenso .java. Salvar
arquivo com nome OlaMundo.java.
3. Compilar o arquivo
javac OlaMundo.java
public
um quantificador do mtodo que indica que este acessvel externamente a esta classe
(por outras classes que eventualmente seriam criadas). Este tpico ser abordado
posteriormente.
static
um qualificador que indica que este mtodo um mtodo de classe, ou seja, h uma
cpia somente por classe. Os mtodos static podem ser invocados, mesmo quando no for
criado nenhum objeto para a classe, para tal deve-se seguir a sintaxe:
<NomeCasse>.<NomeMetodoStatic>(argumentos)
void
main
String[] args
{ .... }
Pag.: 20
Introduo ao Java
System.out.println
Chamada do mtodo println para o atributo out da classe System. O argumento uma
constante do tipo String. println assim como o writeln de Pascal, imprime na saida padro
a String e posiciona o cursor na linha abaixo, analogamente print no avana a linha.
class AppParametro {
public static void main (String[] args){
System.out.println("Parametros:"+args[0]+""+args[1]+""+
args[2]);
System.out.println("Quantidade Parametros:"+args.length);
}
}
Pag.: 21
Fundamentos da Linguagem
3. Fundamentos da Linguagem
3.1 Comentrios
Comentrio de bloco
/* texto */
Todo o texto ignorado. Este tipo de comentrio pode ocupar vrias linhas.
Comentrio de Linha
// texto
Todo o texto depois de // at o final da linha ser ignorado.
Comentrio do JavaDoc
/** Comentrio para documentao
*/
Este ultimo um tipo especial de comentrio que vai armazenar as diretivas para
a gerao automtica da documentao das classes, utilizando o JAVADOC.
Toda linguagem tem um grupo de palavras que o compilador reserva para seu prprio
uso. Essas palavras-chaves no podem ser usadas como identificadores em seus
programas.
So elas:
Pag.: 22
Fundamentos da Linguagem
Atributos em Java podem ser declarados no corpo da classe ou podem ser declarados
localmente em qualquer parte da implementao de um mtodo. A declarao de
atributos no Java segue a sintaxe:
Pag.: 23
Fundamentos da Linguagem
<identificador> = <valor>;
Exemplos:
int diasFerias, outroInteiro;
double salario;
float umFloat = 0.5;
char letra = i;
boolean achou = false;
diasFerias = 30;
....
Os tipos de dados juntamente com as variveis podem ser declarados e somente depois
inicializados com valores determinados, como segue o exemplo da varivel diasFerias. Na
primeira linha:
3.5 Constantes
As constantes em Java so definidas atravs da palavra reservada FINAL. Esta palavra
reservada tem por caractersticas atribuir somente uma vez o valor varivel. Para
determinar que uma varivel uma constante, basta inserir a palavra reservada no inicio
da definio da mesma. As constantes em Java tm por caracterstica e estilo serem
escritas em caixa alta e inicializadas com um determinado valor, como segue:
3.6 Operadores
Pag.: 24
Fundamentos da Linguagem
A diviso retorna um inteiro se os argumentos forem inteiros, mas se forem de outro tipo
retorna um ponto flutuante. Segue abaixo um exemplo:
15/2 = 7
15.0 / 2 = 7,5
Exemplos:
x += 10; // Equivale x = x + 10;
x += y; // Equivale x = x + y;
a -= b; // Equivale a = a b;
a *= 3; // Equivale a = a * 3;
Pag.: 25
Fundamentos da Linguagem
aps a varivel, ser realizado primeiramente a varivel para depois ser realizado o
incremento ou o decremento da varivel.
Exemplos:
i++; //Equivalente a: i = i +1;
i--; //Equivalente a: i = i -1;
++i; //Equivalente a: i = i +1;
--i; //Equivalente a: i = i -1;
int a = 7;
int b = 7;
int x = 2 * ++a;
int y = 2 * b++;
O operador ternrio formado por uma condio, e em caso positivo, executada uma
ao e em caso negativo, outra ao pode ser executada.
x<y a condio, e em caso positivo ser executado e1 e em caso negativo ser executado
e2. Segue abaixo um exemplo com valores:
A converso entre tipos primitivos de dados uma prtica bastante comum e necessria.
Deve-se ter bastante cuidado para no perder informaes ou obter um resultado que no
se esperava. Para efetuar uma converso necessrio usar um mecanismo chamado type
cast, onde o compilador vai converter de um tipo para outro. Isso feito colocando o nome
do tipo que se quer converter entre parnteses(CORNELL,2002).
Pag.: 26
Fundamentos da Linguagem
char
float double
Converso sem perda de informao(implcita)
Converso com provvel perda de informao (explcita)
Por exemplo, caso existam duas variveis, uma do tipo short e outra do tipo int. Existem
duas possibilidades para esta converso:
Exemplo:
short varshort;
int varInt;
varInt = varShort;
varShort = varInt; //Tipo incompatvel para converso, short
menor que int
O cdigo acima pode funcionar com o acrscimo do cast de tipo. O cdigo correto seria:
short varshort;
int varInt;
varInt = varShort;
varShort = (short) varInt;
Pag.: 27
Fundamentos da Linguagem
A maioria dos programas toma decises que afetam seu fluxo. As declaraes que tomam
essas decises so chamadas de declaraes de controle.
O controle de fluxo no Java pode ser utilizado tanto por sentenas condicionais, quanto
por controle de estruturas de repetio. O controle de fluxo similar ao C/C++,
facilitando a utilizao e manipulao destas estruturas.
# Declarao IF
Sintaxe:
if ( boolean )
declarao1;
else
declarao2;
Exemplo:
if (fim == true)
System.out.println(Trmino!);
else
System.out.println(Continuando...);
Exemplo:
if (fim == true){
cont = 0;
System.out.println(Trmino);
} else {
cont = cont +1;
System.out.println(Continuando...);
}
A condio ELSE, sempre trabalha com o IF mais prximo delimitado por um bloco de
cdigo.
if (x>0)
if (y>=0)
sinal=0;
else
sinal=1;
Pag.: 28
Fundamentos da Linguagem
# Declarao WHILE
Sintaxe:
while (booleano)
declarao;
Exemplo:
while ( i != 0 ){
salario = salario * 0.5;
i--;
}
Declarao DO - WHILE
Utilizada quando se quer que o corpo do lao seja necessariamente executado, pelo menos
uma vez. A expresso de comparao avaliada depois que o lao for executado.
Sintaxe:
do
declarao
while (booleano);
Exemplo:
do {
salario = salario * 0.5;
i--;
} while ( i != 0 );
Declarao For
Fornece uma expresso para inicializar as variveis, seguida por uma expresso de
comparao e depois um lugar para incrementar ou decrementar as variveis de lao. A
declarao pode ser um comando simples ou um bloco de comandos.
Sintaxe:
for (expressao; booleano; expressao)
declaracao;
Exemplo:
Pag.: 29
Fundamentos da Linguagem
As variveis que so definidas dentro da sentena FOR, no podem usar os seus valores
fora do loop. Isso ocorre, pois a varivel perde o escopo, visto que est sendo definida para
ser utilizada dentro do lao FOR.
Sintaxe:
switch ( expresso ) {
case valor: declarao;
...
default: declarao;
}
Exemplo:
switch ( cmd ){
case 1: System.out.println(Item do menu 1);
break;
case 2: System.out.println(Item do menu 2);
break;
case 3: System.out.println(Item do menu 3);
break;
default: System.out.println(Comando invalido!);
}
O comando break deve ser colocado ao final de cada clusula case, pois seno todas as
condies que forem satisfeitas, sero executadas. Ou seja, caso a condio do switch
tenha uma condio que satisfeita por mais de um case, todos que satisfizerem esta
condio sero executados. Por isso, o break importante para garantir que quando um
case for satisfeito, mais nenhum deles sero executados tambm.
# Declarao Return
Sintaxe:
return expresso;
Exemplo:
class Teste{
public int Potencia ( int base, int n){
int result = base;
for ( int i = 0; i < n-1; i ++ )
Pag.: 30
Fundamentos da Linguagem
Declaraes de desvio usada para sair de um lao ou mtodo antes do normal. O tipo
determina para onde transferido o controle. O break utilizado para transferir o
controle para o final de uma construo de lao (for, do, while ou switch). O lao vai
encerrar independentemente de seu valor de comparao e a declarao aps o lao ser
executada.
Exemplo:
int i = 0;
while (true) {
System.out.println(i);
i++;
if ( i > 10 ) break;
}
Exemplo:
for (int i = -10; i<10; i++){
if ( i == 0 )
continue;
System.out.println(1/i);
}
3.9 Arrays
Os colchetes depois do tipo de dado int, dizem ao compilador que um array de inteiros.
O operador new instancia o array e chama o construtor para cada elemento. O construtor
do tipo int e pode conter cinco elementos. Arrays podem ser multimensionais. Durante a
instanciao, um array multidimensional deve ter pelo menos uma de suas dimenses
especificadas. A seguir, exemplos de como criar um array bidimensional.
Exemplo:
int [][] numlist = new int [2][];
int[][] lista = new int[5][5];
Pag.: 31
Fundamentos da Linguagem
Exemplo:
int[] nums = {1, 2, 3, 4, 5};
int[][] nums = {(1,1), (2,2), (3,3), (4,4), (5,5)};
Os arrays podem ser indexados por um valor byte, short, int ou char. No se pode indexar
arrays com um valor long, ponto flutuante ou booleano. Se precisar usar um desses tipos
deve-se fazer uma converso explcita. Os arrays so indexados de zero at o
comprimento do array menos um.
long result = 0;
3.10 Strings
Uma String um tipo definido pela classe String e contm mtodos e variveis. Uma
String a unica classe que pode ser instanciado sem usar o operador new. A seguir
exemplos da utilizao de strings.
Exemplo:
//criao do String
String str = Hello;
int inteiro = 4;
String novo = str + valor do inteiro: + inteiro;
//Concatenao de strings
Pag.: 32
Orientao a Objetos em Java
Em Java quando quisermos obter o valor de um atributo de outra classe, esta classe deve
oferecer um mtodo com acesso liberado, que retorne o valor do atributo, denominado
tambm de mtodo GET. E ainda, caso se queira modificar um valor de um determinado
atributo, tambm deve faze-lo atravs de mtodos, os quais so denominados de mtodos
SET.
Pag.: 33
Orientao a Objetos em Java
Atributos em Java podem ser declarados no corpo da classe ou podem ser declarados
localmente em qualquer parte da implementao de um mtodo, como acima
denominamos aqui so as variaveis. A declarao de atributos no Java segue a sintaxe:
<identificador> = <valor>;
Exemplos:
....
int umInteiro, outroInteiro;
float umFloat = 0.5;
char caracter = i;
boolean achou = false;
umInteiro = 90;
....
Exemplo:
public class A{
public static void main (String[] args){
//atributo de tipo primitivo
int a;
a = 1;
System.out.println(Sada do Valor de A:+a);
Para o tipo inteiro, o ambiente de execuo sabe exatamente quanta memria alocar, no
caso 4 bytes. Esta alocao sempre possui 4 bytes em Java, e no difere de mquina
como na linguagem C/C++. Mas quando declaramos que queremos um array de inteiros,
Pag.: 34
Orientao a Objetos em Java
o ambiente no sabe. Antes de colocarmos alguma coisa em a, temos que solicitar algum
espao de memria para a varivel. Isso realizado atravs do operador new.
{
Escopo
......
de
declarao
class de atributos
MinhaClasse
......
public void Metodo(parametros)
Escopo de {
Parmetros ......
do mtodo
declarao de variveis
locais
...
Escopo de
Variveis
catch(parmetros){
Locais
.....
.....
}
Escopo de
Parmetros
do Tratador }
de Excees
4.2.3 Mtodos
Pag.: 35
Orientao a Objetos em Java
ser primitivo ou um objeto de uma determinada classe, ou como no mtodo main, pode
ser void, ou seja, no retorna nada.
class Parametro {
public int adicionaDois(int i){
i = i+ 2;
System.out.println("Valor de i " + i );
return i;
}
public static void main (String[] args ){
int i = 11;
System.out.println("Valor inicial de i " + i );
//Mostra os valores de i e de j
System.out.println("Valor de j " + j );
System.out.println("Valor final de i " + i );
}
}
Caractersticas Especiais
# THIS
Os mtodos possuem caractersticas especiais e tem a principal funcionalidade de acessar
os atributos privados do objeto. Segue um exemplo de um mtodo abaixo:
O prprio objeto sempre passado pelo mtodo mas de uma maneira no visvel ao
usurio. Este mesmo mtodo acima pode ser visto como sendo :
meuObjeto.aumentoSalario(double percentual)
Onde o meuObjeto se refere ao objeto ao qual est chamando este mtodo e dentro do
mtodo pode ser referenciado por uma palavra reservada denominada this. O mesmo
mtodo pode ser reescrito utilizando o this como segue abaixo, evidenciando assim
manipulao do atributo corretamente.
Pag.: 36
Orientao a Objetos em Java
#NULL
O null representa um objeto no existente. Quando o objeto nulo significa que no
temos acesso a nenhum de seus mtodos ou atributos. Uma maneira de evitar que uma
exceo ocorra ao se tentar acessar o objeto (NullPointerException) testando se este
objeto nulo.
Exemplo:
....
Empresa emp; //objeto no foi criado, ento null
emp.Atualizar ( nome, cgc );
.....
#Modificadores de Acesso
private
a forma de proteo mais restritiva. Permite acesso apenas a mesma classe, ou seja,
visvel somente na classe. Utilizado pelos atributos da classe, permitindo que outros
objetos ou classes somente acessem estas caracteristicas atraves da manipulao de
mtodos.
public
Permite acesso por todas as classes, sejam elas do pacote corrente ou no.
Normalmente utilizados pelos mtodos dentro de uma classe. Permite que todos faam
manipulaes dos atributos atravs dos metodos publicos. Garantindo assim o
encapsulamento das informaes.
protected
Permite acesso por todas as classes que esto no mesmo pacote e s subclasses de
fora do pacote.
Sem modificador
Permite acesso por todas as classes do mesmo pacote.
4.2.4 Classes
Pag.: 37
Orientao a Objetos em Java
A criao de uma classe em Java iniciada pela palavra reservada class. A sintaxe a
seguinte:
As classes podem estar organizadas cada uma em seu arquivo fonte separado, onde o
nome da classe deve ser o nome do arquivo gerado com a extenso *.java. Caso
necessite, pode colocar classes em um nico arquivo fonte, porm somente pode ter uma
classe com o modificador public e esta classe com este modificador que determinar o
nome do arquivo fonte.
4.2.5 Pacote
Pacotes contm classes e duas outras entidades de Java que veremos posteriormente:
excees e interfaces.
Se a declarao import no for utilizada e desejarmos utilizar alguma classe externa, ser
necessrio colocar o caminho da classe a cada acesso.
Exemplo:
import java.lang.*;
O asterisco no final diz ao compilador para importar todas as classes do pacote java.lang
Esse um dos vrios pacotes includos na API. O compilador Java define implicitamente
um pacote para as classes no diretrio atual e o importa implicitamente. Esse o motivo
pelo qual no precisamos colocar explicitamente as classes que escrevemos em um
pacote.
Exemplo:
package Teste;
class Simples {
public void Metodo( ) {
}
}
Pag.: 38
Orientao a Objetos em Java
4.2.6 Objetos
Modelo:
<Classe> <identificador>;
Exemplo:
Date data;
Date data;
data.toString();
Isso no pode ocorrer visto que data ainda no um objeto. Para se obter um objeto,
necessrio inicializar a varivel e para inicializar esta varivel necessrio utilizar o
operador new().
Modelo:
<identificador> = new <Classe> ( [param1], [param2] );
Exemplo:
Data data = new Data();
O new cria uma referncia para um objeto, e esta referencia armazenada na varivel do
objeto. As variveis de objetos locais no so automaticamente inicializadas para null, por
isso devem ser inicializadas explicitamente com o operador new() ou com o valor null.
Exemplos:
...
Empresa emp;
emp = new Empresa( nome, end );
....
ou
...
Empresa emp = new Empresa( nome, end );
....
Pag.: 39
Orientao a Objetos em Java
<objeto>. <atributo>;
Exemplo:
Empresa emp = new Empresa( );
emp.nome = Sun;
Um atributo de instncia pode ser tanto um tipo simples ( int, char, etc ) como um objeto
de uma classe <Classe>. O atributo pode tambm ser inicializado ao ser declarado.
Exemplo:
class Teste {
Pessoa umaPessoa;
Pessoa outraPessoa = new Pessoa ("Joo");
int inteiro;
int numero = 15;
}
[modificadores]<tipoRetorno><nomeMetodo>([<tipoParamN>
<ident.ParamN>, .... ] ) [throws <ClasseThrowableN>,....];
O tipo de retorno pode ser qualquer classe ou tipo primitivo. Um mtodo pode lanar
excees, isto indicado atravs da palavra throws, seguida das classes e excees que
podem ser lanadas, isso ser abordado em um capitulo mais adiante. Se o mtodo
retornar algum valor, necessrio incluir a palavra return seguida do valor de retorno no
corpo desse mtodo. Durante a execuo, se o computador encontrar um return, ele pra
a execuo do mtodo atual e retorna o valor indicado.
class Exemplo{
private float salario;
//outros mtodos
Pag.: 40
Orientao a Objetos em Java
Exemplo:
class Inteiro {
static int ValorMax = 100000;
}
class Empregado {
private int id;
private static int nextid;
}
De acordo com a classe Empregado citada acima, podemos observar que h um atributo
de instancia, denominado id e outro atributo de classe denominado nextid1. Neste caso,
todo o objeto Empregado tem o seu atributo id, mas somente um atributo nextid
compartilhado por todas as instncias da classe.
Se eu possuo 1000 objetos no meu programa, isso significa que eu terei 1000 atributos
id, 1 atributo nextId.
Se no existir nenhum objeto, o nextId existir, visto que o mesmo pertence classe e no
a um objeto individual.
Teste de Mesa:
public void setId(){
id(pedro) id(daniela) nextId
id=nextid;
nextId++; 0 0 1
} 1 1 2
pedro.setId(); 3
daniela.setId();
1
Este exemplo, como muitos outros presentes neste livro, foi adaptado do livro Core Java 2 (CORNELL, 2002), por ser considerado, por
mim(Daniela), um dos melhores livros de Java que ja utilizei. Inclusive adotado nas Universidades onde lecionei, por ser didatico e muito
explicativo.
Pag.: 41
Orientao a Objetos em Java
Exemplo:
class Exemplo{
static void ImprimeMsg( ){
System.out.println("Requisio invlida!");
}
}
Cada classe pode ter um destrutor. O destrutor chamado quando o objeto jogado para
a coleta de lixo, portanto no se sabe quando o destrutor ser chamado. Esse um bom
local para fechar arquivos, liberar recursos da rede enfim encerrar algumas tarefas. O
destrutor em Java chamado finalize. Ele no possui tipo de retorno e no assume
nenhum parmetro.
class Teste{
finalize ( ){
//tarefas a serem encerradas
}
}
So mtodos especiais, executados automaticamente toda vez que uma nova instncia da
classe criada. So utilizados para realizar toda a inicializao necessria a nova
instncia da classe. A declarao semelhante a qualquer outro mtodo, a no ser pelo
nome dos mtodos construtores ser o mesmo da classe e eles no possurem um tipo de
retorno.
class Empresa{
String nome;
String endereo,
Pag.: 42
Orientao a Objetos em Java
Empresa ( ){
nome = "no definido";
endereo = "vazio";
}
class Parametro{
static int AdicionaQuatro( int i) {
i = i + 4;
System.out.println("Valor da cpia local: " + i );
Return i;
}
static static void main( String S[ ] ) {
System.out.println("Passagem de parmetros! " );
int i = 10;
System.out.println("Valor original de i: " + i );
int j = AdicionaQuatro(i);
System.out.println("Valor de j: " + j );
System.out.println("Valor corrente de i: " + i );
}
}
Passagem de parmetros!
Valor original de i: 10
Valor da cpia local: 14
Valor de j: 14
Valor corrente de i: 10
Observao
O valor de i no muda, embora tenha sido acrescentado 4 a i, no mtodo AdicionaQuatro.
Em Java, considera-se que no h passagem por referncia, visto que sempre feita uma
copia do valor em se tratando de manipulaes de mtodos. Assim, o mtodo no altera o
valor da referencia passada, visto que dentro de um mtodo os parmetros passados
perdem o escopo quando mostrados os seus valores. Assim, em Java, considera-se que h
somente passagem de parmetro por valor. O mtodo obtm uma copia do valor do
parmetro.
Pag.: 43
Orientao a Objetos em Java
umArray[2] antes = 10
umArray[2] depois = 100
Os valores do array so alterados pois est se trabalhando com uma cpia do valor da
referncia. Mas se fossem passados dois objetos para o mtodo MudaArray, neste caso o
objeto externo no alteraria o seu valor, visto que foi passado internamente somente uma
cpia do valor da referncia, e no a referncia propriamente dita. Assim, o Java sempre
realiza as passagens dos parmetros por valor.
Observao
A passagem de parmetros em String, no segue as regras de tipos de referncia quando
passada como parmetro. As variveis String agem como tipos primitivos. Quando uma
String passada para um mtodo, na realidade est se trabalhando com uma cpia. As
alteraes dentro do mtodo no iro afetar o original passado como parmetro.
4.7 Herana
O conceito de herana vem do mundo real, onde todos ns herdamos caractersticas dos
nossos pais e parentes. Sempre anexado herana o conceito de -UM.
Gerente UM Empregado
Pag.: 44
Orientao a Objetos em Java
bonus=b;
}
}
class Empregado {
priavate String nome;
priavate double salario;
Os atributos privados definidos na classe Empregado, somente podem ser acessados pela
classe Empregado. O Gerente, poder acessar o mtodo getSalario(). Isso garante o
encapsulamento das informaes. Para acessar o mtodo getSalario() da superclasse,
necessrio usar uma palavra reservada denominada SUPER.
SUPER uma palavra chave utilizada para acessar mtodos da superclasse. O super
direciona o compilador para invocar um mtodo da superclasse. Normalmente ele
utilizado no caso de herana, e que se deseja que a classe filha utilize os recursos da
classe Pai.
Pag.: 45
Orientao a Objetos em Java
Tambm se pode utilizar o super com o construtor, porm ele deve sempre ser a primeira
sentena do construtor, como no exemplo a seguir:
Classe Object
Classe Neta
class Pai {
.......
}
class Filho extends Pai {
.......
}
class Filha extends Pai {
.......
}
class Neta extends Filha {
Pag.: 46
Orientao a Objetos em Java
.......
}
Bem, neste exemplo acima acabamos de denifir e instanciar um objeto chamado chefe da
classe Gerente. Voltamos ao exemplo do Gerente, onde o salario do o chefe deve ser
acrescido do bonus. Neste exemplo acima se solicitarmos o metodo salario de chefe, a
nossa resposta seria 8000+500 = 8500.
Continuando, nos vamos criar um array de Empregados com trs elementos, tal como:
Para cada indice deste array nos vamos colocar uma instancia de empegado., como segue:
emp[0] = chefe;
emp[1] = new Empregado(Pedro,5000);
emp[3] = new Empregado(Joo,3000);
Neste caso, o primeiro indice nos populamos com um empregado especial que foi chefe,
pois devido herana nos vimos que Chefe um Empregado. Nos podemos fazer estas
associaes pois Empregado uma super classe de Gerente, ento como se nos
tivssemos uma caixa grande Empregado, e conseguimos colocar uma caixa menor
chamada Gerente dentro, como segue abaixo:
Empregado
Gerente
Assim, se nos mandarmos executar o metodo getSalario que contem nas duas classes
sobrescrito, onde na classe Gerente ele alterado para somar mais o bonus, quais seriam
os nossos resultados?[CORNELL, 2002]
for(int i..){
Empregado e = emp[i];
System.out.println(e.getNome + e.getSalario());
}
Pag.: 47
Orientao a Objetos em Java
Neste caso ele imprimiria Daniela com 8500, Pedro com 5000 e Joo com 3000. Mas como
o Java reconhece que ele tem que pegar Daniela e executar o metodo getSalario() de
Gerente?
O Java chama isso de Ligao Dinmica ou Dynamic Binding, ou seja, a maquina virtual
sabe qual o tipo atual do objeto. Assim faz uma ligaao dinmica e quando o objeto vem
da classe Gerente, o getSalario() tambm vem da classe Gerente. A maquina virtual cria
uma tabela de mtodos, onde para cada classe ha as assinaturas correspondentes.
Quando executamos um exemplo como acima, a JVM simplesmente acessa esta tabela.
Observaes:
1- Todo objeto de uma subclasse um objeto da superclasse, assim chefe pode ser um
objeto da classe Empregado.
2- Em Java os objetos so polimorficos, ou seja, um objeto de Empregado pode se
referenciar a Empregado ou qualquer uma das suas subclasses.
3- No se pode atravs de Empregado chamar um mtodo da subclasse, por exemplo,
Empregado no pode chamar o mtodo getBonus().
4- No se pode associar ula referencia da superclasse a um objeto da subclasse, por
exemplo, no podemos associar um objeto emp de Empregado a um objeto de
Gerente, pois neste caso como se eu quisesse colocar o nosso retangulo acima
dentro do circulo.
O final quando utilizado com os atributos, representa uma constante. Eles no permitem
que os atributos sejam modificados depois que o objeto foi criado. Se uma classe FINAL,
automaticamente os mtodos desta classe tambm so FINAL. Os atributos no seguem a
mesma regra.
Pag.: 48
Orientao a Objetos em Java
Instituio Atributos da
instituio : nome e
endereo com seus
mtodos GET/SET.
Porm no exemplo da Figura 9, instituio uma entidade ficticia que existe no papel e
no fisicamente. Instituio uma abstrao de Universidades e Escolas Superiores.
Assim, em relao aos atributos, sabemos que uma instituio tem nome e endereo, mas
como ela abstrata nao poderemos implementar ou seja, efetivamente dar o valor estes
atributos. Neste caso, nos utilizamos a nomenclatura abstract para designar que estes
metodos no sero implementados na classe Instituio, mas sim nas classes filhas, como
Universidades e Escola Superior. Neste caso, na classe Instituio nos declararemos a
assinatura do mtodos, como segue:
Porm, uma classe abstrata ela no podera ser instanciada, ou seja, nenhum objeto pode
ser criado como instancia desta classe. Os objetos somente podem ser criados baseado
em classes concretas, mas eles podem ser definidos.
Vamos considerar o nosso exemplo da Figura 9, onde definiremos que instituio uma
classe abstrata, e as duas filhas, Universidade e EscolaSuperior so classes concretas.
Assim nos poderemos ter:
Pag.: 49
Orientao a Objetos em Java
Nos vimos nas converses com tipos primitivos, podemos converter explicitamente os
valores ou implicitamente, onde a propria JVM se encarrega ultimo deste processo. Ento,
no caso de converses explicitas o que chamamos de cast, como segue no exemplo:
double a= 3,4567;
int novoA= (int)a;
Converte para um
inteiro descartando a
parte fracional.
Em se tratando dos objetos o processo o mesmo. Em Java todo objeto tem um tipo. Se
desejo fazer uma converso de uma subclasse para uma superclasse, chamada
converso implicita, pois o complilador mesmo o fara. Assim como se quisessemos
converter (colocar dentro) do nosso retangulo(superclasse Empregado) a elipse(subclasse
Gerente), como visto anteriormente:
Empregado
Gerente
O cast em relao aos objetos necessario quando ocorre o processo inverso, ou seja, nos
desejamos converter de uma subclasse para uma superclasse. Como se no nosso exmplo
quisessemos colocar a classe Empregado(retangulo) dentro da classe Gerente(elipse).
Neste caso o compilador nos mostrara uma mensagem onde informara que isso nao
permitido. Mas se voce desejar fazer isso de qualquer jeito, voc devera ento utilizar o
CAST, ou seja, a converso explicita. O cast so pode ser utilizado com s classes que
possuem uma relao de hierarquia.
Atravs desta boa maneira de programao, citada por Cornell(2002), evitamos erros de
querer fazer um CAST de uma classe Instituio, por exemplo, para uma classe Gerente,
o que no possivel, visto que no existe uma relao de hierarquia entre elas. Segue um
exemplo que NO possivel:
Pag.: 50
Orientao a Objetos em Java
4.11 Interfaces
Neste caso, toda classe que implementar a interface Festa, deve implementar o mtodo
fazBolo(). Alm disso, todos os mtodos da interface so automaticamente publicos, no
sendo necessario colocar a palavra reservada PUBLIC neles. Em uma classe, a interface
sera definida depois da palavra reservada implements.
Uma classe pode implementar diversas interfaces, como dito acima, simulando assim a
herana multipla. Porm, a classe deve implementar todos os mtodos de cada interface,
pois eles nunca so implementados na propria Interface, mas sempre nas classes que
herdam delas. Outrossim, as interfaces no possuem atributos de instancia ou tambm
chamados de atributos de objetos, e essa uma das diferenas ja encontradas para as
classes abstratas, onde os mtodos tambm no so implementados na classe abstrata,
mas nas classes que as herdam. Alm disso, uma diferena muito importante entre as
interfaces e as classes abstratas que nas interfaces somos obrigados a implementar
todos os mtodos, mesmo que so utilizemos um deles. E nas classes abstratas, podemos
implementar somente o mtodo necessario a nossa utilizaao. Segue um exemplo desta
diferena:
Assim, a classe Aniversario obrigatoriamente tera que implementar todos os trs mtodos
propostos pela interface Festa, mesmo que para este Aniversario voc so deseje fazer o
bolo.
Pag.: 51
Tratamento de Exceo
5. Tratamento de Excees
A elaborao de programas utilizando a linguagem Java, envolvendo assim o
desenvolvimento das classes e interfaces com seus mtodos e objetos retratam a maneira
normal de desenvolvimento e no inclui qualquer caso especial ou excepcional. Na
verdade, o compilador nada pode fazer para tratar condies excepcionais alm de enviar
avisos e mensagens de erro, caso um mtodo seja utilizado incorretamente.
O tratamento de exceo projetado para lidar com erros sincronos, que vm de dentro
do programa. No tratam de erros assincronos, como o trmino de uma operao E/S em
um disco.
try{
...
}catch(Tipo da Exceo) {
...
}
O bloco TRY pode ter um ou mais CATCH. Se nenhuma exceo for disparada, todos os
CATCH so pulados e o processamento volta para a primeira linha de excuo depois do
tratamento, ou seja, depois do bloco TRY-CATCH. A instruo try diz basicamente "Tente
executar o cdigo dentro destas chaves e se excees forem lanadas, vou captura-las de
acordo com os tipos definidos. Cada um permite manipular qualquer e todas as excees
que so instncias das classes listadas entre parnteses. Segue um exemplo de um
tratamento de exceo basico:
class ExcecaoBasico{
public static void main(String[] args){
try {
int a = 2/0;
}catch (Exception e ){
System.err.println("Aconteceu um problema:"+e);
}
}
}
O bloco TRY-CATCH pode ainda conter outro elemento e se transformar no bloco TRY-
CATCH-FINALLY. A clusula FINALLY utilizada quando h uma alguma ao que no
importa o que ocorra, a mesma ter que ser executada. Geralmente isso se refere a
liberar algum recurso externo aps sua aquisio, com a finalidade de fechar um arquivo,
uma conexo com o banco de dados, assim por diante. E ela tambm pode ser usada
juntamente com a clusula CATCH, se referindo ao fato de uma no conformidade tenha
ocorrido A diferena do FINALLY que ele SEMPRE sera executado, caso HAJA uma
exceo ou caso NO HAJA uma exceo. Porm, o FINALLY opcional, ou seja, o TRY-
Pag.: 52
Tratamento de Exceo
try{
System.out.println("Tentando executar o codigo.");
}catch (Exception e){
System.err.println("Excecao capturada:"+e);
}finally{
System.err.println("Finally executado!");
}
Utilizamos a palavra reservada throw para gerar uma exceo. O throw determina um
objeto a ser disparado, ou seja, especifica uma exceo. Por exemplo, se dentro de um
bloco IF-ELSE, voc desejar criar uma exceo, o fara utilizando a palavra throw seguida
do nome da exceo, como segue abaixo:
import java.awt.*;
import java.awt.event.*;
import MessageBox;
GeraExcecao (){
setLayout (null);
setSize(400,400);
Pag.: 53
Tratamento de Exceo
btnOk.addActionListener(this);
}
}
}//Fechamento da classe
A classe Throwable a classe responsavel pelos erros e excees gerados no Java. Ela
possui como subclasses ERROR e EXCEPTION. Os erros gerados da classe ERROR no
so capturados, somente os erros da classe EXCEPTION deve ser capturados dentro da
execuo do programa.
A clausula Throws responsavel por listar todas as excees que podem ser disparadas
por um mtodo. Porm, nem todos os erros e excees disparados so listados na
clausula Throws, as excees geradas em tempo de execuo(RuntimeException), devem
ser tratadas no corpo do programa diretamente, dentro do TRY-CATCH. Se o mtodo
dispara qualquer exceo que no seja RuntimeException, elas devem ser capturadas na
clausula Throws. Segue um exemplo:
Pag.: 54
Tratamento de Exceo
A programao Java foi desenvolvida para trabalhar com excees, com a classe
Exception. As excees herdadas da classe Runtime Exception so excees geradas
normalmente pela programao mal feito do programador. O importante capturar as
excees para que elas no sejam lanadas fora dos mtodos.
Throwable
Error Exception
Pag.: 55
Interface Grfica - AWT
Pag.: 56
Interface Grfica - AWT
Classe java.awt.Component
java.lang.Object
|
+--java.awt.Component
setLocation(int x, int y)
Define a posio x, y do componente.
setEnable(boolean b)
Habilita/desabilita o foco para este componente.
setVisible(boolean b)
Mostra/esconde o componente.
setFont(Font f)
Define a fonte do componente.
setBackground(Color c)
Define a cor de fundo do componente.
setForeground(Color c)
Define a cor de frente do componente.
Classe java.awt.Container
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
Pag.: 57
Interface Grfica - AWT
FlowLayout
Layout de fluxo. Os componentes so adicionados linha por linha. Acabando o
espao na linha, o componente adicionado na prxima linha. o gerenciador de layout
default para panels.
GridLayout
O Container dividido em linhas e colunas formando uma grade. Cada
componente inserido ser colocado em uma clula desta grade, comeando a partir da
clula superior esquerda.
BorderLayout
Componente dividido em direes geogrficas: leste, oeste, norte, sul e centro.
Quando um componente adicionado deve-se especificar a direo em que ser disposto.
o layout default para componentes Window.
Label
setText(String l)
Define o texto do rtulo.
String getText()
Retorna o texto do rtulo
Button
setLabel(String l)
Define o texto do boto
String getLabel()
Retorna o texto do boto
TextField
setText(String t)
Define o texto do campo
String getText()
Pag.: 58
Interface Grfica - AWT
TextArea
setText(String t)
Define o texto da rea
String getText()
Retorna o texto da rea
setEditable(boolean b)
Define se a rea pode ser editada ou no
appendText(String s)
Adiciona a string ao final do texto
Checkbox
setLabel(String l)
Adiciona a string ao final do texto
String getLabel()
Retorna o texto do checkbox
setState(boolena b)
Define o estado do checkbox true = on, false = off
boolean getState()
Retorna o estado do checkbox
Choice
addItem(String i)
Adiciona um item ao choice
int getItemCount()
Retorna o nmero de itens no choice
int getSelectedIndex()
Retorna a posio do item selecionado
String getSelectedIntem()
Retorna o item selecionado como um String
removeAll()
Remove todos os itens
List
addItem(String i)
Adiciona um item a lista
Pag.: 59
Interface Grfica - AWT
int getItemCount()
Retorna o nmero de itens na lista
int getSelectedIndex()
Retorna a posio do item selecionado
String getSelectedIntem()
Retorna o item selecionado
removeAll()
Remove todos os itens da lista
Frame
setTitle(String t)
Define o titulo do frame
setResizable(boolean b)
Define se o frame pode ser redimensionado ou no
setIconImage(Image img)
Define o icone para o frame
setMenubar(Menubar mb)
Define a barra de menu para o frame
Dialog
setTitle(String t)
Define o titulo do dialogo
setResizable(boolean b)
Define se o dilogo pode ser redimensionado ou no
setModal(boolean b)
Define se a janela modal ou no
O objetivo de uma interface grfica com o usurio permitir uma melhor interao
homem x mquina. Quando ocorre uma ao do usurio na interface um evento gerado.
Um evento pode ser um movimento, um clique no mouse, o pressionamento de uma tecla,
a seleo de um item em um menu, a rolagem de um scrollbar e outros. Eventos so
pacotes de informaes gerados em resposta a determinadas aes do usurio. Eventos
tambm podem ser gerados em resposta a modificaes do ambiente por exemplo,
quando uma janela da applet coberta por outra janela.
Pag.: 60
Interface Grfica - AWT
Vrios eventos podem ser gerados por uma ao do usurio na interface. As classes de
tratadores de eventos foram agrupadas em um ou mais tipos de eventos com
caractersticas semelhantes. A seguir a relao entre classes e tipo de eventos.
java.awt.event.ActionEvent - Evento de ao
java.awt.event.AdjustmentEvent - Evento de ajuste de posio
java.awt.event.ComponentEvent - Eventos de movimentao, troca de tamanho ou
visibilidade
java.awt.event.ContainerEvent - Eventos de container se adicionado ou excludo
java.awt.event.FocusEvent - Eventos de foco
java.awt.event.InputEvent - Classe raiz de eventos para todos os eventos de entrada
java.awt.event.InputMethodEvent - Eventos de mtodo de entrada com informaes sobre
o texto que est sendo composto usando um mtodo de entrada
java.awt.event.InvocationEvent Evento que executa mtodos quando dispara uma
thread
java.awt.event.ItemEvent - Evento de item de list, choice e checkbox se selecionado ou
no
java.awt.event.KeyEvent - Eventos de teclado
java.awt.event.MouseEvent - Eventos de mouse
java.awt.event.PaintEvent - Eventos de paint
java.awt.event.TextEvent - Evento de mudana de texto
java.awt.event.WindowEvent - Eventos de janela
Interface Mtodos
ActionListener actionPerformed(ActionEvent)
AdjustmentListener adjustmentValueChanged(AdjustmentEvent)
AWTEventListener EventDispatched(AWTEvent)
ComponentListener componentHidden(ComponentEvent)
componentMoved(ComponentEvent)
componentResized(ComponentEvent)
componentShow(ComponentEvent)
ContainerListener componentAdded(ContainerEvent)
componentRemoved(ContainerEvent)
FocusListener focusGained(FocusEvent)
focusLost(FocusEvent)
InputMethodListener caretPositionChanged(InputMthodEvent)
inputMethodTextChanged(InputMethodEvent)
ItemListener itemStateChanged(ItemEvent)
Pag.: 61
Interface Grfica - AWT
KeyListener keyPressed(KeyEvent)
keyReleased(KeyEvent)
keyTyped(KeyEvent)
MouseListener mousePressed(MouseEvent)
mouseReleased(MouseEvent)
mouseClicked(MouseEvent)
mouseEntered(MouseEvent)
mouseExited(MouseEvent)
MouseMotionListener mouseDragged(MouseMotionEvent)
mouseMoved(MouseMotionEvent)
TextListener textValueChanged(TextEvent)
WindowListener windowOpened(WindowEvent)
windowActived(WindowEvent)
windowDeactivated(WindowEvent)
windowIconified(WindowEvent)
windowDeiconified(WindowEvent)
windowClosing(WindowEvent)
windowClosed(WindowEvent)
Um componente que deseja que um evento seja tratado, deve especificar quem so os
tratadores para o evento, atravs do mtodo add<tipo>Listener( ).Quando um evento
ocorrer, a Mquina Virtual Java identificar o tipo de evento e, se houver algum listener
para o evento, repassar o evento para ele.
Por exemplo, o tratamento para o pressionamento de um boto que um evento de ao.
Deve-se escolher quem vai tratar o evento e implementar a interface
java.awt.event.ActionListener nesta classe. Ainda, deve-se adicionar o listener aos
tratadores de evento de ao do boto, utilizando
botao.addActionListener(<objetoActionListener>).
Pag.: 62
Interface Grfica - AWT
Pag.: 63
Applets
Isso era otimo para aplicaes simples. Porm, alguns ambientes grficos no tinham
uma grande coleo de componentes grficos, como o Windows, por exemplo, e to pouco
as funcionalidades que os usurios esperavam. Alm do mais, os erros e bugs eram
diferentes nas plataformas, e como dizia o Cornell(2002), Write once, debug everywhere.
Em 1996, a Netscape criou uma interface grfica IFC (Internet Foundation Class) onde
os componentes eram pintados nas janelas. A Sun depois trabalhou junto para
aperfeioar e deu o nome de Swing(Cornell,2002). Hoje, o Swing o nome oficial para as
interfaces que no so baseadas em ponto-a-ponto, que nem o AWT. O Swing parte do
JFC (Java Foundation Class). O JFC vasto e contm muito mais coisas do que somente
o Swing.
Look & Feel: possibilita a qualquer programa que use componentes do JFC escolher o
padro como os componentes sero apresentados na tela. Os padres includos junto com
JFC so: Java Look & Feel ( Metal), Windows Look & Feel e CDE/Motif look & Feel. A
partir do Java 1.4 h tambm o Mac Look & Feel. A partir do Java 1.4 tambm foram
lanadas outras tecnologias suportadas pelo Swing, como Drag & Drop e o suporte a API
2D. A seguir so mostrada trs figuras de GUI que utilizam componentes Swing. Cada um
mostra o mesmo programa, mas com aparncia diferente.
CDE/Motif Look & Feel Java Look & Feel ( Metal)
Pag.: 64
Applets
7.1 Frames
Pag.: 65
Applets
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
Neste exemplo acima, graas a classe Adapter utilizada, nos no precisamos tratar todos
os 7 mtodos da WindowListerner, visto que nos estamos manipulando a WindowAdapter
que uma classe abstrata. Se estivessemos manipulando a interface WondowListener,
nos teriamos que tratar cada um dos 7 metodos pertencente nesta interface, mesmo se
nos fossemos utilizar somente o mtodo WindowClosing.
Pag.: 66
Applets
8. Applets
Applets so programas Java embutidos em pginas HTML. Quando uma pgina HTML
carregada e identificada a presena de um applet nessa pgina, o browser carrega
tambm a classe Java do applet e o executa. Todas as classes utilizadas pelo applet
tambm so carregadas pelo browser.
8.1 Hierarquia
java.lang.Object
|
+--java.awt.Component
|
+--java.awt.Container
|
+--java.awt.Panel
|
+--java.applet.Applet
8.2 Estrutura
import java.applet.Applet;
A classe Applet est no pacote java.applet, devendo portanto ser incluida para acessar
seus mtodos. As applets tambm podem pertencer ao pacote do Swing, e o nome da
mesma passa a ser JApplet. Alguns mtodos so chamados automaticamente pelo
interpretador:
Pag.: 67
Applets
Como um applet est sempre embutido em uma pgina HTML, faz-se necessria a
construo de uma pgina HTML, referenciando o applet. A incluso de um applet em
uma pgina HTML feita atravs da tag <APPLET>.
<HTML><BODY>
...
<APPLET CODE = NomeDaClasse.class
[CODEBASE=diretrio das classes]
[NAME = nome do applet]
WIDTH = 200
HEIGHT = 200 >
</APPLET>
...
</BODY></HTML>
Para executar um applet, deve-se carregar a pgina HTML em um browser que suporte
Java, como o Internet Explorer, Netscape ou Mozilla. O JDK fornece o appletviewer que
permite a visualizao de applets.
appletviewer <nomeDoArquivoHTML.html>
Parmetros so passados de pginas HTML para applets atravs da tag <PARAM> que
deve estar entre <APPLET> e </APPLET>. A tag <PARAM> possui os atributos:
<APPLET CODE=...>
<PARAM NAME=NomeParam1 VALUE=ValorParam1 >
<PARAM NAME=NomeParam2 VALUE=ValorParam2 >
...
</APPLET >
Pag.: 68
Applets
...
public void init()
{
...
param1 = getParameter(NomeParam1);
param2 = getParameter(NomeParam2);
...
}
...
import java.applet.*;
import java.awt.*;
public class ParamApplet extends Applet{
String codigo;
public void init(){
codigo=getParameter("codigo");
}
Pag.: 69
Applets
ShowStatus(String msg)
Mostra a msg na barra de status do browser
String getDocumentBase()
Retorna o endereo da pgina HTML
String getCodeBase()
Retorna o endereo do applet
GetAppletContext()
Retorna o contexto onde o applet est inserido
8.9 Fontes
O nome da fonte pode ser: Dialog, DialogInput, Monospaced, Serif, SansSerif ou Symbol.
O estilo da fonte pode ser: Font.PLAIN, Font.BOLD ou Font.ITALIC. A maioria dos
componentes AWT possuem os mtodos setFont() e getFont() para definir e para retornar
a fonte do componente. Trocando a fonte do objeto grfico:
8.10 Cores
Pag.: 70
Applets
Color c1 = Color.white;
Color c2 = new Color(255, 0, 0);
Color c3 = new Color( 0.0f, 1.0f, 0.0f );
Pag.: 71
Processamento Concorrente - Threads
Cada tarefa chamada de linha de execuo ou Thread. Cada programa que trabalha
com uma interface grfica tem uma linha de execuo separada para reunir eventos da
interface.
Para se utilizar das Threads h uma classe chamada java.lang.Thread que contm um
mtodo run() onde ser embutido o cdigo fonte da Thread.
Para iniciar uma linha de execuo ou thread deve-se executar o mtodo start(). Este
mtodo quando chamado, far com que o mtodo run() seja executado, como segue
abaixo:
A maioria das vezes trabalha-se com Threads dentro de uma implementao, como em
Java no podemos trabalhar com herana multipla, assim no poderemos estender
suas classes, h a interface Runnable, que permite tambm manipularmos as Threads.. A
interface Runnable especifica apenas um mtodo: run(). Assim podemos ter:
As Threads possuem vrios estados que elas podem passar. Dentre eles, encontra-se o
estado de bloqueio de uma Thread, ou seja, as Threads so classificadas como
bloqueadas quando:
Ocorre uma chamada do mtodo SLEEP()
A Thread chama o mtodo WAIT()
Pag.: 72
Processamento Concorrente - Threads
A Thread chama uma operao que est bloqueando E/S, ou seja, no retornar o
controle enquanto a operao de E/S no sejam concluidas.
Para uma Thread sair de um estado de bloqueio, uma destas aes abaixo precisam
ocorrer:
Expirar a quantidade de tempo do mtodo SLEEP()
Uma operao de E/S terminou
Se chamou o mtodo WAIT(), ento outra linha deve chamar o NOTIFYALL().
As Threads possuem prioridades e no Java definir estas prioridades uma tarefa simples
e fcil. A prioridade da Thread define a ordem de execuo da mesma. Quando a CPU
(schedule) escolhe uma Thread, ela verifica a prioridade mais alta. As Threads de
prioridades iguais so escolhidas aleatoriamente pela CPU. Pode-se alterar as prioridades
das Threads utilizando o mtodo setPriority(PRIORIDADE). H constantes que definem
MIN_PRIORITY, etc.
A Thread abaixo executada em uma Applet e tem como objetivo mostrar um relgio em
funcionamento ao mesmo tempo que a aplicao est sendo executada, visto que a
prpria aplicao uma Thread.
import java.applet.Applet;
import java.awt.*;
import java.awt.Graphics;
import java.util.*;
import java.text.DateFormat;
import java.awt.event.*;
import MessageBox;
Thread appClock;
Pag.: 73
Processamento Concorrente - Threads
btnOk.addActionListener(this);
}
public void start(){
appClock = new Thread(this, "Clock");
appClock.start();
}
public void run(){
while (appClock == Thread.currentThread()) {
repaint();
}
}
public void paint(Graphics g){
Calendar cal = Calendar.getInstance();
Date data = cal.getTime();
DateFormat dateFormatter = DateFormat.getTimeInstance();
g.drawString(dateFormatter.format(data),5,10);
}
public void actionPerformed(ActionEvent e){
if (e.getSource() == btnOk){
mensagem = new MessageBox(edNome.getText());
mensagem.setVisible(true);
showStatus(edNome.getText());
}
}
}
O mtodo de classe currentThread() pode ser chamado para obter a thread na qual um
mtodo est sendo presentemente executado. Freqentemente, dentro dos mtodos
chamados pelo mtodo run() necessitar saber qual a thread que est em atual execuo.
O mtodo yield() (ceder) d uma chance de iniciar a execuo, a qualquer outra Thread
que queira ser executada. Se no houver threads esperando para serem executados, o
thread que realiza o yield() simplesmente continuar.
Pag.: 74
Processamento Concorrente - Threads
9.1 Sincronizao
Aplicativos com multiplas linhas de execuo tem que compartilhar o acesso aos mesmos
objetos, ou seja, cada linha pode chamar um mtodo que modifica o estado do objeto.
Neste caso, o paralelismo desejvel e poderoso, mas pode introduzir muitos problemas.
Esta situao chamada de condio de corrida. A integridade dos estados dos objetos
deve ser mantida, e para evitar o acesso simultaneo, deve-se sincronizar o acesso estes
mtodos. Baseado nos monitores, toda operao que no deva ser interrompida deve ser
declarada como SYNCHRONIZED.
Neste caso, fica garantido que o mtodo concluir sua execuo antes que outro possa
executar. Se uma linha de execuo chama contar() e outra linha de execuo tambm
chama, a segunda fica esperando.
Para tal h uma soluo que a utilizao dos mtodos WAIT() e NOTIFY() dentro dos
mtodos declarados como SYNCHRONIZED.
Pag.: 75
Processamento Concorrente - Threads
espera. Para ser novamente ativada, alguma outra Thread deve chamar o mtodo
NOTIFY() ou NOTIFYALL().
A diferena entre o NOTIFY e o NOTIFYALL que o NOTIFY remove uma unica Thread da
lista de espera, e o NOTIFYALL remove todas. O problema de trabalhar com o NOTIFY
somente, que pode-se desbloquear a Thread que no resolver o problema, e isso
tambm pode ocasionar em um problema de DEADLOCK.Neste caso, aconselha-se
sempre a utilizar o NOTIFYALL, pois dar s Threads que esto esperando uma chance de
verificar se as circunstancias mudaram.
Dentro do SWING, cada execuo de um programa gera uma Thread, e a segunda Thread
criada para tratamento de eventos, ou seja, as chamadas ao mtodo actionPerformed
so executadas nesta Thread.
Pag.: 76
Sockets
10. Sockets
A idia de um socket faz parte do TCP/IP, o conjunto de protocolos usado pela Internet.
Um socket uma conexo de dados transparente entre dois computadores em uma rede.
Ele identificado pelo endereo de rede dos computadores, seus pontos finais e uma
porta em cada computador. Os computadores em rede direcionam os streams de dados
recebidos da rede para programas receptores especficos, associando cada programa a um
nmero diferente, a porta do programa. Da mesma forma, quando o trfego de sada
gerado, o programa de origem recebe um nmero de porta para a transao. Caso
contrrio, o computador remoto poderia no responder entrada. Determinados nmeros
de portas so reservados no TCP/IP para protocolos especficos por exemplo, 25 para o
SMTP e 80 para o HTTP. Todos os nmero de porta abaixo do 1024 so reservados para o
superusurio de cada computador.
Cliente 1
Socket
Cliente
Servidor
Socket
Cliente 2
Servidor Socket
Cliente
Cliente 3
Socket
Conexo virtual Cliente
A classe Socket do Java rene todas estas informaes em um nico lugar e ainda fornece
uma grande variedade de mtodos para trabalharmos com o sockets. Todas as classes
relacionadas a Sockets encontram-se no pacote java.net.
Hierarquia
java.lang.Object
|
+--java.net.Socket
Pag.: 77
Sockets
Hierarquia
java.lang.Object
|
+--java.net.ServerSocket
import java.net.*;
import java.io.*;
Inicialmente criado o ServerSocket que ir ouvir a porta 3333. Aps isso atravs do
mtodo accept() do SocketServidor, o servidor aguarda uma solicitao de conexo de um
cliente. Quando isso acontece, um Socket criado. Os objetos da classe PrintWriter e
BufferedReader so utilizados para efetuar a comunicao.
A classe Socket implementa o Socket no lado do Cliente. Ele responsavel por estabelecer
a conexo que esta espera pelo Servidor atravs da porta 4445. Atravs deste canal
estabelecido pode-se enviar dados e receber. Ainda se pode manipular multiplas conexes
do Cliente para o Servidor, onde cada canal aberto Servidor podera tratar como uma
Pag.: 78
Sockets
Segue um exemplo de Socket no cliente. Estes dois programas permitem que se faa uma
aplicao Echo, onde tudo que enviado do Cliente para o Servidor, o Servidor responde
a mesma coisa.
import java.io.*;
import java.net.*;
try {
echoSocket = new Socket("127.0.0.1", 4445);
out = new PrintWriter(echoSocket.getOutputStream(), true);
in = new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Host desconhecido");
System.exit(1);
} catch (IOException e) {
System.err.println("Nao foi possivel estabeler uma conexao.");
System.exit(1);
}
out.close();
in.close();
echoSocket.close();
}
}
Pag.: 79
Acesso a Banco de Dados - JDBC
A API do Java, o JDBC, permite compartilhar uma nica linguagem entre as diversas
aplicaes. Alm disso, o JDBC - Java Database Connectivity - prov um conjunto de
interfaces com o objetivo de criar um ponto em comum entre as aplicaes e os
mecanismos de acesso a um banco de dados.
Uma API ao nvel do SQL permite construir sentenas SQL e coloc-las dentro das
chamadas da API Java. Assim, JDBC permite uma transmutao transparente entre o
mundo do Banco de Dados e as aplicaes JAVA. Os resultados das bases de dados so
retornados atravs de variveis do Java e problemas com acessos so recebidos pelas
excees, que contm uma classe especial chamada de SQLException.
Devido aos problemas surgidos com a proliferao dos acessos as APIs dos bancos de
dados proprietrios, a idia do acesso ao BD universal no uma soluo nova. De fato, a
JavaSoft aproveitou todos os aspectos de uma API, a ODBC (Open DataBase
Connectivity). O ODBC foi desenvolvido com o intuito de criar um padro de acesso s
bases de dados no ambiente Windows. Embora a indstria tenha aceitado o ODBC como
um primeiro recurso, o mesmo lento, deixando as aplicaes com conexes aos bancos
de dados dificeis de manipular.
Pag.: 80
Acesso a Banco de Dados - JDBC
Atualmente, h o que chamamos dos drivers nativos para Banco de Dados, ou seja, cada
banco de dados possui classes Java que compoem o pacote JDBC especifico para cada
Banco, onde nos, desenvolvedores, poderemos fazer o download e utilizar diretamente
com o nosso BD de desenvolvimento. Por exemplo, se a aplicao que voc esta
desenvolvendo ela trabalha com o BD Oracle, h um driver JDBC nativo para BD Oracle.
Voc pode encontra-lo nas pginas da Oracle ou links nas pginas da Sun, e fazer o
download do mesmo. Neste caso, provavelmente ele ser um .jar ou .zip onde voc poder
setar no classpath e manipular diretamente o seu banco de dados.
Pag.: 81
Acesso a Banco de Dados - JDBC
ODBC
JDBC
Banco
Programa Java
de
Dados
Pag.: 82
Acesso a Banco de Dados - JDBC
O Driver tipo 4 caracterizado como um driver puro Java, com protocolo nativo. No
necessita de Cliente do BD, o acesso realizado diretamente ao banco de dados,
tambm chamado de Cliente Magro(Thin Client). Como segue a ilustrao:
JDBC
Programa Java Banco
de
Dados
11.3.1 Driver
A aplicao que estiver sendo desenvolvida deve estar desprovida de detalhes contendo,
estritamente, a implementao do Driver para esta base de dados. Assim, uma aplicao
utiliza o JDBC como uma interface por onde trafegam todos os requerimentos feitos ao
Banco. Atravs do mtodo Class.forName(DriverClassName) possivel dizer qual o tipo
de Driver que se esta utilizando. O nome do Driver definido por um tipo especfico de
URL, como segue um exemplo abaixo:
jdbc:<subprotocolo>:<subname>
jdbc:odbc:JdbcOdbcDriver
O subprotocolo identifica qual o Driver que ser utilizado e o subname identifica algum
parmetro necessrio ao Driver.
11.3.2 DriverManager
Pag.: 83
Acesso a Banco de Dados - JDBC
jdbc:odbc:cursoJDBC,,
ou em MySQL
Nome da instncia do BD
jdbc:mysql://localhost/JAVADB
11.3.3 java.sql.Connection
Esta classe Connection permite que se trabalhe com uma conexo do BD. A classe
DriverManager devolve uma conexo, como segue:
Uma vez inicializada a conexo atravs do objeto Connection criada uma linha direta
com a Base de Dados onde pode-se manipular as funes do SQL presentes na DML como
alterao, ou simplesmente consultas. Assim, a utilizao do objeto Connection permite
gerar implementaes da classe java.sql.Statement na mesma transao. Aps a utilizao
das Sentenas do SQL necessrio realizar um commit (confirmao) ou rollback
(cancelamento) dos objetos associados na classe Connection.
11.4.1 java.sql.Statement
Pag.: 84
Acesso a Banco de Dados - JDBC
A principal diferena ocorre pois o mtodo da consulta retorna uma instncia da classe
java.sql.ResultSet enquanto que a atualizao retorna um nmero inteiro. Ainda h o
mtodo Execute() da classe Statement que utilizado em situaes onde no se tenham o
conhecimento dos tipos das sentenas. Ele retorna TRUE, caso tenha afetado algum
registro. E para obter os dados utiliza-se o mtodo getResultSet().
11.4.2 java.sql.ResultSet
Assim, a coluna pode ser referenciada por um numero ou o nome da coluna no BD, como
segue:
11.4.3 java.sql.PreparedStatement
Pag.: 85
Acesso a Banco de Dados - JDBC
pstmt.setString(1,Bosco);
pstmt.executeUpdate();
O JDBC 2.0 trouxe algumas mudanas significativas para a manipulao dos dados
armazenados no BD. Vamos relembrar aqui as caracteristicas que foram acrescidas no
JDBC:
Navegar para frente e para trs e mover para uma linha especifica
Realizar atualizaoes utilizando mtodos na linguagem Java e no utilizando SQL
Utilizar SQL3
if (ae.getSource()== btnConsulta){
System.out.println("Realizando uma consulta...");
stmt= con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(MetodoSQL.mConsultar());
if (rs.last()){
int nQtde = rs.getRow();
lbQuantidade.setText("Quantidade: "+nQtde);
rs.beforeFirst();
}
if (rs.next()){
edCPF.setText(rs.getString("CPF"));
edNome.setText(rs.getString("nome"));
edCidade.setText(rs.getString("cidade"));
}
}
Pag.: 86
Acesso a Banco de Dados - JDBC
if (edCPF.getText().trim().equals("")|| edNome.getText().trim().equals("")||
edCidade.getText().trim().equals("")){
System.out.println("Os campos devem estar preenchidos");
} else {
System.out.println("Campos OK - Realizar a insero");
stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
uprs = stmt.executeQuery("SELECT cpf,nome,cidade FROM PESSOA");
uprs.moveToInsertRow();
uprs.updateString("cpf",edCPF.getText());
uprs.updateString("nome", edNome.getText());
uprs.updateString("cidade", edCidade.getText());
uprs.insertRow();
}
Pag.: 87
Referncias Bibliogrficas
SUN http://java.sun.com
API On-line http://java.sun.com/api
TheServerSide www.theserverside.com
MundoOO www.mundooo.com.br
Livros
HORSTMANN, Cay S., CORNELL, Gary; Core Java 2 Fundamentals, 5 Edio,
2003. Sun Press
DEITEL & DEITEL; Java Como Programar, 4 Edio; Editora Bookman.
Java Essential for C and C++ Programmers, Addison Wesley,1996
CAMARA, Fabio; Orientao a objetos com .NET, 2002
Pag.: 88
Referncias Bibliogrficas
Pag.: 89