Você está na página 1de 180

ETEC - SP / ETEC- PJ

Escola Tcnica de So Paulo


Escola Tcnica Parque da Juventude





APOSTILA DE

Programao de Computadores I

PC I


















Professor: Osvaldo Rodrigues Srgio
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 2
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Captulo 1: Conceitos Gerais

1. Introduo
2. Caractersticas
2.1. Orientada a objetos
2.2. Interpretada e compilada
2.2.1. Bytecode
2.2.2. JVM
2.2.3. JavaAPI
2.3. MuIti-plataforma
2.4. Robusta e confivel
2.4.1. Carbage collector
2.4.2. Exception handling
2.5. Segura
2.6. Portvel
2.7. Multithreaded
3. Princpios da linguagem
3.1. Case sensitive
3.2. Nome do arquivo
3.3. Nomenclatura
3.4. Estrutura
3.5. Comentrios
3.6. Identificadores reservados
4. Estrutura bsica de uma classe
5. Verses do Java
6. JSDK e JRE
7. Ambientes de desenvolvimento
8. Compilando e executando
9. Path

Captulo 2: Tipos de Dados, Valores Literais e Variveis

1. Introduo
2. Tipos Primitivos
3. type casting
3.1. Promoo automtica
3.2. Upcast e downcast
4. Valores Literais
4.1. Literais Inteiros
4.2. Literais de Ponto Flutuante
4.3. Literais Booleanos
4.4. Literais de Caracteres
4.5. Literais de Strings
5. Variveis
5.1. Declarao
5.2. Escopo de Variveis
5.2.1. Aninhamento de Escopos
6. Exibindo Dados na Tela


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 3
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Captulo 3: Operadores

1. Introduo
2. Operadores de atribuio
3. Operadores aritmticos
3.1. Operadores aritmticos de atribuio reduzida
4. Operadores incrementais e decrementais
5. Operadores relacionais
6. Operadores lgicos bit a bit
6.1. Operador and
6.2. Operador or
6.3. Operador xor
6.4. Operador not bit a bit
7. Operadores lgicos
8. Operador instanceof
9. Operador ternrio
10. Precedncia dos operadores

Captulo 4: Controle de Fluxo

1. Introduo
2. Comandos de deciso
2.1. if/ else
2.2. switch / case
3. Comandos de laos de repetio
3.1. While
3.2. Do / while
3.3. For
3.4. Break
3.5. Continue
3.6. Instrues rotuladas
3.7. Instrues no-rotuladas

Captulo 5: Orientao a objetos

1. Introduo
2. Abstrao
3. Objetos
4. Classes
5. Princpios da orientao a objetos

Captulo 6: Classes

1. Introduo
2. Encapsulamento
3. Tipos construdos
4. Instanciao
5. Atribuio entre objetos de tipos construdos
6. Inicializao dos atributos de uma classe
7. Acesso
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 4
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
7.1. Padro
7.2. Pblico
8. Superclasse
9. Classe Object
10. Classes abstratas
10.1. Mtodos abstratos
11. Classes finais

Captulo 7: Mtodos

1. Introduo
2. Estrutura dos mtodos
3. Criando mtodos
4. Chamada de mtodos
5. Passagem de parmetros: por valor e por referncia
6. Comando return
7. Acesso a mtodos
8. Modificadores de mtodos
9. Membros estticos
9.1. Atributos estticos
9.2. Mtodos estticos
10. Mtodo main()
11. Sobrecarga de mtodos
12. Uso do this
1 3. Mtodos recursivos

Captulo 8: Construtores

1. Introduo
2. Construtor padro
3. Princpios dos construtores

Captulo 9: Herana

1. Introduo
2. Criando uma herana
2.1. Acesso aos membros da classe pai
2.2. Acesso aos Membros da classe pai com super
2.3. A Classe pai com sobrecarga do mtodo construtor
3. Relacionamento baseado na herana
4. Relacionamento baseado na utilizao

Captulo 10: Polimorfismo

1. Introduo
2. Run-time binding
3. O uso do polimorfismo

Captulo 11: Arrays

1. Introduo
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 5
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
2. Construo de arrays
2.1. Acesso aos elementos do vetor
2.1.1. Acesso aos elementos do vetor atravs do for aprimorado
2.2. Array com vrias dimenses
2.3. Passando um array como parmetro
2.4. Criando array com tipos construdos

Captulo 12: Interfaces

1. Introduo
2. Varivel de referncia
3. Variveis inicializadas

Captulo 13: Pacotes

1. Introduo
2. Package
3. Import

Captulo 14: Classes String, Math e Wrapper

1. Introduo
2. Classe String
2.1. Inalterabilidade
2.2. Alguns mtodos da classe String
2.3. Classe StringBuffer
2.3.1. Alguns mtodos da classe StringBuffer
2.4. Mtodos encadeados
3. Classe Math
3.1. Alguns mtodos da classe Math
4. Classe Wrapper
4.1. Construtores Wrapper
4.2. Mtodos de converso
4.2.1. Mtodos valueOf()
4.2.2. parseOf()
4.2.3. Value()
5. Autoboxing e auto-unboxing

Captulo 15: Swing

1. Introduo
2. Eventos
2.1. Event Listener
2.2. Eventos do teclado
2.3. Eventos do mouse
2.3.1. Tratamento de eventos
2.3.2. Classes adaptadoras
2.3.3. Classes internas
3. Criando componentes utilizando o swing
4. Gerenciadores de layout
5. Componentes
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 6
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Captulo 16: Applets

1. Introduo
2. Principais mtodos
3. Restries de applets
4. Applet x Awt x Swing
5. Passando parmetros para um applet
6. Imagens e sons

Captulo 17 Excees Clusula try ... catch ... finally

Captulo 18 Acesso Banco de Dados






































PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 7
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Captulo 1

1. Introduo

Java uma linguagem de programao resultante de um projeto desenvolvido em 1991 por
um grupo de engenheiros da empresa Sun Microsystems. Na verdade, inicialmente, esses
engenheiros tinham a misso de criar uma linguagem que seria utilizada em diversos
aparelhos, tais como fornos e telefones. Eles deveriam criar uma linguagem que permitisse a
comunicao entre os aparelhos de uma casa e que gerasse pequenos cdigos para serem
executados nos mais diversos aparelhos.
A fim de desenvolver esse projeto, os engenheiros optaram por utilizar a linguagem C++ em
conjunto a um conceito de mquinas virtuais. A opo por essa linguagem deve-se ao fato de
ela ser muito poderosa e ser orientada a objetos, caractersticas que indicavam a escolha mais
adequada. Quanto ao conceito de mquinas virtuais, esta foi a soluo encontrada para a
execuo de diversas arquiteturas, em que cada um dos fabricantes seria responsvel por
suportar determinadas funes do programa.
No entanto, a linguagem que, em princpio, seria desenvolvida para ambientes residenciais
com a finalidade de permitir que aparelhos eletrodomsticos fossem capazes de se
comunicar, tornou-se uma das linguagens de programao mais conhecidas e utilizadas no
mundo.
Os criadores de Java, ento, desenvolvem a primeira plataforma de software em carter
mundial, a qual permite que os aplicativos desenvolvidos sejam executados em quaisquer
micros. O objetivo desses criadores desenvolver uma linguagem que apresente as seguintes
caractersticas:

Fcil aprendizado
A linguagem Java foi criada com poucas construes a fim de permitir que eventuais
desenvolvedores sejam capazes de aprend-la de forma simples e rpida.

Familiaridade
Esses criadores tambm tinham como objetivo desenvolver uma linguagem familiar aos
programadores de outras linguagens, uma vez que isso ajudaria na migrao entre
linguagens. Contudo, para criar uma linguagem familiar e com poucas construes, eles
optaram por excluir recursos presentes em C e C++, essencialmente aqueles pouco utilizados
e que no auxiliam em boas prticas de programao.

Dentre os recursos excludos que permitiram a simplificao de Java, temos a possibilidade
de manipulao dos ponteiros, bem como sua aritmtica. Esses ponteiros, que tm a funo
de alocar memria, permitem o constante surgimento de problemas, tais como bugs. Alm
disso, os ponteiros so desnecessrios linguagem Java na medida em que ela no conta
com structures, e os objetos representam seus arrays e strings.

Embora a linguagem Java apresente simplicidade, ela bastante completa e poderosa, e pode
ser utilizada em trs frentes de programao distintas, que so:






PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 8
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio


Frentes de
Programao
Descrio
Applets Os applets so programas criados por meio de recursos
oferecidos somente pela linguagem Java. Como esses
programas no podem ser executados sozinhos, eles devem ser
inseridos em pginas da Web. Uma vez inseridos em uma
pgina HTML, esses programas so executados de forma
automtica no momento em que tal pgina aberta. Essa
pgina, porm, deve ser aberta em um navegador que esteja
habilitado para a linguagem Java, dentre os quais temos o
Internet Explorer e o Mozilla FireFox.
Aplicativos Os aplicativos escritos em diversas linguagens, como C, C++,
Visual Basic, entre outras, tambm podem ser facilmente
escritos em Java. A vantagem dessa criao deve-se ao fato
que um aplicativo escrito em Java pode ser executado em
quase todos os micros disponveis no mercado atualmente.

Sistemas Embutidos Sistemas embutidos so aqueles utilizados em outros
aparelhos eletrnicos diferentes dos microcomputadores, e
Java, devido aos seus recursos e caractersticas, uma
linguagem utilizada para o desenvolvimento desses sistemas.


2. Caractersticas

Aps termos visto alguns detalhes a respeito da criao da linguagem Java, teremos, nos
subtpicos seguintes, uma breve apresentao de suas caractersticas.

2.1. Orientada a objetos
Uma linguagem orientada a objetos aquela na qual os programas so formados por objetos
capazes de executar suas prprias operaes e propriedades. Isso significa dizer que essa
linguagem possui dados cuja estrutura determinada em conjunto s funes e mtodos que
podem ser executados.

2.2. Interpretada e compilada
Quando desenvolvemos programas utilizando a linguagem de programao Java, para que
esses programas sejam executados em um micro, preciso realizar dois processos distintos:
a interpretao e a compilao, diferentemente das outras linguagens, cujos programas
precisam ser ou compilados, ou interpretados.
A compilao um processo por meio do qual o programa transformado em bytecode, uma
linguagem intermediria. O cdigo gerado por essa transformao interpretado
posteriormente por um interpretador Java. Destacamos que ao passo que a compilao do
programa realizada somente uma vez, sua interpretao ocorre a cada execuo desse
programa.
Devido ao fato de ser uma linguagem interpretada, Java independente de plataforma. Mais
especificamente, temos que o compilador Java responsvel por gerar o bytecode, um
cdigo cuja execuo realizada por uma JVM (Java Virtual Machine), uma mquina
virtual. Nesta JVM encontra-se o interpretador Java, o qual utilizado na execuo do
bytecode para rodar o programa.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 9
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Por conta de o cdigo bytecode no ser dependente de plataforma, a execuo dos programas
Java pode ocorrer em quaisquer plataformas para as quais a JVM seja suportada.
Em Java, o processo correspondente linkagem envolve somente o carregamento de novas
classes no ambiente de execuo da JVM, o que efetuado em tempo de execuo.
Destacamos que, em uma mquina virtual JVM, encontramos no apenas o interpretador,
mas tambm o sistema de run-time
Todo o processo que envolve compilao, linkagem e execuo de um programa, o qual
comum em diversas linguagens de programao, no ocorre com o Java, o que possibilita
minimizar o tempo utilizado para o desenvolvimento de programas nesta linguagem. Isso
possvel porque a linkagem um processo quase inexistente em ambientes interpretados.
Entendemos por bytecode um cdigo resultante da compilao de uma programa
desenvolvido em Java. O bytecode um cdigo que pertence a uma mquina virtual, cuja
idealizao dos criadores da linguagem de programao Java. Por conta desse cdigo, Java
tornou-se uma linguagem mais rpida do que aquelas que so simplesmente interpretadas.
Ainda, temos o arquivo bytecode que possui a extenso .CLASS e gerado aps a
realizao do processo de compilao de uma classe. Esse arquivo pode ser portado para
uma outra plataforma sem que um novo processo de compilao do cdigo fonte tenha que
ser realizado.

2.2.2. JVM
JVM refere-se a uma mquina virtual que cada uma das mquinas deve possuir a fim de que,
depois de realizado o processo de compilao, as classes sejam executadas.
Alm da mquina JVM, tambm podemos ter o JDK (Java Development Kit) instalado nas
mquinas para a execuo de classes.

2.2.3. JavaAPI
Definimos Java API (Application Programming Interface) como sendo uma coleo de
componentes de software, os quais englobam:
Estruturas que permitem o desenvolvimento de aplicaes grficas;
Estruturas que permitem manipular arquivos;
Entre outros.
A organizao de uma API realizada como um conjunto de bibliotecas, as quais contm
interfaces e classes, e so chamadas tambm de pacotes.

Nota: O arquivo src.zip que est contido dentro do Kit (JSDK) possui todas as classes e
interfaces da Linguagem Java

2.3. Multiplataforma
A execuo de uma aplicao Java pode ocorrer em qualquer sistema para o qual haja uma
implementao da mquina virtual JVM. Isso possvel porque a compilao de um
programa desenvolvido em Java gera um bytecode.
Essa caracterstica de ser executada em diversos sistemas essencial para as aplicaes que
so distribudas atravs de redes heterogneas e, inclusive, que so distribudas atravs da
Internet.

2.4. Robusta e confivel
Os softwares que so desenvolvidos em linguagem Java apresentam um grau considervel de
confiabilidade e robustez, embora isso no permita desconsiderar a utilizao de
procedimentos capazes de manter o software em segurana. A linguagem de programao
Java apenas elimina alguns tipos de erros de programao comuns, facilitando o
desenvolvimento de softwares confiveis.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 10
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Os itens que caracterizam bastante a confiabilidade e a robustez da linguagem Java so o
manuseio de excees e o gerenciamento de memria automtico (garbage collector).
Observemos, a seguir, outros itens capazes de justificar essas caractersticas de Java;

Robustez
A robustez da linguagem Java deve-se ausncia de ponteiros e sua aritmtica, bem como s
checagens realizadas em tempo de execuo. Uma vez que no possui ponteiros, diversos
bugs relacionados aos mesmos so eliminados, o que permite a otimizao da robustez
apresentada por essa linguagem.
Quanto checagem em tempo de execuo, esta realizada sobre todos os acessos efetuados
a arrays e strings e sobre as converses de tipos de objetos. A checagem de arrays e strings
realizada com a finalidade de verificar se ambos encontram-se dentro dos limites corretos e,
portanto, no h a possibilidade de que a memria seja sobrescrita e que os dados sejam
corrompidos.
J a checagem das converses dos tipos de dados realizada no intuito de verificar se as
mesmas so adequadas.

Confiabilidade
A confiabilidade da linguagem Java envolve a declarao explcita de mtodos e a tipagem
forte, conhecida por strong typing. Esta tipagem permite que, em tempo de compilao, seja
realizada uma verificao capaz de eliminar eventuais problemas ocorridos na combinao
de tipos.
Em se tratando da declarao explcita de mtodos, esta exigida pela linguagem Java a fim
de que o compilador possa detectar eventuais erros ocorridos durante uma chamada ao
mtodo. Alm disso, diversas tolerncias em tempo de compilao esto presentes em Java.
Essas tolerncias foram implementadas para que a linguagem Java preservasse sua
compatibilidade com outras linguagens, como C e C++. Todas essas caractersticas de Java
fazem com que ela se torne uma linguagem mais confivel.

2.4.1. Garbage collector
Antes de definirmos o que vem a ser garbage collector, preciso compreender o processo de
criao de objetos em uma linguagem orientada a objetos. Sendo assim, temos que esse
processo de criao faz com que diversos segmentos de memria sejam ocupados de forma
dinmica. No entanto, para que a dimenso do desenvolvimento de aplicaes por meio
dessa linguagem no seja limitada, o espao utilizado deve retornar ao sistema a fim de que
seja utilizado novamente.
O garbage collector, tambm chamado de gerenciamento automtico de memria, uma das
caractersticas mais essenciais de Java. Ele adotado por essa linguagem a qual aps
verificar se os objetos no possuem referncias vlidas, recupera os espaos que no so
mais utilizados pelos objetos para que os programadores no tenham preocupaes quanto
remoo dos mesmos. Isso permite que eventuais problemas com relao alocao e
desalocao de memria sejam evitados, bem como impede que ocorra o vazamento de
memria, chamado de memory leak.
O memory leak ocorre da seguinte maneira:
Depois de o programa ter sado, a memria no desalocada pelo objeto;
Ento, esse espao permanece reservado, porm, sem que esteja sendo utilizado.
Vale destacar que a JVM responsvel por manter em um contador as informaes
relacionadas a todas as referncias que so feitas a um determinado objeto a fim de que,
dessa maneira, ela saiba a quantidade de referncias que esto apontando para uma certa
parte da memria. Assim que o contador zerado, isso indica que o objeto para o qual as
referncias foram feitas pode ser eliminado da memria.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 11
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Embora os programadores no sejam capazes de atuar sobre o garbage collector de forma
explcita, eles podem invocar o mtodo gc() pertencente classe java.lang.System a fim de
recomendar ao sistema que o garbage colletorseja executado.
Outra recomendao que pode ser feita ao sistema por parte dos programadores envolve a
execuo do mtodo finalize() referente aos objetos que foram eliminados. Para isso,
preciso que os programadores utilizem o mtodo runFinalization pertencente mesma
classe do mtodo gc(), a java.lang.System.
Os programadores tambm so capazes de indicar ao garbage collector o fato de um
determinado objeto no mais ser necessrio e, portanto, poder ser excludo. Para isso,
preciso que eles removam a referncia a esse objeto de forma explcita.
Em suma, o garbage collector o responsvel por remover os objetos que no so utilizados
a fim de tornar disponvel a memria alocada que est armazenada. Quando trabalhamos
com a linguagem Java, a memria alocada com operaes medida que o programa
executado.

2.4.2. Exception handling
A robustez dos programas desenvolvidos em Java tambm se deve ao exception handling, ou
manuseio de excees, que uma caracterstica bastante importante para essa linguagem
porque permite simplificar as tarefas de manipulao e recuperao de erros.
A simplificao dessas tarefas possvel no somente por conta do exception handling, mas
tambm com o auxlio dos comandos try, catch e finally, os quais possibilitam o
agrupamento em um s local do cdigo de manipulao de erros como um todo.
Definimos excees como sendo sinais de ocorrncias inesperadas, tais como '\.
M
'
:
. \ erros e
problemas.

2.5 Segura
A segurana uma das caractersticas mais difundidas de Java. Essa linguagem possui
diversas camadas de controle de segurana que so responsveis por oferecer proteo contra
cdigos maliciosos. Embora no exista uma linguagem ou um ambiente que oferea
segurana total, Java capaz de se defender contra grande parte das tcnicas que vm sendo
utilizadas com a finalidade de quebrar a segurana de um programa.
Ainda, importante ressaltar que a segurana oferecida pela linguagem Java foi testada no
somente por vrios especialistas da rea de segurana, mas tambm por hackers, o que
permitiu identificar brechas na segurana das primeiras verses e consert-las. Dessa forma,
eventuais brechas que venham a surgir futuramente tambm sero reparadas.
A seguir. Veremos quais so as camadas de controle de segurana presentes na linguagem
Java:

Acesso memria
Tendo em vista que, no nvel mais baixo, no possvel acessar a memria de forma direta,
diversos ataques contra a segurana e cdigos maliciosos so evitados. Como principais
recursos de defesa, os programas desenvolvidos em Java no tm permisso para forjar
ponteiros, acessar a memria que se encontra alm de arrays e strings, bem como no podem
estourar os arrays.

Assinatura digital
A assinatura digital um recurso de segurana que foi implementado somente a partir da
verso 1.1 da linguagem Java. Essa assinatura, quando anexada ao cdigo Java, permite que
a origem desse cdigo seja assegurada contra falsificaes na medida em que ele
criptografado. Sendo assim, torna-se possvel determinar se algum ou alguma instituio
confivel.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 12
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Uma vez determinado como pessoa ou organizao confivel, seus cdigos que possuem
assinatura digital podem ser executados em uma sandbox sem quaisquer problemas ou
restries.

Sandbox (modelo de caixa de areia)
Em uma sandbox, os cdigos cuja origem desconhecida podem ser executados sem que
haja quaisquer riscos para o ambiente Java. Isso possvel porque a execuo desse cdigo
ocorre em uma sandbox, a qual o mantm isolado, fazendo com que ele tenha diversas
restries.
A implementao de tais restries realizada pela classe SecurityManager, qual todas as
classes de Java que executam operaes arriscadas pedem suas permisses. Sendo assim,
para qualquer chamada que realizada por um cdigo de origem desconhecida, uma exceo
lanada, evitando que a operao seja realizada.

Verificao do bytecode
A verificao do bytecode um processo realizado pelo interpretador da linguagem Java.
Essa verificao, que realizada sobre os cdigos de origem desconhecida que so
carregados, garante que esses cdigos formem-se de maneira adequada.
Garantir que o cdigo seja formado de maneira adequada significa garantir que o mesmo no
ultrapasse os limites da pilha, tanto o limite inferior (stack underflow) quanto o superior
(stack overflow), bem como significa assegurar que um bytecode ilegal no seja
implementado.
A verificao de bytecode capaz de impedir que um cdigo corrompido tire proveito de
eventuais brechas presentes na implementao do interpretador.
Por conta de sua associao com a Internet, a segurana da linguagem de programao Java
de suma importncia, uma vez que sem a mesma, os usurios no poderiam confiar nos
cdigos de sites desconhecidos que so baixados da Internet, o que ocorre com freqncia.

2.6. Portvel
Uma das caractersticas da linguagem Java ser portvel. Isso significa dizer que, alm de
ser interpretada, ela uma linguagem capaz de definir um formato bytecode que seja padro
e, ainda, que apresente neutralidade em relao s arquiteturas existentes. Destacamos;
tambm; que em sua especificao, Java no contm aspectos que dependem de
implementao.
importante ter em mente que o fato de a linguagem Java ser independente de plataforma
deve-se gerao dos bytecodes. Esses arquivos so resultado da transformao do cdigo
em alto nvel realizada a partir da compilao do cdigo Java. Essa compilao efetuada
pelo compilador javac ou javac_g.

2.7. Multithreaded
Dentre as caractersticas de Java, temos que ela uma linguagem mutithreaded, o que facilita
a criao de aplicativos tambm multithreaded, nos quais diversas linhas de execuo so
rodadas simultaneamente.
Quando diversas linhas de execuo (threads) so utilizadas, a performance interativa de
aplicativos grficos otimizada.

3. Princpios da linguagem
essencial que os princpios da linguagem Java, os quais sero descritos a seguir, sejam
considerados no momento em que o programador estiver desenvolvendo aplicaes nesta
linguagem.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 13
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

3.1. Case sensitive
Case sensitive um princpio da linguagem de programao Java que indica que esta capaz
de distinguir letras em caixa alta (maisculas) e letras em caixa baixa (minsculas).

3.2. Nome do arquivo
O nome do arquivo tem a extenso .java e, preferencialmente, deve ser o mesmo nome de
uma das classes declaradas dentro deste arquivo, por exemplo, para a class Cliente teremos
o arquivo com o nome Cliente.Java. Seria um erro definir a classe como class Cliente e o
nome do arquivo como cliente.Java.

3.3. Nomenclatura
Os nomes atribudos aos identificadores devem ser iniciados plos caracteres underline (_),
pelo cifro ($), ou por letras. Dentre os identificadores, temos as classes, os mtodos, as
variveis, entre outros.

3.4. Estrutura
O incio de um bloco de cdigo ou de uma classe sempre ser marcado pela abertura de
chaves - {, e o trmino, pelo fechamento de chaves }. Quanto ao trmino dos comandos, este,
em geral, marcado pelo sinal de ponto-e-vrgula

3.5. Comentrios
As linhas de comentrio podem ser iniciadas de formas distintas, dependendo dos seguintes
fatores:

Comentrio de somente uma linha
Comentrios que no ultrapassam uma linha devem ser iniciados por duas barras (//).

Comentrio de mais de uma linha
Comentrios que ultrapassam uma linha ou, ainda, blocos que no devem ser executados so
marcados por barra e asterisco no incio (/*), e asterisco e barra no final (*/).

Ajuda em HTML
Comentrio para gerar arquivo de ajuda em HTML com o Javadoc. Inicia com uma barra e
dois asteriscos (/** ) e termina com um asterisco e uma barra ( */).

3.6. Identificadores reservados
Os identificadores reservados em Java so palavras especiais que tm uma funcionalidade
para o compilador e que no podem ser utilizadas como nome de classes, mtodos ou
variveis.

Nota: As palavras reservadas so escritas em caixa baixa.









PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 14
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

A seguir, listamos as palavras reservadas da verso 5.0:
Palabras reservadas
abstract instanceof
jassert (introduzida no Java 1.4) int
boolean interface
break long
byte native
case new
catch null
char package
class private
const (no utilizada) protected
continue public
default return
do short
double static
else strictfp
enum (introduzida no Java 5.0) super
extends switch
false synchronized
final this
finally throw
float throws
for transient
goto (no utilizada) true
if try
implements void
import volatile
while

Literais reservados
De acordo com a Java Language Specification, null, true e false so tecnicamente chamados
de valores literais. Se tentarmos criar algum identificador com estes valores, haver um erro
de compilao.

4. Estrutura bsica de uma classe

Apresentaremos, a seguir, a estrutura bsica de uma classe:

1. class <nome>
2. {
3. public static void main(String args[ ])
4. {
5. // declaraes;
6. // comandos;
7. }
8. }

Em que as linhas:
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 15
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

1. Define o nome da classe;
2. Primeira chave aps a definio do nome da classe e que especifica o corpo (incio do
bloco) da classe. Tudo o que fizer referncia classe dever estar entre o primeiro abrir de
chaves e o ltimo fechar de chaves;
3. Definio do mtodo main(). As instrues public, static, String,
args[ ] sero explicadas oportunamente;
4. Abertura da chave (bloco) referente aos comandos que estaro dentro do mtodo main();
5. Declaraes de variveis dentro do mtodo main();
6. Comandos dentro do mtodo main();
7. Fecha chave (bloco) do mtodo main();
8. Fecha chave (bloco) da classe.

5. Verses do Java

A verso mais atual de Java a 1.6. Vale destacar que, a partir da verso 1.2, na qual as
alteraes foram consideravelmente grandes, o nome que denomina a linguagem em questo
passou a ser Java 2, indicando, assim, o incio de sua segunda edio. A ltima verso.do
Java conhecida como Java 6.
A partir da segunda edio de Java, seus pacotes sofreram grandes alteraes a fim de que
fossem reestruturados. Trs so os tipos de pacotes com os quais a linguagem Java pode
contar atualmente: Java EE 5; J2ME; e Java SE 5.0. Na tabela a seguir, teremos a descrio
de cada um desses pacotes:


Pacotes Descrio
Java EE 6.0 (Java Enterprise
Edition 6.0)

Este pacote conta com os servlets e
destinado ao desenvolvimento de grandes
aplicaes, as quais utilizam os servidores de
aplicao e o EJB (EnterpriseJava Beans). O
Java 2 Software Development Kit Enterprise
Edition, tambm chamado de J2SDKEE, o
responsvel pela implementao padro
deste pacote.
J2ME (Java 2 Micro Edition) Este pacote a especificao da linguagem
Java na qual esto contidas APIs. Essas APIs
apresentam as funcionalidades necessrias
para que sejam desenvolvidas aplicaes aos
dispositivos de pequeno porte. Dentre esses
dispositivos temos telefones celulares,
agendas eletrnicas e diversos aparelhos que
possuem a KVM, ou seja, a Mquina Virtual
destinada aos dispositivos de pequeno porte.
Java SE 6u1 (Java Standard
Edition 6.0)

Este pacote destinado criao da maioria
das aplicaes referentes s estaes de
trabalho e aos desktops. a verso bsica e,
portanto, a normalmente utilizada.




PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 16
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

A fim de que possamos saber qual a verso de Java que se encontra instalada no micro,
preciso realizar o seguinte:

1. Abrir o prompt do DOS;
2. Digitar java -version;
3. Pressionar a tecla ENTER.

As verses de Java para os sistemas Windows, Solaris e Linux encontram-se no site
http://java.sun.com e podem ser obtidas a partir do mesmo. Os endereos da Web para
baixar os Kits so:

J2SE: http://java.sun.com/javase
J2ME: http://java.sun.com/javame
J2EE: http://java.sun.com/javaee

6. JSDK e JRE

Para que possamos desenvolver aplicativos a partir da linguagem Java, precisamos contar
com o conjunto de ferramentas JSDK (Java Servlet Development Kit) instalado na mquina.
Esse JSDK j contm o JRE (Java Runtime Environment).
Definimos JRE como sendo uma mquina responsvel por realizar as interpretaes Java, e
por meio da qual no possvel realizar a compilao do cdigo Java. Sendo assim, uma
mquina JRE indicada queles que somente necessitam executar aplicaes Java e contam
com um pacote em cujo contedo encontram-se a mquina virtual e as bibliotecas
necessrias para essa execuo.
Alm da mquina JRE, o conjunto de ferramentas de desenvolvimento Java tambm contm
o compilador, a JVM, algumas bibliotecas, cdigos utilizados como exemplos e o
appletviewer, o qual permite a execuo de applets.

7. Ambientes de desenvolvimento

A linguagem de programao Java conta com IDEs, que so ambientes de desenvolvimento
grfico capazes de auxiliar no desenvolvimento de sistemas de maneira adequada. A seguir,
relacionaremos alguns dos principais ambientes de desenvolvimento de Java:

Symantec Caf (www.symantec.com):
Inprise Jbuilder (http://www.borland.com/jbuilder);
Kawa (www.tek-tools.com):
Sun ONE (http://java.sun.com);
Ecl i ps (http ://www. ed i pse. o rg);
NetBeans (http://www.netbeans.org).

8. Compilando e executando

Para que possamos compreender o processo de compilao e execuo de uma classe em
Java, preciso abrir um editor de texto e digitar o exemplo descrito a seguir:




PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 17
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

class Exemplo1
{
public static void main(String args[ ])
{
System.out.println("Meu Primeiro Programa em Java!");
}
}

Aps digitar o exemplo, salv-lo como Exemplo1.java. J para a compilao desta classe,
devemos abrir o prompt do DOS e digitar javac Exemplei.java, em que:

javac
o comando do compilador Java.

Exemplo1.java
Refere-se ao nome do arquivo a ser compilado.

Uma vez concludo o processo, o compilador javac gera um arquivo de classe chamado
Exemplo1.class no diretrio atual.

Caso no haja erros aps o processo de compilao, digitar java Exemplo1 ainda no prompt
do DOS para executar o programa.

9. Path

Caso seja exibida uma mensagem de erro no momento da execuo do javac ou do java,
isso significa que esses programas no foram encontrados pelo sistema. Normalmente isso
ocorre devido falta da informao no path do computador.

Para solucionar esse problema, preciso procurar ajuda no menu do sistema operacional
com relao aos processos de alterao ou adio de elementos no path.

Quando trabalhamos com os sistemas operacionais Windows XP/2000, basta efetuar os
seguintes passos:

1. Clicar no menu Iniciar. Em seguida, clicar em Configuraes, Painel de Controle e
Sistemas;

2. Na janela Propriedades do Sistema, clicar na guia Avanado e depois no boto
Variveis de Ambiente;

3. Para alterar o path, basta edit-lo (muito provavelmente ele j existe) e mudar o valor para
%PATH%;%JAVA_HOME%\bin;

Por exemplo, levando em considerao que o Java foi instalado no diretrio
c:\j2sdk1.4.0_05, a diretiva ficar assim;

%SystemRoot%\system32;%SystemRoot%;j2sdk1.4.2_05\bin

4. Clicar em OK e reiniciar o micro.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 18
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Exerccios complementares

1. Quais so as frentes de programao para Java?

2. Cite as caractersticas do Java:

3. Qual a funo do Garbaget Collector?

4. O que significa Multithreaded?

5. Qual a diferena entre JSDK e JRE?








































PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 19
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 2

1. Introduo

O Java, assim como outras linguagens de programao utilizadas atualmente, trabalha com
diversos tipos de dados, como byte e char.
Ainda, lidamos com valores literais, usados para a criao de valores constantes, e variveis,
utilizadas por um programa em Java como unidade bsica de armazenamento.
Nos tpicos que seguem, estudaremos em detalhes os tipos de dados, valores e variveis
empregados pelo Java. Aprenderemos, tambm, como usar o comando System.out.println()
para visualizar dados na tela.

2. Tipos Primitivos

O Java tido como uma linguagem de programao de grande robustez, uma qualidade
adquirida pelo fato dela apresentar como caracterstica a tipagem forte.
A linguagem em questo tem a capacidade de trabalhar com uma grande variedade de tipos
de dados, cuja faixa de valores altamente definida. Um inteiro no Java, por exemplo, no
sofre variaes conforme ele executado em ambientes diferentes. Por apresentar valores
bem definidos, o Java mostra-se uma linguagem de grande portabilidade.
A portabilidade a capacidade que o programa possui de ser executado em outras
arquiteturas de computador.
No caso de programas em Java, podemos presenciar uma ligeira queda de desempenho
quando os mesmos so executados em alguns tipos de ambientes. Contudo, esta perda de
performance, provocada pela complexa checagem do tamanho de um inteiro, vista como
uma consequncia normal da portabilidade.
Outro motivo que explica a popularidade do Java a baixa probabilidade de ocorrncia de
erros de cdigo.
A diminuio de erros de cdigo est relacionada ao trabalho de verificao que o
compilador Java exerce sobre as atribuies. Sem levar em considerao se estas ltimas so
explcitas ou por passagens de parmetro com uso de mtodos e chamadas, o compilador
inspeciona se os tipos de expresses e parmetros so compatveis.
Caso estejamos acidentalmente tentando atribuir um valor de ponto flutuante a um inteiro,
tarefa no aceita pelo Java, somos informados pelo compilador que um tipo de erro foi
detectado.
Depois que um possvel erro tenha sido detectado, cabe a ns sanar tal irregularidade, a fim
de que o compilador seja capaz de concluir o processo de compilao da classe.
Apesar do Java ser uma linguagem orientada a objetos, os tipos elementares no so objetos,
e sim valores individuais, muito semelhantes aos tipos simples utilizados por boa parte das
linguagens de programao estruturadas Na tabela a seguir, so apresentados os oito tipos de
dados, alm de um especial, utilizados em Java:










PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 20
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Tipo Descrio
byte 1byte-8bits -128a 127 Nmeros inteiros
short 2 bytes - 16 bits -32768 a + 32767 Nmeros inteiros
Int 4 bytes-32 bits -2147483648 a 2147483647 Nmeros inteiros
long

8 bytes - 64 bits

-922337203685477808 a
922337203685477807
Nmeros inteiros

float

4 bytes - 32 bits

Aproximadamente
3.40282347E+38
Ponto flutuante

double

8 bytes - 64 bits

Aproximadamente
1.79769313486231570E+308
Ponto flutuante

char

Caracteres Unicode
16 bits
0 a 256

Caracteres

boolean Possuem valores true e false Boleano
String Classe

3. Type Casting

O Java dispe de uma operao especial chamada type casting, por meio da qual podemos
provocar uma converso que no pode ser feita diretamente.
Um tipo bsico pode normalmente ser promovido a um outro tipo caso no haja perda de
informaes durante o processo. Neste caso, temos uma converso por alargamento, que s
acontece quando temos dois tipos compatveis envolvidos na converso e quando o tipo de
destino grande o suficiente para armazenar os valores do tipo original.
J na converso de um tipo mais simples para um mais complexo, devemos fazer uso do type
casting.
Pelo processo normal, geraramos uma exceo ao tentar converter um caractere (tipo mais
simples) para seu tipo inteiro (tipo mais complexo), como a seguinte:

int i = 66;
char c = i;

Com o type casting, informaremos ao compilador do Java o fato de que estamos cientes dos
riscos de uma possvel perda de informao. Assim, a converso realizada.

int i = 66;
char c = (char) i;

Para criarmos um caractere baseado em seu cdigo ASCII, que o valor inteiro
correspondente, executamos a operao que segue:

class Cap2_Ex1
{
public static void main(String args[])
{
int i = 66;
char c = (char)i;
System.out.println("o numero " + i +
" corresponde a letra " + c);
}
}


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 21
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
O uso da operao especial em questo s ser possvel quando os tipos envolvidos na
converso obedecerem a uma relao de hierarquia.
Quando fazemos a diviso de um inteiro por outro inteiro no Java, temos como resultado um
outro inteiro, mesmo quando utilizada uma varivel real. Tomemos como exemplo os
seguintes valores:

class Cap2_Ex2
{
public static void main(String args[ ])
{
int x = 7, y = 2;
float resultado = x / y;
System.out.println (" Resultado:"+ resultado);
}
}

Considerando a conduta do Java em gerar um inteiro a partir da diviso de um inteiro por
outro, temos 3 como varivel resultado de 7/2, sendo que pela lgica seria 3.5 (metade de
7).
Se quisermos obter um resultado real desta diviso de variveis ou valores inteiros, preciso
usar o type casting, por meio do qual o numerador ou o denominador ser convertido para
um tipo real, forando para que o resultado seja um valor do mesmo tipo real. Isto feito por
meio da seguinte operao (o tipo para o qual desejamos fazer a converso, tratado como
operador cast, deve ser especificado entre parnteses):

class Cap2_Ex3
{
public static void main(String args[])
{
int x = 7, y = 2;
float resultado = (float)x/y;
System.out.println("Resultado: " + resultado);
}
}

3.1. Promoo automtica

Quando, em uma expresso, temos um resultado do termo intermedirio que apresenta um
alcance maior do que o resultado dos operandos byte, podemos empregar a promoo
automtica.

Consideremos o seguinte exemplo:









PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 22
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap2_Ex4
{
public static void main(String args[])
{
byte x = 30;
byte y = 70;
byte z = 100;
int i = (x * y)/z;
System.out.println ("Resultado:" + i);
}
}

De acordo com o cdigo anterior, os operandos byte tm um alcance menor do que o
apresentado pelo resultado do termo intermedirio. Ao aplicarmos a promoo automtica,
teremos o resultado x * y, cujo valor 2100 (30 * 70). Este resultado utiliza tipos ints, e no
bytes.

3.2. Upcast e downcast

Outro mecanismo a ser destacado o upcast, o qual est diretamente relacionado ao uso do
polimorfismo. Por meio desse mecanismo, uma parte das informaes a respeito de um
objeto permanece inacessvel durante um certo perodo.
De acordo com a perspectiva da orientao a objetos, o processo oferecido pelo mecanismo
upcast fornece segurana na medida em que o tamanho apresentado pela interface da classe
base nunca maior do que o tamanho apresentado pela interface referente classe derivada.
J o mecanismo downcast deve ser utilizado com o intuito de recuperar a referncia para o
tipo original de um determinado objeto. Com isso, possvel obter acesso funcionalidade
desse objeto como um todo.
Vale destacar, porm, que o mecanismo downcast deve ser utilizado somente aps termos
assegurado que o objeto cuja referncia est sendo convertida , de fato, do tipo
especificado. Caso no seja do tipo determinado, a manipulao desse objeto no ser
adequada depois de realizada a converso no ser adequada.
Por meio do mtodo getClass(), indicaes a respeito da classe qual um determinado
objeto pertence podem ser obtidas, bem como por meio do mecanismo RTTI (Run-Time
Type Identification), por sua vez, permite verificar quaisquer operaes referentes ao
downcast so checadas.
A sintaxe do mecanismo downcast a seguinte:

Ref_orig = (Tipo_orig) Ref_upcast;

4. Valores Literais

O valor literal utilizado para que possamos criar um valor constante em Java, tambm
conhecido como constantes em outras linguagens de programao. Trata-se de uma
representao literal do valor, constante, e pode ser aplicada em qualquer parte cujo tipo
aceitvel.

4.1. Literais Inteiros

Um valor literal inteiro definido como qualquer valor numrico inteiro, e os tipos mais
utilizados so os decimais (base10), octais (base 8) e hexadecimais (base 16).
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 23
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
A base hexadecimal bastante empregada por programadores. Tamanhos de palavras
mltiplas de 8, como 8, 16, 32 e 64 bits se encaixam muito bem nesta base. Os algarismos
utilizados para representar a base hexadecimal so 0,1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Usamos um 0 (zero) antes do valor para indicar que se trata de um constante hexadecimal e
aplicamos as letras de A a F, maisculas ou minsculas, para representar dgitos
hexadecimais, que variam de 10 a 15.
Um valor octal representado pelo 0 em frente ao algarismo, que pode compreender os
nmeros 0, 1, 2, 3, 4, 5, 6 e 7.
Toda vez que um valor literal inteiro declarado, um tipo int criado. Este tipo int
representado por um inteiro de 32 bits.
Caso um literal esteja de acordo com a regra de valores do tipo byte ou long, podemos
atribuir normalmente um literal inteiro a uma varivel, como byte ou long, sem que haja
problemas de incompatibilidade de tipos. Da mesma forma, podemos atribuir uma varivel
long a um literal inteiro, desde que o literal long seja explicitamente especificado ao
compilador do Java. Para tal, inclumos a letra L, seja em caixa baixa ou alta, ao valor literal.

4.2. Literais de Ponto Flutuante

Em um programa em Java, uma prtica comum ter que representar valores decimais
compostos de frao. Para esta tarefa, contamos com nmeros de ponto flutuante.
Em Java, o valor padro dos literais de ponto flutuante o tipo double. Contudo, podemos
acrescentar constante um F, maisculo ou minsculo, para especificar um literal como
float, cujo tipo padro usa 32 bits de armazenamento contra 64 bits do tipo padro double.
Os nmeros de ponto flutuante podem ser exibidos em:

Notao comum; Caracterizada por um componente inteiro, seguido de um ponto decimal
e pelo componente fracional. Exemplo: 3.692.

Notao cientfica: Trata-se de um nmero de ponto flutuante em notao comum
acompanhado de um sufixo indicando a potncia de 10 pela qual o nmero ser multiplicado.
A letra E, maiscula ou minscula, representa o expoente, e seguida por um nmero
decimal, positivo ou negativo. Exemplo: 4.0E+05, o mesmo que 4 * 10^5.

4.3. Literais Booleanos

Os valores literais boolean em Java envolvem apenas os valores lgicos true (verdadeiro) e
false (falso), sendo que estes no so convertidos para nenhuma representao numrica.
Os literais boolean s podem ser utilizados em expresses com operadoras boolean ou,
ento, atribudos a variveis declaradas como boolean.

4.4. Literais de Caracteres

Como citado anteriormente, uma das aplicabilidades do Java a criao de Applets, que
podem ser utilizados por pessoas de qualquer parte do mundo. Esta versatilidade dos Applets
desenvolvidos com a linguagem em questo garantida pela presena do Unicode, um
padro internacional unificado capaz de representar os caracteres de todas as lnguas
humanas.
O Unicode faz do Java uma linguagem globalmente portvel, ainda que lnguas como
portugus, francs, espanhol e ingls, cujos caracteres podem ser tranquilamente contidos em
8 bits, no sejam to beneficiadas com a presena do Unicode.
A fim de possibilitar que dezenas de conjuntos de caracteres - dentre eles o latim arbico,
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 24
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
grego, hebraico, hangui, cirlico e o katakana - sejam reunidos ao conjunto Unicode, o tipo
char em Java foi criado com 16 bits. Este tipo possui alcance de 0 a 65.536 e no adota
valores negativos.
Com relao aos caracteres utilizados na linguagem Java, importante consider-los como
ndices de 16 bits que apontam para caracteres Unicode. fundamental, tambm, considerar
que h possibilidade de tais ndices serem convertidos e manipulados.
A converso, neste caso, transforma os valores em inteiros. A manipulao, por sua vez,
ocorre, por exemplo, com os operadores de subtrao e adio, ambos tidos como operadores
de inteiros.
Utilizamos um par de aspas simples (') para representar um valor literal de caractere.
Podemos digitar entre aspas simples todos os caracteres visveis ASCII. Exemplos: f e'?'.
Contudo, existem caracteres que no podem ser representados diretamente dentro de aspas
simples, para os quais devemos usar sequncias de escape. Exemplos:

\ Representa o prprio caractere de aspa simples;
"\n" Representa um caractere de nova linha.

Podemos entrar diretamente com um valor octal ou hexadecimal. Neste caso, devemos
considerar as seguintes informaes:

Para digitar diretamente uma notao octal, usamos uma barra invertida seguida de um
nmero de trs dgitos. Exemplo: '\156', que representa a letra 'n';

Para digitar diretamente uma notao hexadecimal, usamos uma barra invertida e a letra u,
seguidas de quatro dgitos hexadecimais. Exemplo:

'\u0078', que representa a letra 'x' ISO-Latin-1

Na tabela a seguir, esto descritas as sequncias utilizadas por alguns caracteres de escape:
Seqncia de escape Descrio
\ddd Caractere em octal (ddd)
\uxxxx Caractere Unicode hexadecimal (xxxx)
V Aspa simples
\" Aspa dupla
\\ Barra invertida
\r Caractere de retorno
\n Nova linha (alimentao de linha)
\f Alimentao de formulrio
\t Tabulao
\v Tabulao vertical
\b Backspace

A seguir, apresentado o uso de dois dos exemplos de caracteres da tabela anterior:








PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 25
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap2_Ex5
{
public static void main(String args[])
{
System.out.println("Vai saltar uma linha \n " +
"saltou....");
System.out.println("Texto sem aspas, \agora texto"
+ " com aspas\", sem aspas");
}
}

4.5. Literais de Strings

Nos itens que seguem, temos as principais consideraes sobre literais de strings em Java:

Comeam e terminam na mesma linha, ao contrrio de outras linguagens, em que h uma
sequncia de escape de continuao de linha;
So includos entre "" (aspas duplas). Exemplo: "Linguagem Java" e "ETESP";
So tipos de objeto e no arrays de caracteres. Por causa disso, a linguagem Java dispe de
prticos e avanados recursos de gerenciamento de strings.

5. Variveis

Varivel um espao da memria utilizado para armazenar temporariamente um valor.
Identificada por um nome, a varivel combina um identificador, um tipo e um inicializador
opcional.
O responsvel por definir a visibilidade de uma varivel e por quanto tempo a mesma ir
durar o escopo.
A varivel pode receber um valor, que determinado por um programa. Conforme este
programa utilizado, o valor que a varivel previamente recebeu pode sofrer alteraes.
5.1. Declarao

Antes de utilizarmos as variveis em uma aplicao Java, devemos declar-las, pois s assim
elas sero vlidas. Observemos:

<tipo> <nomeVarivel>;
<tipo> <nomeVarivel> = <valor>;
<tipo> <nomeVarivel> = <valor>, <nomeVarivel>;

Exemplos de declaraes de variveis:

int num;
int idade = 22;
char sexo = f;
String curso = "Linguagem Java", escola = "Etesp";
double VAL_PI = 3.1415;
float faixa = 4.21f;
boolean resposta = true;

A seguir, apresentado um exemplo de classe utilizando declaraes de variveis:

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 26
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap2_Ex6
{
public static void main(String args[])
{
int a, b;
char sexo = 'f';
String curso = "Linguagem Java", escola = "ETESP";
double VAL_PI =3.1415;
float faixa =4.21f;
boolean resposta = true;
a = 10; b = 20;
System.out.println("O valor de a : " + a);
System.out.println("O valor de b : " + b);
System.out.println("O valor de sexo : " + sexo);
System.out.println("O valor de VAL_PI : " +
VAL_PI);
System.out.println("O valor de faixa : " + faixa);
System.out.println("O valor de resposta : " +
resposta);
}
}

5.2. Escopo de Variveis

Quando falamos em escopo, estamos nos referindo ao limite ou ciclo de vida de um objeto.
Um escopo criado cada vez que um novo bloco iniciado e permite que outros programas
possam visualizar os objetos, alm de estipular o tempo de durao destes.
Qualquer bloco iniciado pode ser utilizado como local para que uma varivel seja declarada.
Se declararmos uma varivel dentro de um escopo, estamos tornando-a uma varivel local,
protegida contra acessos e alteraes no-autorizadas. Por outro lado, a varivel torna-se
inacessvel para um cdigo definido fora deste escopo.
Ressaltamos que as regras de escopo so a base para encapsulamento.
Os escopos utilizados pelo modelo orientado a objetos do Java so diferentes das categorias
gerais de escopo global e local definidas pela maioria das linguagens de programao.
Embora seja possvel manter algo parecido com um escopo global, este no se enquadra
como regra em Java. Os dois escopos empregados em Java so o definido por classe e o
definido por mtodo.
Uma varivel criada assim que seu escopo acessado por um programa. Ao sair do escopo,
a varivel destruda, consequentemente no preservando seu valor. O valor de uma varivel
tambm no mantido quando esta sai de um bloco, o que significa que o escopo o fator
decisivo para a durao da varivel.
Quando temos variveis declaradas dentro de um mtodo, estas no preservam seus valores
para duas chamadas feitas a um mesmo mtodo.
Como citado anteriormente, para que uma varivel seja vlida, preciso declar-la. Dentro
de um bloco, podemos escolher qualquer ponto para declarar a varivel. Uma varivel
declarada no incio de um mtodo estar acessvel para o cdigo completo deste mtodo.
Uma varivel declarada que possua um inicializador ser reinicializada toda vez que uma
execuo entrar no bloco onde a varivel estiver localizada.



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 27
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

5.2.1. Aninhamento de Escopos

Quando criamos um bloco de cdigo, o Java encarrega-se de gerar um novo escopo
aninhado.
A regra geral diz que, como resultado da criao do escopo aninhado, o escopo externo
engloba o escopo interno, o que significa que o cdigo contido no escopo Interno poder
visualizar os objetos que foram declarados no escopo externo. J os objetos declarados no
escopo interno no podem ser vistos fora do mesmo. A seguir, temos uma representao de
blocos, com as variveis declaradas dentro dos mesmos:

{
| int var1;
| {
| | int var2;
1 | 2 | {
| | 3 | int var3;
| | }
| }
}

De acordo com o exemplo anterior, os nmeros 1, 2 e 3 indicam os blocos existentes. O
bloco 1 contm o bloco 2, que por sua vez contm o bloco 3. O bloco 1 o mais externo, e
contm os outros dois blocos. O bloco 3 o mais interno.
Seguindo a regra geral, var1 pode ser referenciado dentro dos blocos 2 e 3 e var2 s pode
ser referenciado dentro do bloco 3. Na primeira condio, temos uma varivel declarada em
um bloco mais externo, com referncia em um bloco mais interno. Na segunda condio,
teremos um erro de compilao caso tentemos referenciar var2 no bloco 1.

6. Exibindo Dados na Tela

O comando System.out.printIn() utilizado para exibir dados na tela. Por meio de um
nico comando System.out.printIn(), possvel mostrar mais de um dado, de tipos iguais
ou diferentes. Esta concatenao feita atravs do sinal de +.
O exemplo que segue mostra a concatenao de dados:

class Cap2_Ex7
{
public static void main(String args[])
{
int seculo;
String cidade, estado;
seculo = 21;
cidade=Santos"; estado="SP";
System.out.println("Cidade = " + cidade + " - " +
estado);
System.out.println(seculo);
System.out.println("Cidade = " + cidade);
System.out.println("Sculo = " + seculo);
}
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 28
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Exerccios complementares

Os cdigos a seguir contm erros, identifique-os e solucione-os.

class Exercicio1
{
public static void main(String args[])
{
String cidade, estado
cidade = "Curitiba";
estado = "PR";
System.out.print(cidade) ;
System.out.print(estado) ;
}
}


class Exercicio2
{
public static void main(String args[])
{
int valorl ==50, valor2 == 100, result;
result = valori + valor2;
System.out.println("Resultado da soma = " + result);
System.out.println("Resultado da soma = " valor1 +
valor2);
}
}






















PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 29
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Captulo 3

1. Introduo

Os operadores indicam o tipo de operao matemtica que ser executada, gerando novos
valores a partir de um ou mais operandos (itens direita ou esquerda do operador).
Normalmente, o resultado do tipo booleano ou numrico.

2. Operador de atribuio

O smbolo de igualdade (=) representa a atribuio de um valor a uma varivel, em que a
varivel e o valor atribudo devem ser de tipos compatveis, ou seja:

uma varivel do tipo char no pode receber um valor do tipo boolean (true ou false).

Observemos:

varivel = atribuio;

Exemplo;

class Cap3_Ex1
{
public static void main (String args[])
{
char resp = 'n'; //atribui o valor 'n' para a
//varivel resp
boolean flag; //indica que a varivel flag tem
//valor boolean
System.out.println(resp);
System.out.println(flag = false);
}
}

possvel atribuirmos uma varivel primitiva outra varivel primitiva. Vejamos como isso
ocorre no exemplo a seguir:

int x = 3;
int y = x;

Em que:

x recebe o valor 3;
y recebe a varivel x, logo y contm o valor 3.

Neste momento, as duas variveis (x, y) tm o mesmo valor, porm, se alterarmos o valor de
uma delas, a outra no ser alterada.



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 30
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Exemplo:

class Cap3_Ex2
{
public static void main (String args[])
{
int x = 3; // o valor 3 atribudo varivel x
System.out.println("x = " + x);
int y = x; //a varivel y recebe a varivel x
System.out.println("y = " + y);
y = 5;
System.out.println("y =" + y);
}
}

3. Operadores aritmticos

Os operadores aritmticos so utilizados nos clculos matemticos e so os seguintes:

Operador Descrio
+ Adio
- Subtrao
* Multiplicao
/ Diviso
% Mdulo (resto da diviso)

Exemplo:

class Cap3_Ex3
{
public static void main(String args[])
{
int a = 10, b = 25, c = 40, d = 55;
System.out.println(a + b);
System.out.println(b - a);
System.out.println(c * d);
System.out.println(c / a);
System.out.println(d % a);
}
}

Aps a compilao e a execuo do cdigo anterior, o resultado ser o seguinte:
35
15
2200
4
5



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 31
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

3.1. Operadores aritmticos de atribuio reduzida

Os operadores aritmticos de atribuio reduzida so utilizados para compor uma operao
aritmtica e uma atribuio.

Operador aritmtico Descrio
+= mais igual
-= menos igual
*= vezes igual
/= dividido igual
%= mdulo igual

No exemplo a seguir, acrescentado o valor 3 varivel x:

Exemplo:

class Cap3_Ex4
{
public static void main (String args[])
{
int x = 4;
x += 3; // o mesmo que x = x + 3
System.out.println("Valor de x = " + x);
}
}

Ao utilizarmos os operadores de atribuio, contamos com dois benefcios. Alm de serem
implementados de forma mais eficiente pelo sistema runtime de Java, o trabalho gasto com a
digitao do cdigo reduzido. Isso ocorre porque os operadores de atribuio funcionam
como se fossem uma verso mais reduzida das operaes equivalentes.

4. Operadores incrementais e decrementais

Os operadores incrementais e decrementais tm a funo de aumentar ou diminuir
exatamente o valor 1 em uma varivel. Eles podem ser pr ou ps incremental e pr ou ps
decremental. Vejamos:

Incremental (++)

Pr-incremental ou prefixo
Significa que se o sinal for colocado antes da varivel, primeiramente ser somado
o valor 1 para essa varivel, continuando em seguida a resoluo da expresso.

Ps-incremental ou sufixo
Significa que se o sinal for colocado aps a varivel, primeiro ser resolvida toda a
expresso (adio, subtrao, multiplicao, etc) para em seguida ser adicionado o
valor 1 varivel.


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 32
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Decremental (--)

Pr-decremental ou prefixo
Significa que se o sinal for colocado antes da varivel, primeiramente ser subtrado
o valor 1 dessa varivel, continuando em seguida a resoluo da expresso.

Ps-decremental ou sufixo
Significa que se o sinal for colocado aps a varivel, primeiro ser resolvida toda a
expresso (adio, subtrao, multiplicao, etc) para em seguida ser subtrado o
valor 1 da varivel.

Exemplo:

class Cap3_Ex5
{
public static void main(String args[])
{
int a = 5;
System.out.println("a = " + a);
System.out.print("++a + 2 = ");
System.out.println(++a +2); //exemplo de
//pr-incremento
System.out.println("a = " + a);
System.out.println(); // pula uma linha

a = 5; // volta ao valor inicial
System.out.println("a = " + a);
System.out.print("a++ + 2 = ");
System.out.println(a++ + 2); //exemplo de
// ps-incremento
System.out.println(a = " + a);
System.out.println();

a=5;
System.out.println("a =" + a);
System.out.print("a + 2 = ");
System.out.println(--a +2); //exemplo de
//pr-decremento
System.out.println(a = " + a);
System.out.println();

a=5;
System.out.println("a = " + a);
System.out.print("a-- + 2 = ");
System.out.println(a-- +2); //exemplo de
// ps-decremento
System.out.println("a = " + a);
}
}

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 33
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

5. Operadores relacionais

Os operadores relacionais comparam dois valores e retornam um valor booleano (true ou
false). Vejamos quais so esses operadores na tabela a seguir:

Operador relacional Descrio
= = Igual a
!= Diferente de
> Maior do que
< Menor do que
>= Maior do que ou igual a
<= Menor do que ou igual a

Exemplo:

class Cap3_Ex6
{
public static void main(String args[])
{
int a = 20, b = 30, c = 1, d = 20;
System.out.println(b < a);
System.out.println(a == d);
System.out.println(c > b);
System.out.println(a != d);
System.out.println(a < d);
System.out.println(a <= d);
System.out.println(c >= b);
}
}

6. Operadores lgicos bit a bit

Os operadores lgicos bit a bit atuam sobre os bits individuais de seus operandos,
comparando-os bit a bit e resultando em 1 ou 0. Sempre sero avaliados os dois lados da
expresso. Vejamos a tabela a seguir:

Operador lgico bit a bit Descrio
~ NOT unrio bit-a-bit
& AND bit-a-bit
| OR bit-a-bit
^ OR exclusivo bit-a-bit
&= AND bit-a-bit com atribuio
|= OR com atribuio
^= OR exclusivo bit-a-bit com atribuio

Nota: Operadores unrios atuam apenas sobre uma varivel, modificando-a ou no, e
retornam o seu valor final. Os operadores binrios utilizam duas variveis e retornam um
terceiro valor, sem alterar as variveis originais.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 34
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

6.1. Operador and (&)

O operador & (and) retorna o valor 1 somente quando todos os bits comparados forem iguais
a 1.
A tabela a seguir demonstra que a comparao bit a bit utilizando o operador & (and) entre
os nmeros binrios, que correspondem aos decimais 12 e 10, retorna o nmero binrio
correspondente ao decimal 8:

OPERADOR DECIMAL BINRIO
12 1 1 0 0
10 1 0 1 0 AND
8 1 0 0 0

Exemplo:

class Cap3_Ex7
{
public static void main(String args[])
{
int a = 12 & 10; //1100 e 1010
System.out.println("a = " + a); //o resultado 8
}
}

6.2. Operador or ( | )

Para que o operador | (or) retorne o valor 1, basta que apenas um dos bits comparados tenha
o valor 1.
A tabela a seguir demonstra que a comparao bit a bit utilizando o operador | (or) entre os
nmeros binrios, que correspondem aos decimais 12 e 10, retorna o nmero binrio
correspondente ao decimal 14:

OPERADOR DECIMAL BINRIO
12 1 1 0 0
10 1 0 1 0 OR
14 1 1 1 0

Exemplo:

class Cap3_Ex8
{
public static void main(String args[])
{
int a = 12 | 10; // 1100 ou 1010
System.out.println("a = " + a); //o resultado 14
}
}


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 35
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

6.3. Operador xor ( ^ )

O objetivo do operador ou exclusivo (^) (xor) fazer a comparao bit a bit entre dois
nmeros, retornando o valor 1 caso eles sejam diferentes. Vejamos a tabela a seguir;

OPERADOR DECIMAL BINRIO
12 1 1 0 0
10 1 0 1 0 ^
6 0 1 1 0

Exemplo:

class Cap3_Ex9
{
public static void main(String args[])
{
int a= 12 ^ 10; //1100 xor 1010
System.out.println("a = " + a); // o resultado 6
}
}

6.4. Operador not bit a bit ( ~ )

Utilizado para inverso de bits, o operador unrio not (~), troca o dgito 1 por 0 e vice-versa.

Exemplo:

class Cap3_Ex10
{
public static void main(String args[])
{
int a = 12 ;
a = ~a;
System.out.println("a = " + a); //o resultado -13
}
}

7. Operadores lgicos

Os operadores lgicos trabalham com operandos booleanos, e seu resultado tambm ser
booleano (true ou false). Eles so utilizados somente em expresses lgicas e so os
seguintes:
Operador lgico Descrio
&& AND
|| OR
! NOT

Em um teste lgico utilizando o operador && (and), o resultado somente ser verdadeiro
(true) se todas as expresses lgicas forem avaliadas como verdadeiras. Porm, se o operador
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 36
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
utilizado for || (or), basta que uma das expresses lgicas seja verdadeira para que o
resultado tambm seja verdadeiro.

O operador lgico not (!) utilizado para gerar uma negao, invertendo a lgica de uma
expresso.

Exemplo:

class Cap3_Ex11
{
public static void main(String args[])
{
int a = 20, b = 30, c = 1, d = 20;
System.out.println(b < a || c == 1);
System.out.println(a == d && d != a);
System.out.println(!(c > b));
}
}

As diferenas entre os operadores bit a bit e os operadores lgicos so as seguintes:

Se o operando esquerda do sinal de igualdade for falso, && (and) no avaliar o
operando direita, pois s resultar verdadeiro (true) se todos os argumentos forem
verdadeiro (true);

Se o operando esquerda do sinal de igualdade for verdadeiro, || (or) retornar o valor
verdadeiro (true) sem que o operando direita seja avaliado;

Os operadores bit a bit sempre faro a avaliao entre os operandos;
Os operadores lgicos s avaliam expresses lgicas e seu resultado ser sempre do tipo
booleano (true ou false);

Os operadores bit a bit so utilizados para avaliar nmeros inteiros e podem resultar tanto
em valor numrico como em valor booleano (true ou false).

8. Operador instanceof

O operador instanceof utilizado para verificar, dinamicamente, se um objeto pertence a
uma classe, e seu resultado ser do tipo booleano (true ou false). Sua sintaxe a seguinte:

objeto instanceof class

Apenas podemos utilizar o instanceof com variveis de referncia de objeto. Pode ser,
contudo, que o objeto testado no corresponda a uma instanciao do tipo de classe. Neste
caso, o resultado apresentado pelo operador instanceof ser verdadeiro caso o objeto possa
ser atribudo ao tipo.
Para testarmos a referncia a um objeto, podemos confront-la com o tipo de classe ou,
ento, com uma das superdasses. A partir disso, utilizando o instanceof com o tipo Object,
temos que qualquer referncia a um objeto avaliada como verdadeira. Caso uma das
superclasses implemente a interface, o objeto considerado um tipo de interface especfico.
Quando uma superclasse de objeto implementa uma interface, porm a classe da instncia
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 37
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
no o implementa, temos uma implementao indireta. Se isso ocorrer, recomendamos que
sejam realizadas perguntas com o operador instanceof para testar se o objeto realmente a
instncia de uma interface.
Adicionalmente, recomendamos testar se um objeto nulo refere-se instncia de uma classe.
O resultado, neste caso, ser sempre falso.

Exemplo:

class Cap3_Ex12
{
public static void main(String args[])
{
String a = "teste";
if (a instanceof String)
System.out.println("A varivel a " +
"uma String");
else
System.out.println("A varivel a no " +
"uma String");
}
}

9. Operador ternrio

O operador ternrio ou operador condicional composto por trs operandos separados plos
sinais (?) e (:), e tem o objetivo de atribuir um valor a uma varivel de acordo com o
resultado de um teste lgico. Sua sintaxe a seguinte:

teste lgico ? valor se verdadeiro : valor se falso

Em que:
teste lgico qualquer valor ou expresso que pode ser avaliado como verdadeiro ou falso;
valor se verdadeiro o valor atribudo se o teste lgico for avaliado como verdadeiro;
valor se falso o valor atribudo se o teste lgico for avaliado como falso.

Exemplo:

class Cap3_Ex13
{
public static void main(String args[])
{
int a = 2, b = 4;
String verdade = "sim", falso = "no";
System.out.println(a + b > b - a ? verdade : falso);
}
}

10. Precedncia dos operadores

Em uma expresso com vrios operadores e operandos, a precedncia dos operadores que
determina a ordem em que essa expresso ser resolvida. Sendo assim, a operao de maior
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 38
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
precedncia deve ser efetuada primeiro.

Observemos a ordem de prioridade dos operadores na tabela a seguir;

Operadores em ordem de prioridade
( ) [ ] .
++ -- ~ !
* / %
+ -
> >= < <=
== !=
&
^
|
&&
||
? :
=


Exerccios de fixao

1. Calcule os resultados das expresses a seguir considerando os seguintes valores das
variveis:

A = 2; B = 4; C = 8; D = 9;

a) !(A > B)

b) (A * B == C) || (A > D)

c) (B < C) && (B > D)

d) (A > D) || (A * B == C)

e) !(A + B < D) && D > C

f) (D % B < 2)












PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 39
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

2. Encontre os erros e corrija o cdigo a seguir:

class ExercicioCap3_2
{
public static void main(String args[])
{
int A = 3, B = 7, C = 2, D = 5
System.out.println(A >= B) ;
System.out.println( (A * B = C) || (A > D);
System.out.println (B < C) && (B > D)) ;
System.out.println( (A > D) || (A * B = C) );
System.out.println( (A + B < D) && (D > c) );
System.out.println(D % B < 2)
}
}
3. O cdigo a seguir est usando o operador ternrio. Rode-o e analise cada linha retornada.

class ExercicioCap3_3
{
public static void main(String args [ ])
{
int a = 3, b - 90, c = 12;
System.out.println (a > b ? a : b) ;
System.out.println (a < b ? a - 2 : b + 1);
System.out.println (c < b && c > a ? c : a);
System.out.println (a > b ? b : b < a ? b : a) ;
// aninhamento

b = 12;
System.out.println (b = b - (c < 10 ? 10 : c) );
}
}

4. Depois de compilado e executado, o cdigo a seguir resultar em:

a) false
b) true
c) 5
d) 7
e) Erro de compilao

class ExercicioCap3_4
{
public static void main(String args[])
{
int a = 5, b == 7;
boolean n = (a == b);
System.out.println(n);
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 40
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}
5. Desenvolva um cdigo que retorne o valor a pagar de uma compra, utilizando o operador
ternrio, de acordo com o seguinte cenrio:

Valor da compra = 2000;

Faixa % Desconto
0 1000 0%
1001 3000 5%
Acima de 3000 10%








































PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 41
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio


Captulo 4

1. Introduo

Para controlarmos o fluxo de um programa, escrevemos uma sequncia de comandos entre
chaves ({}). A essa sequncia chamamos de comandos em blocos, os quais podem ser
aninhados dentro de outro bloco de comandos.
Nos tpicos e subtpicos a seguir, estudaremos a respeito dos comandos de deciso e de
laos de repetio, que constituem um bloco de comandos.

2. Comandos de deciso

Para decidirmos qual ao dever ser tomada em determinada parte de um programa,
solicitamos a este que avalie uma expresso. Caso esta expresso seja avaliada como
verdadeira, uma sequncia de comandos ser executada.

As seguintes instrues de deciso devem ser consideradas:

if / else

switch / case

2.1. if/ else

Quando utilizamos uma instruo if, apenas expresses com resultados booleanos podem ser
avaliadas. Para definirmos uma instruo if, utilizamos a seguinte sintaxe:

if (Teste Condicional)
{
Comandos;
}

Onde, a instruo avaliar a expresso booleana. Em caso verdadeiro, o bloco de instrues
que se encontra entre as chaves ({}) ser executado. Se o resultado for falso, o bloco de
comandos no ser executado, ou pode haver um outro bloco de comandos para ser
executado. Repare que a condio a ser avaliada est entre parnteses.
Exemplo:

class Cap4_Ex1
{
public static void main(String args[])
{
int x= 10;
if (x < 15)
{
System.out.println ("X menor que 15");
System.out.println ("O valor de x : " + x );
}
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 42
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}

importante sabermos que as chaves ({}) no so obrigatrias quando existir apenas uma
instruo dentro do bloco de comandos. Porm, por motivos de melhor legibilidade,
interessante que as chaves sejam utilizadas. Adicionalmente, recomendamos que as
instrues if / else sejam aninhadas em quantidade moderada, tambm por ser mais legvel.

Para executar comandos caso a condio seja falsa, necessrio digitar a clusula else aps
as instrues da condio verdadeira e, na linha abaixo, inserir o bloco de instrues a serem
executados. A estrutura ser:

if (Teste Condicional)
Comandos;
else
Comandos;

O comando if, quando utilizado em conjunto com o comando else, bastante similar forma
de como utilizado em outras linguagens de programao.

Vejamos, agora, um exemplo prtico com a instruo if / else:

class Cap4_Ex2
{
public static void main(String args[])
{
int x= 10;
if(x < 15)
{
System.out.println("X menor que 15");
System.out.println("O valor de x : " +x);
}
else
{
System.out.println("x maior que 15");
System.out.println("Como x maior que 15, " +
" seu valor : " + x);
}
}
}

2.2. switch / case

A instruo switch pode ser um outro modo para simular a utilizao de vrias instrues if,
e ela somente pode verificar uma relao de igualdade. Os tipos de dados que podem ser
utilizados na instruo switch so os seguintes:

byte;
char;
int;
short.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 43
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Com relao instruo case, ela avalia apenas o argumento que apresenta o mesmo tipo
definido na instruo switch. Mas devemos ter ateno ao fato de que o argumento da
instruo case final, ou seja, ele precisa ser resolvido no tempo de compilao. Devido a
isso, utilizamos uma varivel final constante com um valor literal na instruo case. Caso
mais de uma instruo case apresente o mesmo valor, ela no ser vlida.

Nota: A instruo switch apenas verifica igualdades, o que no o caso de operadores
relacionais, tais como menor ou igual que (<=).

Enquanto uma instruo switch estiver sendo executada, o programa pode encontrar um
comando break, ou seja, uma indicao de que o programa dever executar a instruo
seguinte ao bloco switch. Mas se esse comando no existir no cdigo-fonte do programa,
todas as instrues case sero executadas at que toda a instruo switch finalize, ou mesmo
at que um comando break seja encontrado.
Quando a execuo do programa passa de uma instruo case para a seguinte, temos o
processamento conhecido por passagem completa. Ele nada mais do que a execuo de
todas as instrues case at o final da instruo switch.

O comando switch / case no pode utilizar operadores lgicos (&&, || ou !). Sendo assim, ele
somente pode ser utilizado para comparar valores simples, cujos tipos de dados podem ser
apenas int, short, byte e char.

Vejamos, a seguir, um exemplo com a instruo switch / case:




























PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 44
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio


class Cap4_Ex3
{
public static void main(String args[])
{
int hora = 7;
switch(hora)
{
case 1 : System.out.println("Uma hora");
break;
case 2 : System.out.println("Duas horas");
break;
case 3 : System.out.println("Trs horas");
break;
case 4 : System.out.println("Quatro horas");
break;
case 5 : System.out.println(" Cinco horas");
break;
case 6 : System.out.println("Seis horas");
break;
case 7 : System.out.println("Sete horas");
break;
case 8 : System.out.println("Oito horas");
break;
case 9 : System.out.println("Nove horas");
break;
case 10 : System.out.println("Dez horas");
break;
case 11 : System.out.println("0nze horas");
break;
case 12 : System.out.println("Doze horas");
break;
}
}
}

Nesse exemplo, utilizamos o comando break, que serve para separar o que restrito para ser
executado em cada case. O break finaliza o case anterior.
Podemos completar o uso da instruo switch / case com o comando default. Este ser
executado sempre que o valor assumido pela varivel no encontrar um valor case
correspondente.
Observemos o exemplo a seguir;








PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 45
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio


class Cap4_Ex4
{
public static void main(String args[])
{
int hora=33;
switch(hora)
{
case 1 : System.out.println("Uma hora");
break;
case 2 : System.out.println("Duas horas");
break;
case 3 : System.out.println("Trs horas");
break;
case 4 : System.out.println("Quatro horas");
break;
case 5 : System.out.println("Cinco horas");
break;
case 6 : System.out.println("SeJs horas");
break;
case 7 : System.out.println("Sete horas");
break;
case 8 : System.out.println("0ito horas");
break;
case 9 : System.out.println("Nove horas");
break;
case 10 : System.out.println("Dez horas");
break;
case 11 : System.out.println("0nze horas");
break;
case 12 : System.out.println("Doze horas");
break;
default: System.out.println("Hora incorreta");
}
}
}

3. Comandos de laos de repetio

Muitas vezes, precisamos repetir a execuo de um bloco de cdigos do programa at que
uma determinada condio seja verdadeira, ou mesmo at que uma quantidade de vezes seja
satisfeita. Para que essa repetio seja possvel, utilizamos os laos de repetio de
linguagem que, em Java, so os seguintes:

while;
do/while;
for;



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 46
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Nos subtpicos seguintes, veremos cada um deles mais detalhadamente, e tambm
estudaremos outros comandos utilizados em conjunto com as instrues for, while e
do/while.

3.1. while

Quando no sabemos quantas vezes um determinado bloco de instrues precisa ser repetido,
utilizamos o lao de repetio while. Com ele, a execuo das instrues vai continuar at
que uma condio seja verdadeira. A condio a ser analisada para execuo do lao de
repetio dever retornar um valor booleano.

Vejamos a sintaxe do lao de repetio while:

while (teste condicional)
comando; // ser executado enquanto teste condicionai = true

while (teste condicional)
{
comando1;
comando2;
}

Nesse exemplo, somente se a condio for verdadeira que o corpo do lao de repetio ser
executado. Assim sendo, o contedo vai se repetir at essa condio no ser mais verdadeira.
Vejamos mais um exemplo:

class Cap4_Ex5
{
public static void main(String args[])
{
int num = 10;
while(num < 1500)
num*=10;
System.out.println("Valor de num = " +num);
}
}

Devemos saber que o lao de repetio white pode no ser executado. Isso ocorrera quando,
na primeira verificao da condio, esta for falsa. Ento, o programa passar para a
execuo da prxima instruo aps o lao.

3.2. do / while

O comando do/while tem basicamente o mesmo funcionamento do while, com uma
diferena de que utilizando-se o do/while teremos os comandos executados ao menos uma
nica vez. Isso acontecer mesmo se a condio no for verdadeira.
Vejamos a sua sintaxe:

do
{
comando;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 47
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}
while (condio);
do
{
System.out.println("Estamos dentro do loop");
}
while(false);

Observemos o exemplo a seguir:

class Cap4_Ex6
{
public static void main(String args [])
{
Int num = 10;
do
{
System.out.println ("num maior que 500! ");
} while (num >= 100);
}
}

3.3. For

Quando sabemos exatamente quantas vezes queremos repetir um bloco de instrues,
utilizamos o lao de repetio for. Ele possui o corpo do lao e mais as seguintes partes
principais:

Declarao e inidalizao de variveis

Nesta primeira parte da instruo for, podemos declarar e inicializar uma ou mais variveis,
quando houver. Elas so colocadas entre parnteses, aps a palavra-chave for e, se houver
mais de uma varivel do mesmo tipo, elas so separadas por vrgulas, conforme o seguinte:

For (inta = 1, b = 1; ...){}

importante lembrarmos que a declarao e a inicializao das variveis na instruo for
acontecem sempre antes de outros comandos. Ainda, elas acontecem apenas uma vez no lao
de repetio, sendo que o teste booleano e a expresso de iterao so executados a cada lao
do programa.

Expresso condicional

Na segunda parte da instruo do lao de repetio for, temos a expresso condicional. Ela
refere-se a um teste que ser executado e dever retornar um valor booleano. Por esse
motivo, somente vlido especificarmos nesta parte da instruo for uma expresso lgica
Devemos observar que a expresso lgica pode ser complexa. muito importante termos
cuidado com os cdigos que utilizam diversas expresses lgicas.
Observemos:


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 48
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio





class Cap4_Ex7
{
public static void main(String args [])
{
for (int a = 1, b = 10;
((a < 10) && (b > 5)); a++, b--)
{
System.out.println("a = " + a);
System.out.println("b = " + b);
}
}
}

No exemplo anterior, a expresso condicional vlida, porm, mostraremos um exemplo em
que ela no vlida:

for (int a = 1, b = 10; (a < 10), (b > 5)); a++)

Nesse exemplo, h dois testes booleanos separados por vrgulas, o que faz com que a
instruo no seja executada e gere um erro. Isso ocorre porque podemos ter apenas uma
expresso de teste na sintaxe desse comando.

Expresso de iterao

Na expresso de iterao, indicamos o que dever ocorrer aps cada execuo do corpo do
lao de repetio. Ela sempre ser processada aps o corpo do lao ser executado, mas ser a
ltima execuo da instruo do lao for.

Na linha seguinte, temos a sintaxe completa da instruo for:

for (declarao e inicializao de varivel; condio; iterao)
{
instruo do corpo do lao for;
}

Vejamos o exemplo a seguir:

for (int a = 1, b = 1; a < 4; a--) {}

Em que:
int refere-se ao tipo de varivel que ser declarada;
a = 1 e b = 1 referem-se s variveis que esto sendo inicializadas;
a < 4 refere-se ao teste booleano que ser feito na varivel a;
a-- indica a iterao da varivel a.

Aps verificarmos todas essas informaes, destacamos que apesar de no ser uma boa
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 49
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
prtica, podemos deixar de declarar uma das trs partes descritas do lao de repetio for.
Nesse caso, o lao ser infinito, e no havendo sees de declarao e inicializao no lao
de repetio for ele agir como um lao de repetio while. Observemos:

class Cap4_Ex8
{
public static void main(String args [])
{
for (;;)
{
System.out.println("Este e um lao for sem " +
" declarao " +
"ou inicializao de " +
"variveis");
}
}
}

Com relao ao escopo das variveis que foram declaradas no lao de repetio for, ele
finalizado juntamente com o lao. Sendo assim, devemos observar o seguinte:

A varivel declarada no lao for pode ser utilizada apenas no prprio lao de repetio for;
A varivel declarada fora do lao de repetio for, mas inicializada na instruo for, pode
ser utilizada fora do lao de repetio.
No exemplo a seguir, mostramos a declarao de uma varivel fora da instruo for, mas a
sua inicializacao ocorre dentro da instruo for:

class Cap4_Ex9
{
public static void main(String args[])
{
int a = 3;
for (a = 9; a < 15; a++)
System.out.println("a = " + a);
}
}

Isso nos mostra que as sees da instruo for no so dependentes e, por isso, no precisam
operar sobre as mesmas variveis. Quanto expresso de iterao, ela no precisa,
necessariamente, configurar ou incrementar algo, como mostramos no exemplo a seguir:

class Cap4_Ex10
{
public static void main(String args[])
{
int x = 10;
for(int y = 1; x != 1;
System.out.println("Aqui no tem incremento"))
{
x = x - y;
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 50
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}
}

Ainda na instruo do lao de repetio for, utilizamos dois comandos: break e continue.
Eles podem ser rotulados ou no-rotulados, sendo que sero rotulados quando existir um lao
de repetio aninhado e precisarmos indicar qual dos laos queremos finalizar, ou mesmo
para indicar a partir de qual lao queremos que a prxima iterao continue.

Geralmente, quando um desses comandos utilizado, um teste if executado dentro do lao
de repetio for. Caso uma das condies verificadas seja verdadeira ou falsa, conforme o
desejado na instruo, o lao de repetio ou a iterao ser finalizado e a prxima instruo
do programa ser executada.

3.4. break

O comando break utilizado em laos de repetio while, do/while, for e com os
comandos switch/case. Quando utilizado em lao de repetio, causa uma interrupo
imediata do mesmo, continuando a execuo do programa na prxima linha aps o lao. Isso
acontece caso a condio imposta seja atendida.

Vejamos o exemplo a seguir:

class Cap4_Ex11
{
public static void main(String args[])
{
for (int i = 1; i < 11; ++i)
{
if(i == 5)
break; //interrompe o loop
System.out.println("Valor de i = " + i);
}
System.out.println("Proxima linha aps o loop...");
}
}

3.5. continue

O comando continue utilizado somente em laos de repetio. Quando ele executado, o
lao volta imediatamente para o teste de condio do lao de repetio. Normalmente,
utilizamos o comando continue em um teste if.
Observemos, a seguir:

while (!EOF)
{
if (erro)
{
continue;
}
}

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 51
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Quando esse cdigo for executado, ser verificado se h um erro. Se a condio for
verdadeira, o prximo campo do arquivo ser lido at que no seja o final de arquivo (!EOF).
A instruo continue ser utilizada para voltar ao lao de repetio e fazer com que os
outros campos continuem a serem lidos at o final de arquivo.
Nota: EOF simula uma varivel de leitura de um recordset

O exemplo a seguir nos mostra outra utilizao do comando continue com o lao de
repetio while:

class Cap4_Ex12
{
public static void main(String args[])
{
int num = 0;
while (num<10)
{
++num;
if (num == 5)
{
continue;
}
System.out.println(valor de num => + num);
}
}
}

Nota: Quando o comando continue utilizado, precisamos levar em considerao os efeitos
que ele pode causar sobre a iterao do lao de repetio.

3.6. Instrues rotuladas

Apenas quando temos laos de repetio aninhados e precisamos indicar qual desses laos
deve ser finalizado, ou quando queremos indicar a partir de qual lao a prxima iterao
continuar, utilizamos as instrues rotuladas. No caso da instruo break rotulada, ela
indica para que o programa saia do lao de repetio rotulado, mas no do lao de repetio
atual.
Quanto ao rtulo atribudo instruo, ele deve seguir as regras de nomes de varivel
vlidos para a linguagem Java. Alm disso, devemos verificar se ele segue as convenes de
nomeao para Java.

3.7. Instrues no-rotuladas

Quando a instruo break no for rotulada, a estrutura do lao de repetio atual ser
finalizada e o programa continuar a ser executado a partir da prxima linha de cdigo aps
o bloco do lao.






PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 52
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Exerccios de Fixao:

1. Depois de compilado e executado, o cdigo a seguir resultar em:

a) Cdigo errado A!
b) Cdigo errado B!
c) Cdigo errado C!
d) Cdigo errado D!
e) Erro de compilao.

class ExercicioCap4_1
{
public static void main(String args[])
{
int cod = 9;
if (cod == 1)
System.out.println ("Cdigo errado A!"');
else if (cod !=3)
System.out.println("Cdigo errado B!");
else if (cod != 5)
System.out.println("Cdigo errado C!");
else if (cod != 7)
System.out.println("Cdigo errado D!");
}
}

A - Baseando-se na tabela a seguir, desenvolver um cdigo que retorne o valor do Imposto
de Renda de um salrio de R$ 4.000,00
Base de clculo mensal em R$ Alquota % Parcela a deduzir do imposto em R$
At 1.058,00 - -
De 1.058,01 at 2.115,00 15,0 158,70
Acima de 2.115,00 27,5 423,08

B - Usando a instruo for, desenvolver um cdigo que mostre na tela as tabuadas de 1 a 10.

C - Usando as instrues for, if e continue, desenvolver um cdigo que mostre na tela apenas
os nmeros pares de 0 a 100. Quando o nmero for 56, dever aparecer uma sada
informando o seu valor. A figura a seguir mostra parcialmente como ficar o cdigo depois
de compilado e executado.

Exemplo de parte da sada do programa:

Valor de x par = 48
Valor de x par = 50
Valor de x par = 52
Valor de x par = 54
Agora x vale .............56
Valor de x par = 58
Valor de x par = 60
Valor de x par = 62
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 53
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 5

1. Introduo

Os programas desenvolvidos com base na orientao a objetos so compostos por um grupo
de objetos que, por meio da troca de mensagens, realizam um processo de interao entre si.
De fato, essa troca de mensagens refere-se invocao de mtodos que realizada entre
objetos.
Os programas que se baseiam nessa orientao so facilmente alterados em um momento
posterior para uma melhor adaptao s necessidades apresentadas por usurios ou
organizaes.
A essncia da programao orientada a objetos a possibilidade de alterar ou substituir
partes de um sistema sem que a haja riscos de ocorrncia de erros. Isso possvel devido ao
fato de os objetos serem definidos de forma clara e com interfaces confiveis. Ainda,
importante destacar que a base da linguagem de programao Java envolve os conceitos de
orientao a objetos, dentre os quais temos:

Abstrao;
Encapsulamento;
Herana;
Polimorfismo.

2. Abstrao

A abstrao um processo atravs do qual separamos os fatos relevantes dos detalhes que
no tm grande importncia. Sendo assim, o conceito de abstrao bastante adequado em
situaes de grande complexidade, pois combinado ao polimorfismo e a herana, pode nos
ajudar a resolver essas situaes.

Em se tratando de desenvolvimento de sistemas, abstrao significa focalizar em dois fatores
essenciais: o que um objeto , e o que ele faz. preciso concentrar-nos nesses dois fatores
antes de decidirmos a forma como esse objeto ser implementado.

Assim, ao utilizarmos os conceitos de abstrao, as decises relacionadas ao
desenvolvimento e implementao de objetos podem ser tomadas quando entendemos
melhor o problema a ser resolvido. Portanto, a abstrao um dos elementos mais
importantes da programao orientada a objetos.

A abstrao de dados um conceito suportado por diversas linguagens de programao
atuais e permite a utilizao de um nico modelo conceitual em todas as fases que compem
o processo de desenvolvimento de um sistema.

O conceito de abstrao, quando utilizado juntamente aos conceitos de herana e
polimorfismo, forma um poderoso mecanismo suportado pela orientao a objetos.

3. Objetos

Em termos gerais, entendemos por objetos quaisquer elementos da natureza aos quais
possvel atribuir comportamentos e caractersticas. No entanto, em termos de computao,
entendemos por objetos os elementos capazes de representar uma entidade que esteja no
domnio de interesse do problema analisado. As entidades representadas por objetos podem
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 54
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
ser concretas ou abstraas.

As linguagens de programao que so orientadas a objetos possuem mecanismos que, a
partir do conceito de classes, permitem determinar os tipos de objetos que sero destinados a
cada aplicao. Os objetos que apresentam semelhanas entre si so agrupados em classes.

Os objetos, quando so criados, ocupam um espao na memria que utilizado para o
armazenamento de seu estado e de um grupo de operaes, as quais podemos aplicar ao
objeto. Mais especificamente, o estado de um objeto refere-se aos valores de seu conjunto de
atributos, e seu grupo de operaes refere-se ao conjunto de mtodos. A classe responsvel
por definir ambos, atributos e mtodos.

Tendo em vista que os objetos so instncias de classe, para que eles realizem suas tarefas
preciso que as instncias sejam criadas, uma vez que por meio de sua manipulao, as tarefas
dos objetos podem ser efetuadas. Uma vez realizadas essas tarefas, podemos excluir os
objetos.

4. Classes

Definimos classe como sendo uma abstrao de um conjunto de objetos, os quais so
agrupados por possurem similaridades em termos de comportamento e caractersticas.
Sendo assim, as propriedades ou os atributos de um objeto so descritos a partir da definio
de uma classe.

Por meio da definio de uma classe tambm possvel descrever o comportamento desse
objeto. Entendemos por comportamento de um objeto a funcionalidade que pode ser aplicada
a ele. Um mtodo, o qual corresponde a um procedimento ou funo, o responsvel por
descrever tal funcionalidade. Embora os mtodos sejam correspondentes a procedimentos e
funes, eles so capazes de manipular somente os atributos definidos para um objeto e suas
variveis locais.

Nota: Os atributos referem-se s caractersticas dos objetos/ j os mtodos referem-se s
aes dos mesmos.

A criao de classes em Java um procedimento que deve ter incio apenas depois de
estabelecidas as classes que formaro a aplicao, bem como a estrutura e o comportamento
das mesmas.

Contamos, tambm, com as classes modelo, as quais servem como base para o momento em
que o cdigo implementado. Nessas classes modelo, contudo, no temos a implementao
de cdigos especficos, temos somente a estrutura e o comportamento referente classe ou
ao objeto.

Para compreendermos de maneira adequada essas classes, consideremos a necessidade de
criar um objeto Pessoa, por exemplo. Para isso, listaremos as caractersticas que as pessoas
tm em comum, tais como:

Nome do objeto: Pessoa (classe modelo)
Caractersticas: sexo, cabelo, idade (atributos)

A definio de uma classe modelo em Java contendo esses dados a seguinte:
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 55
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

class Pessoa
{
char sexo;
String cabelo;
int idade;
}

A partir desta classe modelo, a qual recebe este nome por se tratar de uma definio geral,
possvel implementar e dar vida a diversos programas. Em um captulo posterior, o assunto a
respeito de classes ser abordado com mais detalhes.

5. Princpios da orientao objetos

A implementao de um modelo orientado a objetos auxiliada por meio de mecanismos. A
linguagem de programao Java, a fim de adequar tais mecanismos, utiliza trs tipos de
estruturas distintos, que so:

Encapsulamento;
Herana;
Polimorfismo.

O encapsulamento, a herana e o polimorfismo so mecanismos que, em conjunto, formam
um ambiente de programao capaz de suportar o desenvolvimento de programas com maior
escalabilidade e robustez. Na tabela a seguir, teremos mais detalhes a respeito desses
mecanismos:

Mecanismos Descrio
Encapsulamento
O encapsulamento uma tcnica que faz com que os
atributos da classe permaneam ocultos, pois, assim, estes
podem ser lidos ou alterados somente peos mtodos da
prpria classe. Com isso, desnecessrio conhecer a
implementao interna da classe. importante destacar,
ainda, que o encapsulamento permite otimizar as
implementaes j realizadas, bem como permite que as
classes sejam utilizadas sem que haja rupturas. Para isso, no
entanto, preciso que a interface pblica dessas classes
tenha sido respeitada
Herana
O conceito relacionado ao mecanismo de herana um dos
maiores diferenciais entre a programao orientada a
objetos e os outros tipos de programao. Por meio da
herana possvel estender as definies existentes. Quando
temos uma hierarquia de classes planejada de forma
adequada, temos a base para que um cdigo possa ser
utilizado novamente, o que permite poupar esforo e tempo
na medida em que o desenvolvimento de um cdigo exige
ambos de forma considervel.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 56
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Polimorfismo
O polimorfismo um mecanismo por meio do qual
selecionamos as funcionalidades utilizadas de forma
dinmica por um programa no decorrer de sua execuo. Os
cdigos que o polimorfismo permite criar apresentam
diversas caractersticas, dentre as quais destacamos a lgica,
a robustez, a legibilidade e a limpeza.

O exemplo da comunicao atravs do telefone ilustra a ideia da orientao a objetos. O
telefone um aparelho utilizado para transmitir sons distncia. Ele constitudo
basicamente de dispositivos para converter ondas sonoras em ondas eletro-magnticas. Neste
ponto, vale considerar o microfone, para reverter esse processo, o receptor, o gancho que
serve como interruptor, a campainha que d o sinal de que o aparelho est recebendo uma
ligao e o disco, ou teclas, que selecionam o telefone com o qual se pretende estabelecer
comunicao.
Todos os usurios de telefones utilizam a herana para se comunicar atravs de diferentes
tipos (subclasses) de aparelhos telefnicos. Quer o telefone seja um celular, um fixo por
ondas de rdio ou um fixo por fibra tica, quem o est utilizando ter um teclado para discar
o nmero desejado, uma campainha indicando que o aparelho est recebendo uma ligao,
entre outros itens.
O polimorfismo reflete-se na possibilidade que os fabricantes de aparelhos telefnicos tm
de oferecer uma ampla variedade de opes no mesmo telefone bsico. No importa a
tecnologia utilizada ou o modelo, sempre utilizaremos um teclado para discar o nmero
desejado. Assim, temos que o controle de diversas implementaes pode ser realizado por
uma mesma interface.
Por meio dos concejtos relacionados ao encapsulamento, herana e ao polimorfismo,
observamos como diversas partes distintas acabam por transformar-se em um aparelho de
telefone de qualquer tipo.
A mesma situao descrita para o telefone tambm se aplica aos conceitos da programao
orientada a objetos na medida em que as partes de um programa, quando unidas,
transformam-se em um produto final com robustez, coerncia e com pouca complexidade de
manuteno. importante compreendermos os conceitos de encapsulamento, herana e
polimorfismo, uma vez que todos os programas desenvolvidos em linguagem Java so
orientados a objetos. Mais detalhes a respeito de encapsulamento, herana e polimorfismo
sero abordados posteriormente.

















PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 57
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 6

1. Introduo

No captulo anterior, que tratou da orientao a objetos, definimos brevemente o conceito de
classes. No decorrer deste captulo, entretanto, essa descrio ser abordada de forma mais
detalhada.
Tendo em vista que a linguagem de programao Java orientada a objetos, o conceito de
classes torna-se uma de suas principais bases. Uma classe tem a funo de determinar no
somente a natureza, mas tambm a forma de um objeto. Por meio de classes, possvel
realizar o processo de construo de objetos, o qual recebe o nome de instanciao.
Em termos gerais, as classes so capazes de auxiliar na organizao de um conjunto de
dados, bem como de auxiliar na definio dos mtodos mais adequados para a alterao e a
utilizao desses dados.

Nota: Quanto aos objetos, podemos dizer que eles tm um papel fundamental na
programao orientada a objetos, ou OOP (Object-Oriented Programming).

A fim de que possamos declarar as classes de maneira adequada, preciso analisar algumas
regras, as quais sero descritas a seguir:

Regras Descrio
Classe pblica
Cada arquivo de cdigo-fonte pode conter somente uma classe pblica e,
ainda, o nome atribudo a esse arquivo deve ser igual ao nome da classe em
questo.
Instrues
O arquivo de cdigo-fonte deve apresentar em sua primeira linha a
instruo do pacote. Isso deve ocorrer caso a classe seja parte integrante de
um pacote. Tanto as instrues de pacote quanto as instrues de
importao so aplicadas a todas as classes pertencentes ao arquivo de
cdigo-fonte.
Modificadores
Antes que uma classe seja declarada, podemos adicionar modificadores
mesma. Esses modificadores podem ser de acesso e podem ser aqueles que
no se referem ao acesso. Dentre os modificadores de acesso, temos o
private, o protected e o public. J dentre os modificadores que no so de
acesso, temos o abstract, o final, entre outros.

Com relao s instrues, sejam elas de pacote ou de importao, tambm preciso
destacar o seguinte:

A insero das instrues de importao deve ser realizada entre a declarao da
classe e a instruo do pacote;
As instrues de importao devem ser colocadas na primeira linha referente ao
arquivo de cdigo-fonte caso no haja uma instruo de pacote;
A primeira linha do arquivo de cdigo-fonte deve ser destinada insero da
declarao de classe caso no haja instrues de pacote ou instrues de operao.

importante destacar que as linhas de comentrio no precisam necessariamente ser as
primeiras linhas de um arquivo de cdigo-fonte; elas podem estar presentes em qualquer
local desse arquivo.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 58
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
2. Encapsulamento

Na linguagem de programao Java, a classe o alicerce para o encapsulamento, o qual
definido como uma tcnica que faz com que os atributos da classe permaneam ocultos, pois,
dessa forma, eles podem ser lidos ou alterados somente pelos mtodos da prpria classe. Por
conta dessa tcnica, o conhecimento a respeito da implementao interna da classe
desnecessrio, uma vez que isso passa a ser responsabilidade dos mtodos internos da classe.
Sabemos que a classe responsvel por definir a estrutura e o comportamento de seus
objetos. Devido a esse papel, comum que os objetos sejam chamados de instncias dessa
classe.
Assim que uma classe criada, seu cdigo e seus dados, os quais so chamados de membros
da classe, so determinados. Esses dados recebem o nome de variveis membro ou variveis
de instncia. J o cdigo tem a funo de formar os mtodos, os quais tambm podem ser
denominados como mtodos membro.
Os mtodos presentes em um programa desenvolvido em Java so responsveis por
determinar a maneira como sero utilizadas as variveis membro, o que indica que os
mtodos cuja funo operar sobre os dados de instncia de uma classe determinam qual
ser a interface e o comportamento apresentados pela mesma.
Tendo em vista que os mtodos e as variveis de uma classe podem ser definidos como
pblicos ou privados, temos a seguinte situao:

Tudo o que o usurio externo precisa conhecer a respeito de uma classe encontra-se
em sua interface pblica;
Somente os cdigos membros da classe so capazes de acessar seus mtodos e
variveis privados. Isso garante que no ocorrero aes inadequadas, mas exige que
a interface pblica seja planejada com cautela para que o funcionamento interno da
classe no seja muito exposto.

Nota: Ao passo que uma classe definida como sendo uma construo lgica, um objeto
definido como a realidade fsica. Quanto ao mtodo em Java, este corresponde a uma funo
nas linguagens C e C++.

3. Tipos construdos

Podemos criar variveis a partir de tipos construdos. Isso significa que possvel criar
variveis a partir das classes que j existem. As variveis de tipos construdos esto
diretamente relacionadas a algum tipo de classe que criada ou, ainda, que j exista, como as
classes que acompanham a linguagem de programao Java.
O processo de criao de variveis atravs de tipos construdos recebe o nome de
instanciao. Este um processo diferente da criao de variveis do tipo bsico, tais como
int, char, boolean, long, double, entre outras.

4. Instanciao

A instanciao um processo por meio do qual se realiza a cpia de um objeto (classe)
existente. Uma classe, a qual tem a funo de determinar um tipo de dado, deve ser
instanciada para que possamos utiliz-la. Sendo assim, devemos criar sua instncia, a qual
definimos como sendo um objeto referente ao tipo de dado que foi definido pela classe.
Ressaltamos que, exceto a classe abstract, qualquer outra classe pode ser instanciada como
um tipo de dado de Java.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 59
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Para que possamos compreender adequadamente o processo de instanciao, destacamos um
exemplo a seguir, o qual utiliza a classe Pessoa j mencionada.
Observemos:

class Pessoa
{
char sexo;
String cabelo;
int idade;
}

class Cadastro
{
public static void main(String args[])
{
Pessoa joao; // passo 1
joao = new Pessoa(); // passo 2
//(instanciao completa)
joao.sexo = 'm'; // l atributo sexo do objeto joo
joao.cabelo = "castanhos";
joao.idade = 15;
System.out.println(joao.cabelo);

Pessoa maria = new Pessoa(); // passo 1 e 2
// em uma nica linha
maria.idade = 31;
System.out.println(maria.idade);
}
}

Como pudemos verificar, o exemplo que acaba de ser descrito parte do pressuposto de que
temos um programa de cadastro e desejamos trabalhar com os dados de determinadas
pessoas no programa.

Nota: importante destacar que somente pelo fato de termos declarado uma varivel
construda, isso no significa que ela foi criada automaticamente. A fim de que o processo de
instanciao seja realizado por completo, devemos utilizar new nomeClasseO. Uma vez
realizada a instanciao, utilizamos o nomeObjetoCriado.membro para que possamos nos
referenciar aos membros do objeto criado.


5. Atribuio entre objetos de tipos construdos

Quando atribumos variveis de tipos construdos, aquele que recebe essa atribuio tem
todo seu valor ou valores anulados, ou seja, literalmente excludos da memria, passando a
apontar para o objeto ao qual foi atribudo.

Os dois objetos, ento, passam a apontar para um nico endereo de memria como se
ambos pudessem ter o mesmo endereo de memria, isto , os mesmos dados, ou como se
dois nomes diferentes pudessem referenciar um mesmo objeto.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 60
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Os exemplos descritos a seguir mostram o processo de atribuio entre tipos construdos:

class Cap6_Ex1
{
public static void main ( String args[ ])
{
Pessoa joao = new Pessoa();
Pessoa maria = new Pessoa();
joao.sexo ='m';
joao.idade = 45;
maria.sexo = 'f';
maria.idade = 17;
joao = maria; //atribuio realizada

System.out.println("Joao sexo = " + joao.sexo );
System.out.println("Joao idade = " + joao.idade );
}
}

Aps verificar o resultado do exemplo acima, modifique-o para o cdigo abaixo:

class Cap6_Ex1A
{
public static void main ( String args[ ])
{
Pessoa joao = new Pessoa();
Pessoa maria = new Pessoa();
joao.sexo = 'm';
joao.idade = 45;
maria.sexo = 'f';
maria.idade = 17;
joao = maria; // atribuio realizada
System.out.println("Joao sexo = " + joao.sexo);
System.out.println("Joao idade = " + joao.idade );
joao.idade = 50;
System.out.println("Maria idade = " + maria.idade);
joao.sexo = 'm';
System.out.println("Maria sexo = " + maria.sexo);
}
}


6. Inicializao dos atributos de uma classe

Podemos determinar os valores de inicializao a quaisquer atributos de uma classe. No
entanto, caso os atributos de uma classe no possuam valores de inicializao, tais valores
sero determinados conforme o tipo de classe no momento de sua instanciao.
Observemos a seguir quais so os tipos de classes e os valores de inicializao determinados
aos seus respectivos atributos:


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 61
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Se for do tipo int, seu valor ser 0 (zero);
Se for do tipo boolean, seu valor ser false;
Se for do tipo construdo, seu valor ser null.

Caso os valores de inicializao desejados sejam estabelecidos aos atributos de uma classe,
estes sero os valores utilizados no processo de instanciao do objeto dessa mesma classe.

7. Acesso

Quando falamos de acesso a classes, estamos nos referindo a um conceito de visibilidade, ou
seja, uma determinada classe deve ser capaz de visualizar a outra para que, dessa maneira,
possa acessar seus mtodos e variveis.
Para compreendermos de maneira adequada esse conceito, destacamos duas classes distintas,
a classe X e a classe Y. A classe X capaz de criar uma instncia da classe Y, bem como
pode tornar-se uma subclasse de Y e acessar seus mtodos ou variveis de acordo com o tipo
de controle de acesso de ambos.

7.1. Padro

O acesso a classes pode ser padro ou pblico. Quando possui acesso padro, a classe no
precedida por um modificador em sua declarao. O acesso padro considerado como o
acesso ao nvel do pacote, uma vez que classes com esse tipo de acesso so encontradas
somente pelas classes que fazem parte do mesmo pacote.
Caso duas classes estejam em pacotes distintos e uma delas possua acesso padro, a outra
dever desconsiderar sua existncia para que no haja problema durante a compilao.

Observemos os exemplos a seguir, nos quais temos dois arquivos de cdigo-fonte:

package grupo;
class Animais
{
}

import grupo.Animais;
class Gato extends Animais
{
}

Em ambos os arquivos de cdigo-fonte descritos, temos Animais, que a superclasse, e
temos Gato, que a subclasse. Tendo em vista que h uma instruo de importao no
comeo do arquivo Gato, e que esta realiza uma tentativa de importar Animais, a compilao
do arquivo Gato apresentar problemas, ao contrrio da compilao do arquivo Animais.

Vejamos a mensagem resultante do processo de compilao de Gato:







PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 62
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
C:\Java\Exemplos\Gato.Java:3: grupo.Animais is not public in grupo; cannot be accessed
from outside package
import grupo.Animais;
^
C:\Java\Exemplos\Gato.java:5: cannot access Animais
bad class file: .\Animais. class
dass file contains wrong class: grupo.Animais
Please remove or make sure it appears in the correct subdirectory of the
classpath.
class Gato extends Animais
^


O processo de compilao do arquivo Gato apresenta problemas devido ao fato de sua
superclasse, Animais, encontrar-se em um pacote distinto do seu e, tambm, possuir acesso
padro. Para solucionar esse problema, podemos colocar as duas classes em um nico pacote
ou, ainda, declarar a superclasse Animais com a palavra-chave public.

7.2. Pblico

Conforme mencionado no subtpico anterior, a classe Animais pode ser declarada com a
palavra-chave public para que, assim, todas as classes pertencentes a todos os pacotes
possam acess-la.
Observemos o exemplo a seguir:

package grupo;
public class Animais
{
}


Neste exemplo, a classe Animais pode ser visualizada por todas as classes de Java e,
portanto, instanciada a partir destas, assim como pode ser estendida. Somente a utilizao do
modificador final para marcar essa classe impediria tal visualizao.
Em suma, todas as classes de Java tem acesso a uma classe pblica, porm, a fim de utilizar
uma classe pblica pertencente a um pacote distinto da classe criada, preciso que ela, a
classe pblica, seja importada.

8. Superclasse

As classes que se encontram em nveis mais elevados de uma hierarquia so denominadas
superclasses, as quais possuem uma subclasse. Sendo assim, subclasses so aquelas que se
encontram um nvel abaixo de suas superclasses.
Tendo em vista que uma classe sempre declarada como subclasse de uma classe existente,
essa classe declarada herda, de forma automtica, todas as caractersticas de sua superclasse.

9. Classe Object

Definimos a classe Object como sendo a raiz para a definio de todas as classes, uma vez
que, de forma implcita, toda classe criada sem que haja uma referncia sua superclasse
derivada diretamente da classe Object.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 63
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Devido ao fato de as classes serem derivadas de forma direta da classe Object, os objetos de
todas as classes tem as definies da classe em questo disponveis.

10. Classes abstratas

Entendemos por classes abstratas as classes a partir das quais no possvel realizar
qualquer tipo de instncia. Membros que no so abstratos podem estar contidos nessas
classes, tais como mtodos e variveis normais, entretanto, em sua declarao, essas classes
abstratas preferencialmente devero ter um ou mais mtodos abstratos.
A implementao desses mtodos responsabilidade da classe que tem a funo de estender
a classe abstrata, uma vez que os mtodos abstratos no contm corpo e, tampouco,
implementao.
Como medidas de segurana, as classes abstratas somente podem ser estendidas, sendo que a
criao de um objeto a partir da mesma um procedimento evitado. Alm disso, caso um ou
mais mtodos abstratos estejam presentes nessa classe abstrata, a classe filha ser, ento,
forada a definir tais mtodos, pois, caso contrrio, a classe filha tambm se tornar abstrata.

A funcionalidade dos mtodos abstratos que so herdados pelas classes filha normalmente
atribuda de acordo com o objetivo ou o propsito dessas classes. possvel, porm, no
atribuirmos uma funcionalidade a esses mtodos abstratos. Neste caso, faz-se necessrio,
pelo menos, declarar tais mtodos.

10.1. Mtodos abstratos

Conforme visto anteriormente, os mtodos abstratos esto presentes somente em classes
abstratas, e so aqueles que no possuem implementao. A sintaxe desse tipo de mtodo a
seguine:

abstract <tipo_retorno> <identificador> ;

No exemplo a seguir, faremos com que a classe Funcionrios seja abstrata e, como ela ser
a classe base, outras duas classes, Motorista e Secretaria, sero derivadas dela.
Observemos:

abstract class Funcionario
{
String nome;
int salario;
void setSalario(int val)
{
salario = val;
}

int getSalario()
{
return salario;
}

abstract void reajuste();
}

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 64
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Nota: A palavra abstract como prefixo da declarao da classe Funcionario indica que esta
classe abstrata, contudo, quando ela utilizada como prefixo da declarao do mtodo
reajuste(), essa palavra reservada indica que este um mtodo abstrato e, portanto, no
possui uma definio.

O exemplo a seguir mostra como o mtodo reajuste() implementado nas classes
Motorista e Secretaria e, ainda, como ele utilizado com a finalidade de calcular o reajuste
salarial para esses funcionrios.
Vejamos, ento, como definir as classes motorista e secretaria:

Definindo a classe motorista

class Motorista extends Funcionario
{
int hab;
void reajuste()
{
System.out.println(" Executando Clculo Salrio");
salario += 150;
}
}

O mtodo reajuste(), que na superclasse est como abstrato, implementado na classe
Motorista.

Definindo a classe secretaria

class Secretaria extends Funcionario
{
int toques;
void reajuste()
{
System.out.println(" Executando Clculo Salrio");
saIario += 300 ;
}
}

Assim como na classe Motorista, na classe Secretaria tambm implementado o mtodo
reajuste().












PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 65
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap6_Ex3
{
public static void main(String arg[])
{
Motorista m = new Motorista();
Secretaria s = new Secretaria();
m.setSalario(1200);
m.reajuste();
System.out.println("Motorista salrio: " +
m.getSalario());
System.out.println();
s.setSalario( 1700);
s.reajuste();
System.out.println("Secretaria salrio: " +
s.getSalario());
}
}

Alm de utilizarmos classes abstratas como descrito no exemplo anterior, tambm possvel
utilizar classes abstratas em conjunto ao polimorfismo.
Vejamos a seguir:

abstract class Colaborador
{
int nfunc;
String nome_func;

Colaborador(int x, String y)
{
nfunc = x;
nome_func = y;
}
void mostra()
{
//System.out.printIn();
System.out.println(" Numero Funcional: "+ nfunc);
System.out.println("Nome: "+ nome_func);
System.out.println();
}
abstract void le();
}










PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 66
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
// definindo a classe Condutor como derivada de Colaborador
class Condutor extends Colaborador
{
int habilitacao;
Condutor(int func, String nome, int hab)
{
super(func, nome);
habilitacao = hab;
}
void le()
{
System.out.println(" Habilitao: " + habilitacao);
mostra();
}
}


// definindo a classe SecretariaJr como
// derivada de Colaborador
class SecretariaJr extends Colaborador
{
int velocidade_dig;
SecretariaJr(int func, String nome, int dig)
{
super(func, nome);
velocidade_dig = dig;
}
void le()
{
System.out.println("velocidade de digitao.: " +
velocidade_dig);
mostra();
}
}

class Cap6_Ex4
{
public static void main(String arg[])
{
Colaborador BASE[] = new Colaborador[4];
BASE[0] = new Condutor(200, "Henrique", 89);
BASE[1] = new SecretariaJr(40, "Simone", 67);
BASE[2] = new SecretariaJr(210, "Mari", 77);
BASE[3] = new Condutor(300, "Alexandre", 800);
for (int x = 0; x<4; x++)
BASE[x].le();
}
}



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 67
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
11. Classes finais

As classes que so declaradas com a palavra-chave final, as chamadas classes finais, no
podem ser estendidas por outras classes. Sendo assim, as classes finais devem ser criadas
somente nas situaes em que desejamos assegurar que nenhum de seus mtodos seja
sobreposto. Alm disso, utilizar a palavra-chave final assegura que a implementao de
determinados mtodos no ser alterada.

Nota: O compilador apresentar erros caso haja uma tentativa de estender uma classe final.

importante ressaltar que somente devemos criar uma classe final quando houver certeza de
que ela realmente possui todas as definies que devem ser estabelecidas em seus mtodos,
pois outro programador no ser capaz de otimizar essa classe e, tampouco, torn-la mais
especfica.
De fato, dificilmente cria-se uma classe final, uma vez que ela no permite a extenso das
classes e, portanto, elimina uma das principais caractersticas da programao orientada a
objetos. Sendo assim, para que outros programadores no tenham problemas nas situaes
em que precisam estender a classe, devemos utilizar a palavra-chave final somente quando
isso realmente for necessrio.
Os exemplos descritos a seguir mostram como declarar a classe final Animais e, em seguida,
o que acontece se tentarmos compilar a subclasse Gato.
Vejamos:

package grupo;
public final class Animais
{
public void essencialMethod ()
{
}
}

import grupo.Animais;
class Gato extends Animais
{
}

O erro resultante da compilao de Gato o seguinte:

>javac Gato.java
Gato.java:3 Can't subclass final classes: class Cert.Animais class Gato extends Animais {
1 error


Devido ao fato de no podermos estender classes finais, caso encontrssemos qualquer
problema em um de seus mtodos e no tivssemos o cdigo-fonte, este no poderia ser
alterado a fim de otimizar esse mtodo. Entretanto, em situaes como esta, classes que no
so finais podem ser estendidas, fazendo com que o mtodo seja sobreposto em uma
subclasse. Isso solucionaria os problemas apresentados.



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 68
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Exerccios de Fixao:

1 - Desenvolver a classe Cliente com os atributos nome, telefone e endereo, e o mtodo tela
que deve mostrar em tela os dados de cada cliente.
Desenvolver a classe Cadastrar, que dever instanciar a classe Cliente criando os seguintes
objetos:

Vanessa, Av. Tiradentes 2000, telefone 5555-5555
Mrcia, Rua Maranho, 328, telefone 6666-7070
Ernesto, Rua Alemanha, 727, telefone 5555-6677

Depois de compilada e executada a classe Cadastrar, o resultado deve ser semelhante ao
abaixo:

Nome Cliente: Vanessa
Telefone: (011) 5555-5555
Endereo: Av. Tiradentes, 2000
-------------------------------
Nome Cliente: Mrcia
Telefone: (011) 6666-7070
Endereo: Rua Maranho, 328
-------------------------------
Nome Cliente: Ernesto
Telefone: (011) 5555-6677
Endereo: Rua Alemanha, 727
-------------------------------

























PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 69
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 7

1. Introduo

Para determinarmos o comportamento dos objetos existentes em uma classe, utilizamos os
mtodos, que so a implementao de uma operao para uma classe. Eles podem ser
aplicados a vrias classes diferentes, mas todos os objetos que esto em uma mesma classe
compartilham os mtodos aplicados a eles.
Quando o mtodo aplicado a diversas classes, temos o polimorfismo, ou seja, o mtodo
assume formas diferentes em classes tambm diferentes.
Vejamos um exemplo: temos a classe Carro. Aos objetos dessa classe, atribumos os
seguintes mtodos: andar, abastecer, parar. O mtodo abastecer pode ser implementado
de vrias formas nos objetos da classe Carro, e isso varia conforme o tipo de abastecimento
que o carro pode ter: lcool, gasolina ou diesel. A partir disso, vimos que esse mtodo ter
sempre a mesma funo, que abastecer, mas cada tipo de abastecimento ser implementado
de uma forma diferente.
Em Java, assim como nas demais linguagens, os mtodos so comparados com as antigas
funes presentes em linguagens procedurais. Eles so declarados e chamados dentro de
programas em Java, que so classes ou interfaces.
Cada mtodo tem uma funo especfica. Para utiliz-lo, devemos primeiramente nos
preocupar com a sua definio. Vejamos os itens que devem ser definidos em um mtodo:

Nome;
Parmetros recebidos, quando houver;
Comandos (corpo do mtodo);
Valor de retorno, quando houver.

2. Estrutura dos mtodos


A partir de agora, estudaremos alguns fundamentos dos mtodos. Comearemos pela sintaxe,
que a seguinte:

tipo nomeDoMetodo(lista-de-parmetros)
{
// Corpo do mtodo
}

Em que:

tipo refere-se ao tipo de dados vlido, retornado pelo mtodo. Esse tipo pode ser qualquer
um, incluindo aqueles de classes desenvolvidas pelo programador;

nomeDoMetodo refere-se ao nome do mtodo, que pode ser um identificador legal que
no seja utilizado por outros itens do escopo atual;

lista-de-parmetros refere-se sequncia de pares compostos de um tipo e um
identificador. Ambos esto separados por vrgulas.

Com relao aos parmetros, eles so variveis, ou seja, eles recebem o valor dos
argumentos que so passados para o mtodo assim que este chamado. Quando no houver
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 70
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
parmetros para o mtodo, no deve ser inserido contedo entre os parnteses (lista-de-
parmetros).

Quando o mtodo no retornar um valor, ele deve ser declarado como void. J se esse
mtodo retornar um valor, mas que no seja void, o valor ser retornado para a rotina que fez
a chamada do mtodo. Para isso, o comando return utilizado. Observemos no exemplo a
seguir:

tipo nomeDoMetodo(lista-de-parmetros)
{
// Corpo do mtodo
return valor;
}

3. Criando mtodos


Para criarmos um mtodo, primeiramente, devemos considerar a utilizao da seguinte
sintaxe:

static <tipo> <nome>(<tipo> par1, <tipo> par2, ...)
{
comandos;
}

Em que:

static um operador que indica que os mtodos podem ser referenciados dentro da mesma
classe em que foram criados;

<tipo> o tipo de retorno do mtodo, ou seja, o tipo de dado (int, boolean, short, var, long,
etc);

<nome> refere-se ao nome do mtodo;

<tipo> par1 e <tipo> par2 referem-se ao tipo e ao nome (par1 e par2) dos parmetros que
podem ou no ser recebidos;

comandos; o local onde informamos a ao que o mtodo executar.

Agora, utilizaremos o seguinte exemplo: precisamos criar um mtodo que efetue a soma de
dois nmeros recebidos como parmetros.

static int soma (int val1, int val2)
{
int result;
result = val1 + val2;
return result;
}

Em que:
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 71
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

int o tipo de retorno do mtodo, ou seja, define o tipo de dado int (valores numricos e
inteiros);
soma o nome que definimos para o mtodo;
int val1 e int val2 indicam que o mtodo (soma) receber um parmetro do tipo inteiro que
possui o nome vali e val2;
{ um caractere obrigatrio para definirmos um mtodo em Java, e indica o incio do
corpo do mtodo;
int result; significa uma varivel do tipo inteiro que est sendo criada. Nesta varivel, ser
armazenada a soma dos valores recebidos como parmetros (val1 e val2);
result = val1 + val2 refere-se varivel result que receber o valor da soma dos
parmetros vali e val2;
return result; indica que qualquer chamada ao mtodo soma receber como valor de
retorno o resultado da varivel result;
} um caractere obrigatrio para definirmos um mtodo em Java , e indica o fechamento
do corpo do mtodo.

4. Chamada de mtodos


Depois de definirmos um mtodo, necessrio referenci-lo, ou seja, fazer uma chamada ao
mtodo. Vejamos como isso feito:

class Cap7_Ex1
{
static int soma (int val1, int val2)
{
int result;
result = val1 + val2;
return result;
}

static public void main(String args[])
{
int s; //definio simples de varivel
s = soma(15, 20); //atribuindo a "s" a chamada
// do mtodo soma com dois valores
System.out.println("s = " + s); //mostra o valor
// de s na tela (s=35)
}
}


5. Passagem de parmetros;
Por valor e por referncia

H dois modos de passarmos os argumentos para uma funo, ou seja, valores para mtodos.
Esses modos dependem do que est sendo passado.
Vejamos a seguir:


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 72
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Passagem de argumentos por valor
Ao passar o argumento para um mtodo por valor, este copia o valor do argumento para o
parmetro correspondente. Ento, o parmetro do mtodo passa a ser uma cpia do
argumento. Esse parmetro poder sofrer alteraes e elas no sero refletidas no argumento
original que foi utilizado para chamar o parmetro.
Este modo utilizado quando passamos tipos bsicos para o mtodo, tais como int, boolean
e char.


Passagem de argumentos por referncia
Se o argumento passado por referncia, ser atribuda ao parmetro uma referncia para o
argumento original, e no uma cpia do valor como no outro modo. A referncia, ento,
utilizada para acessar o argumento que est definido na chamada.
Quanto s alteraes efetuadas no parmetro, elas tm efeito sobre o argumento original que
utilizado para chamar o mtodo.
Este procedimento utilizado quando passamos tipos construdos para o mtodo, tais como
strings e novos objetos.

Parmetro refere-se a uma varivel definida por um mtodo. Quando esse mtodo
chamado, a varivel recebe um valor.

Argumento refere-se a um valor atribudo a um mtodo quando este invocado.

No exemplo a seguir, mostraremos como utilizar a passagem de argumentos por valor e por
referncia:

class Cap7_Ex2
{
public static void main(String args[])
{
Pessoa maria = new Pessoa();
int valor = 1500;
maria.sexo = 'f';
maria.cabelo = "encaracolados";
maria.idade = 50;
System.out.println("Valores antes da chamada " +
" do mtodo");
System.out.println();
System.out.println("Valor = " + valor);
System.out.println();
System.out.println("Maria sexo = " + maria.sexo);
System.out.println(" Maria cabelo = "
+ maria.cabelo);
System.out.println(" Maria idade = " + maria.idade);
altera(maria, valor);
System.out.println();
System.out.println("Valores DEPOIS da chamada " +
"do mtodo");
System.out.println();
System.out.println("Valor = " + valor);
System.out.println();
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 73
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
System.out.println(" Maria sexo = " + maria.sexo);
System.out.println("Maria cabelo = "
+ maria.cabelo);
System.out.println(" Maria idade = " + maria.idade);
}

static void altera(Pessoa p, int valor)
{
p.sexo = 'm';
p.cabelo= "loiros";
p.idade = 33;
valor = 137;
}
}

Em que:

Na linha altera(Pessoa p, int v), temos o seguinte:

altera() o mtodo;
(Pessoa) o primeiro parmetro passado para o mtodo altera(), sendo que o objeto inteiro
passado como parmetro;
(int) o segundo parmetro passado para o mtodo altera().

Pelo resultado final apresentado na tela, poderemos observar o tratamento que dado quando
os dados passados so de tipos bsicos e tipos construdos.

6. Comando return

Para retornarmos de um mtodo explicitamente, utilizamos o comando return. Com ele, a
execuo do programa volta para o chamador do mtodo, terminando, ento, o mtodo no
qual executado.

Observemos o exemplo a seguir:

class Cap7_Ex3
{
public static void main(String args[])
{
int num= 5;
System.out.println("Linha anterior ao comando " +
" return.");
if(num <=5)
return;
System.out.println("Esta linha no ser executada");
}
}




PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 74
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
7. Acesso a mtodos

Quando precisamos restringir o acesso a um mtodo, utilizamos os moderadores de acesso.
Porm, devemos saber que um mtodo sempre acessvel, independentemente do moderador
que for escolhido para a restrio. Isso significa que podemos utilizar um outro mtodo
qualquer que est na mesma classe para chamar o mtodo cujo acesso est restrito.
A seguir, esto descritos os moderadores de acesso disponveis na linguagem Java:

Public
Quando utilizamos o moderador public, significa que o mtodo pode ser chamado a partir de
outros mtodos de qualquer classe. Isso ocorre porque o mtodo pblico.

Nota: A menor restrio atendida com o moderador public.

Protected
Ao utilizarmos o moderador protected, significa que o mtodo pode ser chamado apenas
pelas classes que fazem parte do conjunto package. Isso ocorre porque o mtodo fica
protegido.

Nota: O package corresponde a um modo utilizado para que vrias classes, as quais tm um
relacionamento estreito, sejam organizadas.
Ainda com relao protected, se houver uma tentativa de uma classe que no pertence ao
package de chamar um mtodo protegido, ocorrer o que chamamos de violao. Essa
violao no sinalizada com preciso pelo compilador e, por esse motivo, podemos
encontrar problemas em identific-la. Se isso ocorrer, poderemos receber na tela uma
mensagem do seguinte tipo:
No method matching funo() found in class nomeClasse

Private
Utilizando este moderador, indica que o mtodo particular da classe em que ele se
encontra. Sendo assim, ele somente pode ser utilizado nessa classe.

Private Protected
Este moderador de acesso permite que o mtodo seja acessado pela classe no qual ele se
encontra e, tambm, pelas classes derivadas dela. importante sabermos, no entanto, que
isso somente possvel em um mesmo arquivo-fonte.

Friendly
Este moderador de acesso o padro e ser utilizado sempre que no for definido um outro
moderador explicitamente. Com ele, o mtodo pode ser utilizado tanto na classe em que est
quanto em qualquer outra classe derivada dela, mesmo que essa classe derivada no pertena
ao package.

8. Modificadores de mtodos

O mtodo possui propriedades que precisam ser especificadas. Para especific-las,
utilizamos o modificador de mtodo, a partir do qual determinamos se as classes derivadas
podem ou no alterar ou redefinir o mtodo. Adicionalmente, o modificador nos permite
definir o modo como o mtodo ser apresentado.
Vejamos, a seguir, quais so os modificadores de mtodo disponveis na linguagem Java:

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 75
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Abstract
O mtodo que possui o modificador abstract abstrato, ou seja, no tem o seu corpo
especificado. Podemos dizer que este modificador pede para que o corpo seja completado
por uma declarao feita por uma classe derivada. A seguir, mostraremos as duas formas de
escrever um mtodo abstraio, visto que o uso da palavra abstract opcional:

abstract void print();
ou void print();

Devemos saber que no podemos instanciar uma classe que possui um mtodo abstrato ou
uma classe derivada de outra na qual existe um mtodo abstrato.

Final
Com este modificador, o mtodo no pode ser alterado nem redefinido por nenhuma classe
derivada. importante sabermos que obrigatrio que o mtodo declarado como final
possua um corpo.
Native
Ao utilizar este modificador, apenas o cabealho declarado, ou seja, no h corpo.
Adicionalmente, o native designa um mtodo implementado em outra linguagem.

Static
Este modificador permite que o mtodo seja compartilhado pelos objetos instanciados pela
mesma classe. O mtodo static no faz distino entre os objetos que o compartilham, sendo
assim, ele no pode acessar as variveis declaradas dentro de uma classe. Mas se a varivel
tambm for declarada como static, ela poder ser acessada pelo mtodo static.

Synchronized
O modificador de mtodo synchronized impede que os dados de uma classe sejam
acessados ao mesmo tempo por dois mtodos que esto em execuo concorrentemente.
Sendo assim, os outros mtodos precisam esperar para acessar os dados que estiverem sendo
acessados por outro mtodo.
O synchronized utilizado para o desenvolvimento de um programa de processamento
concorrente.

9. Membros estticos

Para especificarmos que um membro esttico, basta prefixarmos sua declarao a palavra
reservada static.
Uma caracterstica importante de membros estticos que os mesmos podem ser
referenciados pelo prprio nome da classe em que foram definidos, sem a necessidade de
criarmos objetos dessa classe para que possamos acossar os membros estticos fora da
mesma. Por esse motivo, podemos nos referenciar a eles como membros de classe.

9.1. Atributos estticos

Ao colocarmos a palavra reservada static juntamente com a definio de um atributo, este
torna-se esttico. Isso significa que o valor do atributo ser o mesmo em todas as instndas
da classe a que pertence.
Caso um atributo esttico possua 100 instncias provenientes da mesma classe, quando
alterarmos esse atributo em uma dessas instncias, automaticamente a alterao refletir nas
demais instncias da classe.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 76
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

9.2. Mtodos estticos

Ao colocarmos a palavra reservada static juntamente com a definio de um mtodo, este
torna-se esttico. Isso no significa que o seu valor no possa mudar, mas sim que somente
haver uma referncia para esse mtodo disponvel em memria.
A static uma das palavras-chave da linguagem Java. Quando ela colocada junto ao
mtodo, indica que dentro dele somente podemos acessar outros mtodos ou variveis que
tambm sejam declarados como static. Essa a principal caracterstica de um mtodo static,
e devemos sempre nos lembrar dela.
Tanto uma varivel esttica quanto uma varivel que no seja esttica podem ser definidas
dentro do mtodo static. Para acessarmos um membro ou mtodo que no seja esttico,
devemos criar uma instncia da classe correspondente para chamar o item desejado. Porm,
quando os membros no so estticos, podemos acessar ambas as propriedades: as estticas e
as no-estticas. Isso tudo ocorre porque no h dentro do mtodo esttico uma referncia
para o ponteiro this, o qual utilizado quando precisamos referenciar as propriedades da
classe com a qual se est trabalhando.

Observemos, a seguir, um exemplo em que utilizamos static:

class Elevador
{
boolean rodando = true;
static boolean ligado = true;

void deslig()
{
rodando = false;
}

static void mudForca()
{
ligado = !ligado;
}
}

class Manutencao
{
private final int NOITE = 22;
private final int FECHAR = 24;
private final int ABRIR =8;
Elevador parElev, imparElev;

Manutencao()
{
parElev = new Elevador();
imparElev = new Elevador();
}



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 77
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
void controle(int hora)
{
if(hora == NOITE)
{
imparElev.deslig();
parElev.deslig();
}
else if(hora == FECHAR || hora == ABRIR)
Elevador.mudForca();
}

void situacao()
{
// elevador par
System.out.println();
System.out.print(" ELEVADOR PAR: ");
If (!parElev.rodando)
System.out.print("nao ");
System.out.print("esta rodando");

//elevador impar
System.out.println();
System.out.print(" ELEVADOR IMPAR: ");
if(!imparElev. rodando)
System.out.print("nao ");
System.out.print("esta rodando ");

// situao elevadores
System.out.println();
System.out.print("SITUACAO DOS ELEVADORES: ");
if(!Elevador.ligado)
System.out.print("nao ");
System.out.println("esta rodando");
}
}

class Cap7_Ex4
{
public static void main(String args[])
{
Manutencao corredor = new Manutencao();
System.out.println();
System.out.println("08:00 - Hora de checar " +
"Elevadores");
corredor. controle(8);
corredor.situacao();
System.out.println();
System.out.println("22:00 - Hora de checar " +
"Elevadores");
corredor.controle(22);
corredor.situacao();
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 78
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
System.out.println();
System.out.println("24:00 - Hora de checar " +
"Elevadores");
Corredor.controle(24);
corredor.situacao();
}
}

10. Mtodo main()

O main() o mtodo static mais utilizado na linguagem Java, por meio do qual a aplicao
passa a ser executada. Portanto, quando desejamos utilizar algum mtodo ou realizar alguma
operao no programa, fazemos isso dentro do mtodo main().
importante observarmos que toda aplicao ou programa escrito em linguagem Java deve
ter obrigatoriamente um nico mtodo main() para que possa ser executada. Sendo assim,
vejamos as regras para utilizarmos esse mtodo:

O acesso deve ser public;
Deve ser static;
No deve retornar um valor (void);
Deve receber como argumento um array de string (String args[ ]).

A seguir, temos um exemplo que nos mostra o fluxo de execuo de um programa em Java
quando existem chamadas de mtodos:

class Cap7_Ex5
{
/*** definio do mtodo func ***/
static void func()
{
System.out.println("Executando a funo de nome " +
"func");
}
/*** trmino da definio ***/

static public void main(String args[])
{
System.out.println("Executando o primeiro comando");
System.out.println("Executando o segundo comando");
System.out.println(" . ");
System.out.println(" . ");
System.out.println(" . ");
func();
System.out.println("Sou o prximo comando que " +
"segue a chamado da funo");
System.out.println(" . \n");
System.out.println(" . \n");
System.out.println(" . \n");
System.out.println(" Executando o ultimo " +
" comando\n");
}}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 79
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
No exemplo a seguir, outros mtodos podem ser chamados a partir de outros mtodos.
Vejamos:

class Cap7_Ex6
{
static void AA()
{
System.out.println(" Executando AA");
}

static void BB()
{
System.out.println(" Executando BB");
AA();
}

static public void main(String args[])
{
System.out.println("\"main\", o ponto de partir");
BB();
}
}

11. Sobrecarga de mtodos

Na linguagem Java, podemos definir dois ou mais mtodos dentro de uma mesma classe.
Este procedimento conhecido como sobrecarga de mtodos, pois os mtodos so
sobrecarregados. Neste procedimento, as declaraes de parmetros devem ser diferentes,
porm, o nome utilizado o mesmo.
Quando chamamos um mtodo sobrecarregado, utilizamos um guia para definir qual verso
desse mtodo deve ser executada. Esse guia corresponde ao tipo e ao nmero dos
argumentos e, por esse motivo, ambos devem ser diferentes para cada um dos mtodos
sobrecarregados.
Mas devemos atentar para o seguinte: o tipo retornado dos mtodos sobrecarregados no
suficiente para que as suas verses sejam distintas. Isso ocorre porque a verso do mtodo
que possui parmetros correspondentes com os argumentos da chamada executada quando
for encontrada uma chamada a um mtodo sobrecarregado.
Observemos dois exemplos de sobrecarga de mtodos:













PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 80
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Sobrecarga
{
void mostra(int val)
{
System.out.println("0 valor informado foi: " + val);
}
void mostra(String nome)
{
System.out.println("Foi informado o nome: " + nome);
}

void mostra()
{
System.out.println("Nada foi informado!");
}
}

class Cap7_Ex8
{
public static void main(String args[])
{
Sobrecarga sob = new Sobrecarga();
System.out.println();
sob.mostra( "Ernesto");
sob.mostra();
sob.mostra(38);
}
}

12. Uso do this

Quando precisamos fazer referncia a um objeto criado dentro da prpria classe, utilizamos a
palavra this. Vejamos as duas situaes que, a princpio, exigem a utilizao da palavra this:

Quando uma referncia de uma classe deve ser passada pela prpria classe a um mtodo;
Quando uma classe possui duas variveis com o mesmo nome, sendo que uma varivel
pertence classe e a outra pertence aos mtodos dessa classe.

Nesta ltima situao, utilizamos a palavra this apenas se o mtodo ao qual a varivel
pertence precisar referenciar um campo da classe.
A partir dessas informaes, vejamos o exemplo seguinte;

class Empregado
{
private String endereco;
private int idade;

void setEndereco(String endereco)
{
this.endereco=endereco;
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 81
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

void setldade(int idade)
{
this.idade=idade;
}

String mostra()
{
return endereco + idade;
}
}

class Cap7_Ex10
{
public static void main(String args[])
{
Empregado emp = new Empregado();
System.out.println();
emp.setEndereco("Centro");
emp.setldade(40);
System.out.println(emp.mostra());
}
}

Nesse exemplo, a palavra this refere-se aos atributos definidos na classe, e no aos
parmetros dos mtodos. Observando o mtodo mostra(), verificamos que no foi
necessrio utilizarmos this. Isso porque quando o atributo est claro e os parmetros no
possuem nomes iguais, implicitamente qualquer referncia a nome ou endereco assume o
atributo da classe.

Nota: Mesmo que os nomes de atributos e parmetros em uma classe possam ser iguais,
aconselhamos que essa tcnica no seja utilizada.

13. Mtodo recursivos

Quando um mtodo realiza uma chamada a si mesmo, tanto as variveis locais quanto os
parmetros criados por cada chamada ficam armazenados nas pilhas. Ao realizarmos a
chamada a um mtodo recursivo, apenas os argumentos so novos, ou seja, no so criadas
novas cpias do mtodo.
Sendo assim, as variveis locais e os parmetros antigos so removidos da pilha quando cada
uma das chamadas recursivas retorna, e o cdigo do mtodo executado com as novas
variveis desde o comeo (ponto de chamada dentro do mtodo).
H duas verses de rotinas: as recursivas e as iterativas. A primeira verso, recursiva, pode
ser executada de forma mais lenta com relao verso iterativa. Isso possvel devido
sobrecarga adicional das chamadas realizadas s funes.
Conforme vimos, as variveis locais e os parmetros so armazenados na pilha. A cada
chamada realizada ao mtodo, so criadas cpias dessas variveis e desses parmetros, e isso
pode fazer com que a pilha se esgote. Quando isso acontece, temos o que conhecemos por
estouro de pilha, que nada mais do que uma grande quantidade de chamadas recursivas a
um mtodo. Nesse caso, o sistema runtime de Java causar uma exceo.
Devemos atentar que para forarmos o retorno de um mtodo sem que a chamada recursiva
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 82
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
seja executada, devemos utilizar uma condio if no cdigo. Caso contrrio, o mtodo no
ser retornado quando for chamado. E para que possamos acompanhar o algoritmo recursivo
enquanto ele est sendo implementado, podemos utilizar o mtodo printIn(). Com ele,
possvel visualizarmos passo-a-passo cada uma das partes de nosso cdigo que est sendo
executada.

Exerccios de Fixao:

A - Desenvolver uma calculadora em Java que possua as quatro operaes aritmticas
bsicas. Devero ser criadas duas classes: class Calculadora e class UsaCalculadora.









































PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 83
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 8

1. Introduo

No momento em que um objeto criado, ele imediatamente tem seu estado interno
inicializado por meio do mtodo construtor. Este mtodo, sintaticamente similar a qualquer
outro tipo de mtodo, identificado pelo mesmo nome da classe na qual ele est localizado.
Quando definido, o construtor automaticamente solicitado logo que o objeto criado. Isto
feito antes mesmo que o operador new complete seu procedimento de instanciao.
O construtor tem a capacidade de armazenar valores, que sero repassados ao objeto quando
este for criado. Ainda, o mtodo citado tem a finalidade de desempenhar alguma operao ou
clculo antes mesmo de partir para qualquer tipo de operao junto ao objeto.
Uma das principais caractersticas do construtor a de no possuir tipo retornado, isto
porque o construtor de uma classe retorna o mesmo tipo da prpria classe. Nem mesmo o
tipo void retornado pelo construtor.
O construtor, tambm, pode usar a sobrecarga de mtodos, de modo que um mesmo objeto
possa ser desenvolvido de diversas maneiras. Em uma sobrecarga de mtodos, podemos ter
dois ou mais mtodos com o mesmo nome dentro de uma classe, contanto que suas
assinaturas de parmetros, como tipo, ordem e nmero, sejam diferentes.

2. Construtor padro

Um procedimento que o programador deve tomar o de definir explicitamente um mtodo
construtor para uma classe mais sofisticada. Quando tal tarefa no feita, o prprio
compilador do Java se encarrega de criar um construtor padro.
O construtor padro definido pelo compilador do Java muitas vezes eficaz se estamos
trabalhando com classes simples. O que ele faz inicializar todas as variveis de instncia
para zero. J para classes mais complexas, o ideal definir mtodos construtores de maneira
explcita.
Com base em uma classe qualquer, identificamos um mtodo construtor padro como aquele
cuja lista de parmetros formais est vazia.

class Calcado
{
// este o mtodo construtor padro da classe
Calcado()
{
// as instrues aqui sero opcionais
}
}

class CriaCalcado
{
pubtic static void main (String args[])
{
Calcado sandalia = new Calcado() ; //instanciao ok
....
}
}


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 84
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
A partir do momento em que o programador define um construtor, o construtor padro deixa
de ser utilizado. Quando uma nova instncia da classe for feita, devemos sempre informar os
parmetros exigidos pelo mtodo que acabara de ser definido.

class Calcado
{
//agora este o mtodo construtor da classe
//exigindo parmetros no ato da instanciao
Calcado (String cor, int tamanho )
{
//este o local onde entraria o tratamento dos
//parmetros recebidos
}
}

class CriaCalcado
{
public static void main (String args[])
{
Calcado sandalia = new Calcado(); //instanciao
// erro!....
}
}

Para que o processo que acabamos de ver fosse bem sucedido, deveramos fazer o seguinte:

Calcado sandalia = new Calcado(" Preta", 36);
//instanciao ok

A seguir, temos um exemplo de uso do mtodo construtor.

class Carro
{
private String modelo;
private int ano;
Carro(String modelo, int ano)
{
this. modelo = modelo;
this.ano = ano;
}
String mostra()
{
return modelo + ano ;
}
}






PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 85
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap08_Ex1
{
public static void main(String args[])
{
Carro car = new Carro("Fiat Uno ", 2000);
System.out.println(car.mostra ());
}
}

3. Princpios dos contrutores

Para compreender adequadamente a respeito dos construtores, importante ter conhecimento
de algumas regras, as quais esto descritas a seguir:

Os construtores esto livres para utilizar qualquer modificador de acesso, incluindo o
private.

O modificador private (construtor privado) determina que apenas o cdigo dentro da prpria
classe est capacitado a instanciar um objeto desse tipo.
Caso a classe do construtor privado permita o uso de uma parte de sua instncia,
fundamental que ela disponha de uma varivel ou mtodo esttico para que uma instncia
gerada dentro da classe possa ser acessada;

O nome do construtor e da classe devem coincidir;

Os construtores no devem possuir um tipo de retorno;

Um mtodo com o mesmo nome da classe vlido, mas isso no far deste mtodo um
construtor. A presena de um tipo de retorno continuar fazendo dele um mtodo;

Um mtodo construtor padro ser criado automaticamente pelo compilador do Java caso
um construtor no seja inserido no cdigo da classe;

O construtor padro nunca ter argumentos;

Se j tivermos inserido algum argumento no cdigo da classe e quisermos ter um construtor
sem argumentos, ele no poder ser fornecido pelo compilador;

A chamada a um construtor sobreposto (this()) ou ao construtor da superdasse (super())
deve ser a primeira instruo de todo construtor;

Se no digitarmos a chamada a super() quando inserimos um construtor, uma chamada a
super() sem argumentos ser includa automaticamente pelo compilador do Java;

Uma chamada a super() pode tanto ter os argumentos que foram passados para o construtor
da superclasse como pode no conter nenhum argumento;

Um construtor sem argumentos no necessariamente o construtor padro, j que podemos
criar um construtor sem argumentos prprio;

Uma chamada ao mtodo de uma instncia ou acesso a uma varivel de instncia no pode
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 86
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
ser feita at que o construtor da superclasse tenha sido executado;

Variveis e mtodos estticos podem ser acessados, mas s podem ser utilizados como
parte da chamada a super() ou a this ();

As classes abstratas possuem construtores. Toda vez que uma subclasse concreta
instanciada, estes construtores so chamados;

Por no fazerem parte da rvore de herana de um objeto, as interfaces no possuem
construtores;

A condio para que um construtor possa ser chamado que ele esteja dentro de um outro
construtor;

Um construtor no pode ser chamado efetivamente por meio de um cdigo;

A seguir, temos as principais caractersticas de um mtodo construtor:

Possui o mesmo modificador de acesso da classe;

No possui argumentos;

Inclui uma chamada sem argumentos ao construtor da superclasse (super()).

Se tivermos o construtor de uma superclasse com argumentos, devemos fazer uma chamada
a super, junto dos argumentos apropriados. Diante de uma superclasse que no tenha um
construtor sem argumentos, devemos inserir um construtor na classe (subclasse). Isto
necessrio a fim de que tenhamos um local para que a chamada ao construtor da superclasse
(com os argumentos apropriados) seja inserida, e para que o construtor padro criado pelo
compilador do Java possa ser usado na subclasse.

Um cdigo simples, como o que segue, no pode ser compilado sem a presena de um
construtor super () sem argumentos:

class Calcado
{
Calcado (String c)
{
}
}

class Sandalia extends Calcado
{
}

Pelo fato de no serem mtodos, os construtores no podem ser herdados e nem substitudos.
O construtor padro que teremos ser, de alguma maneira, decidido pelo tipo ou tipos de
construtores contidos na superclasse.

Voltamos a lembrar que um construtor padro nunca possui argumentos.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 87
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 9

1. Introduo

A herana possibilita que as classes compartilhem seus atributos e mtodos entre si. Para
esta ligao entre as classes, a herana adota um relacionamento esquematizado
hierarquicamente.

Na herana, temos dois tipos principais de classe:

Superclasse: A classe que concede as caractersticas a uma outra classe;

Subclasse: A classe que herda as caractersticas da superdasse.

A herana atua de maneira interativa com o encapsulamento, supondo que uma certa classe
tenha alguns atributos encapsulados. Assim, uma subclasse desta classe herdar estes
atributos encapsulados, alm de outros atributos adicionais que fazem parte da
especializao da subclasse.
O conceito de subclasses herdarem atributos de classes ancestrais assegura que programas
orientados a objetos cresam de forma linear e no geometricamente em complexidade. Cada
nova subclasse no possui interaes imprevisveis em relao ao restante do cdigo do
sistema.
Com o uso da herana, um objeto pode tornar-se uma instncia especfica de um caso mais
geral. Explicando melhor, um objeto pode herdar os atributos gerais da respectiva classe
me. Ele precisa apenas definir as caractersticas que o tornam nico na classe a qual
pertence.
De maneira natural, as pessoas visualizam o mundo como sendo formado de objetos
relacionados entre si hierarquicamente. Vejamos a relao de animais, mamferos e
cachorros.
Os animais, sob uma descrio abstrata, apresentam atributos, tais como tamanho,
inteligncia e estrutura ssea, e aspectos comportamentais, como mover-se, dormir, respirar,
alimentar-se, entre outros. Os atributos e aspectos comportamentais descritos definem a
classe dos animais.
Se analisarmos os mamferos, que est dentro da classe de animais, notaremos atributos mais
particulares, como tipo de dente, plos e glndulas mamrias. Os mamferos so
classificados como uma subclasse dos animais, que por sua vez uma superclasse de
mamferos.
Pela chamada hierrquica de classes, a subclasse mamferos recebe todos os atributos de
animais, partindo do princpio que uma subclasse recebe por herana todos os atributos de
seus ancestrais.

No exemplo seguinte, temos a hierarquia de classes do cachorro:

Reino-Animal;
Filo - Cordata (co, lobo, raposa, gato, cavalo, cobra, sapo, peixe);
Classe - Mamalia (co, lobo, raposa, gato, cavalo);
Ordem - Carnvora (co, lobo, raposa, gato);
Famlia - Candea (co, lobo, raposa);
Gnero - Canis (co, lobo);
Espcie - Canis familiares (co): dlmata, pastor, doberman, etc.

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 88
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Adotemos como exemplo um co da raa dlmata, pertencente espcie "Canis familiares",
como visto no exemplo anterior. Por herana, o dlmata herda as caractersticas do gnero
Canis, que por sua vez herda as caractersticas da famlia Candea, que por sua vez herda as
caractersticas da ordem Carnvora e assim sucessivamente...

2. Criando uma herana

Adotemos como exemplo a classe Funcionrio:

class Funcionario
{
String nome, mail;
int idade ;
char sexo;

void setDados(String nome, String mail)
{
this.nome = nome;
this.mail = mail;
}
}

Ento, consideremos a criao de um cadastro de programadores de uma empresa.
Entendemos que cada programador um Funcionrio, mas nem todo Funcionrio um
programador. Esta relao nos obriga a criar uma extenso da classe Funcionario a fim de
que a mesma contenha os dados especficos referentes aos programadores. Deste modo a
extenso criada acaba herdando os membros existentes na definio da classe Funcionario.
A seguir, temos a definio da classe Programador, que, pela herana, recebe as
"caractersticas" da classe Funcionario, somadas definio de seus prprios membros:

class Programador extends Funcionario
{
String linguagem, sistOp;

void setLinguagem( String linguagem )
{
this.linguagem = linguagem ;
}
}

A classe Programador que acabamos de criar uma extenso (tambm chamada de classe
filha, derivada e subclasse) da classe Funcionario (tambm chamada de classe pai ou super
classe).
De acordo com o exemplo anterior, o extends, que define herana, faz com que a classe
Programador herde as caractersticas da classe Funcionario.

Ressaltamos que o Java no trabalha com herana mltipla, ao contrrio de algumas
linguagens.

Com a herana, podemos criar classes que herdem caractersticas de inmeras classes
dotadas de funcionalidades prprias do Java, como applets, criao de componentes grficos,
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 89
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
multiprocessadores e outras.
A seguir, temos um exemplo do uso de herana

class Funcionario
{
String nome, mail;
int idade ;
char sexo;
void setDados(String nome, String mail)
{
this.nome = nome;
this.mail = mail;
}
}

class Programador extends Funcionario
{
String linguagem, sistOp ;

void setLinguagem( String linguagem )
{
this.linguagem = linguagem ;
}
}

class Cap09_Ex1
{
public static void main(String args[])
{
Programador senior = new Programador();
senior.setLinguagem("Java") ;

senior.setDados("Rafael Scarpelli" ,
"rafael@ig.com.br");
System.out.println("Programador nome : " +
senior.nome);
System.out.println("Programador linguagem : " +
senior.linguagem) ;
System.out.println("Programador mail : " +
senior.mail);
}
}

2.1. Acesso aos membros da classe pai

Os membros privados da classe pai no podem ser referenciados na classe filha, mas
podemos contornar esta condio, como mostrado no exemplo seguinte,




PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 90
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Funcionario
{
private String nome, mail;
int idade;
char sexo;

void setDados(String nome, String mail)
{
this.nome = nome;
this.mail = mail;
}

String getNome()
{
return nome;
}

String getMail()
{
return mail;
}
}

class Programador extends Funcionario
{
String linguagem, sistOp;

void setLinguagem( String linguagem, String nome,
String mail)
{
this.linguagem = linguagem ;
setDados( nome, mail);
}
}

class Cap9_Ex2
{
public static void main(String args[])
{
Programador senior = new Programador();
senior.setLinguagem("Java!", "Carol Cury" ,
"carolcury@ig.com");
System.out.println("Programador nome : " +
senior.getNome());
System.out.println(" Programador linguagem : " +
senior.linguagem);
System.out.println(" Programador mail ; " +
senior.getMail());
}
}

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 91
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
2.2. Acesso aos Membros da classe pai com super

Qualquer referncia feita com uso do operador super, dentro de uma classe filha, ser
apontada diretamente para a classe pai.
Apesar de no ser um procedimento recomendado, podemos manter atributos de nomes
iguais nas classes pai e filha.
No exemplo que segue, temos o uso do super na classe pai.

class Pai
{
double valor = 5.714;
String conteudo = "Curso de Java";
}

class Filha extends Pai
{
double valor =8.921;
String conteudo = "Carros antigos";
void mostra()
{
System.out.println ("Filha valor : " + valor);
System.out.println ("Pai valor : " + super.valor);
System.out.println();
System.out.println ("Filha conteudo : " + conteudo);
System.out.println ("Pai conteudo ; " +
super.conteudo);
}
}

class Cap9_Ex3
{
public static void main(String args[])
{
Filha filha = new Filha();
filha.mostra();
}
}

Nota: Em Java, padro literrio que o nome da classe inicie com letra maiscula e o objeto
tenha o mesmo nome em minsculo.

2.3. A Classe pai com sobrecarga do mtodo construtor

Imaginemos uma classe cujo mtodo construtor exija que os parmetros sejam passados no
momento da instanciao da classe. Para tal classe, suponhamos a criao de uma classe
derivada. Quando formos criar alguma instncia desta classe derivada, ou filha, teremos um
problema.
Pelo fato de o mtodo construtor da classe pai exigir parmetros, estes devem ser passados
para a classe filha, que, por sua vez, os empurra de volta para a classe pai.
O mtodo construtor padro da classe pai ser automaticamente chamado no momento da
instanciao da classe filha. O fato que o construtor padro j no existe mais na classe pai,
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 92
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
o que nos obriga a chamar explicitamente o mtodo construtor da mesma, de forma a
repassar ou empurrar seus parmetros exigidos por meio da classe filha.
No exemplo a seguir, descrevemos como usar a instncia com redefinio do mtodo
construtor pai:

class Funcionario
{
String nome, mail;
int idade;
char sexo;

Funcionario (String nome, String mail)
{
this.nome = nome;
this.mail = mail;
}

String mostra()
{
return nome + " " + mail;
}
}

class Instrutor extends Funcionario
{
String disciplina ;
Instrutor (String nome, String mail)
{
super( nome, mail); //chamada ao mtodo construtor
//classe pai
}
}

O Exemplo a seguir gerar um erro de compilao:

class Cap9_Ex4
{
public static void main(String args[])
{
Instrutor informatica = new Instrutor();
// Erro!
informatica.disciplina = "Linux" ;
System.out.println("Dados : " +
informatica.mostra());
System.out.println("Disciplina : " +
informatica.disciplina );
}
}

O Exemplo a seguir mostra a forma correta de criar a instncia:

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 93
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

class Cap9_Ex5
{
public static void main(String args[])
{
Instrutor informatica = new Instrutor(
"Mariana Cury" , "maricury@ig.com.br");
informatica.disciplina = "Linux" ;
System.out.println("Dados : " +
informatica.mostra());
System.out.println("Disciplina : " +
informatica.disciplina );
}
}

3. Relacionamento baseado na herana

Na programao orientada a objetos, utilizamos o -UM: um tipo de relacionamento
baseado na herana. Este relacionamento tem esse nome pois uma forma de classificarmos
um item, por exemplo "Banana -UM fruto" ou "Cachorro -UM animal". Usamos a
palavra-chave extends para expressar o relacionamento -UM:

public class Cachorro
{
}
public class Dalmata extends Cachorro
{
// coisas importantes e especficas referentes
// a Dlmata vo aqui
// No esquecer que Dlmata herda os membros
// de Cachorro acessveis
}

No exemplo a seguir, descrevemos a ordem de como deve ser a rvore das classes:

public class Animais {...}

public dass Cachorro extends Animais {...}

public class Dalmata extends Cachorro {...}

De acordo com a terminologia utilizada pela programao orientada a objetos, correto dizer
que:

Animais a superclasse de Cachorro;
Cachorro a subclasse de Animais;
Cachorro a superclasse de Dalmata;
Dalmata a subclasse de Animais;
Cachorro herda de Animais;
Dalmata herda de Cachorro;
Dalmata herda de Animais;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 94
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Dalmata derivado de Cachorro;
Cachorro derivado de Animais;
Dalmata derivado de Animais;
Dalmata um subtipo de Cachorro;
Dalmata um subtipo de Animais.

De acordo com o conceito do -UM, "Cachorro estende Animais" quer dizer "Cachorro -
UM Animal". J "Dalmata estende Cachorro" significa "Dalmata -UM Cachorro".

Ainda, podemos dizer que "Dalmata -UM Animal", j que a classe, na rvore de herana,
poder ser considerada "um tipo do" item que estiver acima dela, mesmo que Dalmata no
estenda Animais diretamente.

4. Relacionamento baseado na utilizao

Diferentemente do -UM, baseado na herana, o relacionamento TEM-UM baseia-se na
utilizao, ou seja, ele acontece quando uma determinada classe apresenta uma referncia a
uma instncia de uma outra classe, por exemplo "Um carro TEM-UM Conjunto de Pneus".
Assim, o cdigo do exemplo em questo ficaria da seguinte maneira:

public class Veiculo
{
public class Carro extends Veiculo
{
private ConjuntoDePneus meuConjuntoDePneus;
}
}

De acordo com o cdigo que acabamos de ver, podemos constatar que a classe Carro possui
uma varivel de instncia do tipo ConjuntoDePneus. Conseqentemente, podemos afirmar
que "Carro TEM-UM ConjuntoDePneus", ou que Carro possui uma referncia a
ConjuntoDePneus.

Na prtica, por meio da referncia a ConjuntoDePneus, o cdigo de Carro pode solicitar
mtodos e usar o comportamento da classe ConjuntoDePneus sem a necessidade da
existncia de um cdigo que esteja relacionado mesma dentro da prpria classe Carro.

Uma vantagem no uso de relacionamentos TEM-UM que podemos projetar classes
utilizando as tcnicas de programao orientada a objetos sem o uso de classes monolticas
que realizam diversos tipos de tarefas.

No uso de TEM-UM, recomendvel especializar ao mximo as classes, j que, quanto
mais especializadas estas forem, maiores sero as chances das mesmas serem reaproveitadas
por outros aplicativos. Na especializao, o cdigo de ConjuntoDePneus mantido em uma
classe reservada e especializada.
Se inserirmos todos os cdigos ligados classe ConjuntoDePneus dentro da classe Carro,
o cdigo ConjuntoDePneus ser duplicado por todas as outras classes que podem fazer uso
do seu comportamento..
A classe Carro contm uma referncia classe ConjuntoDePneus pelo fato da primeira
declarar uma varivel de instncia do tipo ConjuntoDePneus. Toda vez que o cdigo
chamar rodar() em uma instncia de Carro, esta ir chamar o mtodo na varivel de
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 95
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
instncia ConjuntoDePneus do objeto Carro.
Como Carro contm uma referncia a ConjuntoDePneus, os cdigos que chamarem
mtodos de Carro entendero como se esta classe tivesse o comportamento de
ConjuntoDePneus, mas o que acontece, na verdade, que o objeto Carro delegar a tarefa
de chamada do mtodo rodar() para a classe ConjuntoDePneus, por meio de
meuConjuntoDePneus.rodar(). A seguir, temos a descrio de como ficaria esta delegao:

public class Carro extends Veiculo
{
private ConjuntoDePneus meuConjuntoDePneus;

public void rodar ()
{
meuConjuntoDePneus.rodar() ; // Delega o
// comportamento de rodar para o
// objeto ConjuntoDePneus
}
}

public class ConjuntoDePneus
{
public void rodar()
{
// Realiza a tarefa atual de rodar aqui
}
}

Pela programao orientada a objetos, a classe Carro ir ocultar os detalhes da
implementao, j que no inteno informar aos cdigos chamadores qual classe ou
objeto ir realizar a tarefa solicitada por eles. Para estes cdigos, a impresso de que
qualquer tarefa feita pelo objeto Carro.




















PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 96
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

Captulo 10

1. Introduo

Definimos polimorfismo como sendo um princpio a partir do qual as classes que derivam de
uma nica superdasse so capazes de invocar os mtodos que, embora apresentem a mesma
assinatura, comportam-se de forma especfica para cada uma das classes derivadas. A fim de
se comportar de acordo com cada classe derivada, os mtodos utilizam uma referncia a um
objeto que representa o tipo da superclasse.
O mecanismo de redefinio de mtodos utilizado para que todos os mtodos tenham a
mesma assinatura, o que se faz necessrio no polimorfismo. Contudo, vale destacar que, ao
utilizarmos o polimorfismo, o comportamento dos mtodos somente ser estabelecido em
tempo de execuo.

Nota: Por meio do mecanismo de ligao tardia (late binding), seleciona-se o mtodo que
ser utilizado, de acordo com o tipo da classe derivada. Essa seleo realizada em tempo de
execuo.

O mecanismo em questo capaz de simplificar no somente a compreenso, mas tambm o
desenvolvimento do cdigo orientado a objetos. Apesar disso, h algumas circunstncias nas
quais possvel que o resultado da execuo seja no-intuitivo.

2. Run-time binding

O mecanismo de ligao tardia, tambm conhecido como dynamic binding ou run-time
binding, deve ser suportado por uma linguagem de programao orientada a objetos a fim de
que o polimorfismo possa ser utilizado. O conceito de ligao tardia indica que, somente no
decorrer da execuo do programa, o mtodo que ser invocado definido.
Quando trabalhamos com a linguagem de programao Java, a definio dos mtodos que
sero executados sempre ocorre por meio da ligao tardia, exceto em duas situaes.
Observemos, a seguir, quais so essas situaes:

Mtodos declarados como final
A redefinio deste tipo de mtodo no possvel. Sendo assim, seus descendentes so
incapazes de invoc-io de maneira polimrfica.

Mtodos declarados como private
Este tipo de mtodo tambm no pode ser redefinido devido ao fato de, implicitamente, ele
ser final.

Destacamos, tambm, o mecanismo de ligao prematura (early binding), que utilizado nas
situaes em que se define o mtodo que ser invocado no decorrer do processo de
compilao do programa.

3. O uso do polimorfismo

Polimorfismo um termo que caracteriza vrias formas. Estudaremos, neste momento, o uso
do polimorfismo por meio de mtodos declarados na classe pai, tambm chamada de
superclasse, e redefinidos na classe filha. Os mtodos redefinidos devem ter a mesma
assinatura do mtodo presente na classe pai, pois, caso contrrio, haver uma sobrecarga.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 97
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Embora seja um pouco estranho redefinir um mtodo existente em outra classe e, ainda, com
a mesma assinatura, isso pode ser essencial em classes que herdam o comportamento de
outras. Caso o mtodo seja redefinido na classe filha, uma chamada a esse mtodo o
executar. Se no houver essa chamada, o mtodo da classe pai ser executado.
Um dos exemplos mais claros do uso de polimorfismo a criao de uma classe derivada de
frame, cuja finalidade a construo de uma janela. A classe pai contm todos os mtodos
para a construo dessa janela, mas as informaes adicionais necessrias para que o objeto
tenha vida para complementar a Janela so de responsabilidade da classe filha, a qual utiliza
para isso a implementao de um mtodo especfico.
A seguir, teremos dois exemplos que demonstram o uso do polimorfismo:

class X
{
void messag()
{
System.out.println("mtodo messag da classe X");
}
}

class Y extends X
{
void messag()
{
System.out.println("mtodo messag da classe Y");
}
}

class Cap10_Ex1
{
static public void main(String args[])
{
X g = new X(); // g est referenciando objeto da
// classe base
g.messag(); // aqui ser executado o mtodo
//messag da classe base

Y f = new Y();
g = f; // g passa a refenciar objeto da
// classe derivada
g.messag(); // aqui ser executado o mtodo
// messag da classe derivada

X x1 = new Y(); // criao objeto X, mas apontando
// para mtodo Y
x1.messag(); // observe qual mtodo ser chamado
}
}




PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 98
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio

class Desenho
{
void imprime()
{
System.out.println(figura no especificada);
}
}

class Quadrado extends Desenho
{
void imprime()
{
System.out.println("imprimindo quadrado");
}
}

class Triangulo extends Desenho
{
void imprime()
{
System.out.println("imprimindo tringulo");
}
}

class Cap10_Ex2
{
static public void main(String args[])
{
Desenho AR[] = new Desenho[6];
AR[0] = new Desenho();
AR[1] = new Triangulo();
AR[2] = new Quadrado();
AR[3] = new Quadrado();
AR[4] = new Triangulo();
AR[5] = new Triangulo();
for(int i = 0; i < 6; i++ )
AR[i].imprime();
}
}











PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 99
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 11

1. Introduo

Em Java, os arrays so definidos como objetos que contm diversos valores de um mesmo
tipo. Esses valores, os quais so os elementos desse array, so identificados ou referenciados
por um ndice. Tal ndice um valor inteiro que determina a posio desses elementos dentro
de um array.

2. Construo de arrays

Para que um array seja construdo, preciso primeiramente criar uma instncia utilizando o
operador new. como na sintaxe descrita a seguir:

< tipo > < identificador > [ ] = new < tipo > [ n ocorrncias ]

A seguir, veremos um exemplo de como declarar um array cujo tipo String, cujo
identificador nome, e com uma quantidade de 15 ocorrncias, ou seja, de 15 nomes
distintos.
Vejamos:

String nome [ ] = new String [15]

Ainda, podemos declarar um array cujo tipo int, cujo identificador nota, e com uma
quantidade de 400 ocorrncias, ou seja, 400 notas distintas. Isso realizado da seguinte
forma;

int notas [ ] = new int [400]

2.1. Acesso aos elementos do vetor

Para que possamos fazer uma referncia a um vetor criado, faz-se necessrio determinar o
ndice em que desejamos realizar uma certa operao. A referncia a um vetor pode ser feita
tanto para incluirmos valores quanto para realizarmos uma outra operao.
Observemos os exemplos descritos a seguir para que possamos compreender essa referncia:

class Cap11_Ex1
{
public static void main(String[] args)
{
String vogais[ ];
vogais = new String[4];
vogais[0] = "a"; //primeira posio (ndice)
// vlida para vetor
vogais[1] = "e";
vogais[2] = "i";
vogais[3] = "o"; // ltima posio (ndice)
//vlida para vetor (n-1)
vogais[4] = "u"; // erro - posio invlida
System.out.println(vogais[0] + vogais[1] + vogais[2]
+ vogais[3]);
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 100
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}
}

No exemplo que ser descrito a seguir, teremos uma demonstrao do como utilizar arrays.
Vejamos:

class Cap11_Ex2
{
public static void main(String args[])
{
String curso[ ];
curso = new String[4];
curso[0] = "Java";
curso[1] = "Linux";
curso[2] = "XML";
curso[3] = curso[0] + curso[1] + curso[2];
System.out.println(curso[3]);
}
}

No exemplo que ser descrito a seguir, demonstraremos a utilizao de arrays com lao para
que todos os seus valores sejam inicializados/lidos.
Vejamos:

class Cap11_Ex3
{
public static void main(String[] args)
{
int arrayNumeros[ ]; //declara arrayNumeros tipo int
arrayNumeros = new int[10]; //faz uma instncia
// preenche array com um valor e
//depois o imprime na tela
for (int i = 0; i < arrayNumeros.length; i++)
{
arrayNumeros[i] = i;
System.out.print(arrayNumeros[i] + " ");
}
System.out.println();
}
}

2.1.1. Acesso aos elementos do vetor atravs do for aprimorado

A estrutura for aprimorada, disponibilizada a partir da verso 5.0 do Java, no requer a
utilizao de contadores para acessar os elementos de um vetor, ao contrrio da estrutura for
tradicional utilizada em verses anteriores do Java, a qual requer o contador para acessar tais
elementos.

Devemos ter em mente que a estrutura for aprimorada no deve ser utilizada para realizar
alteraes sobre os elementos do vetor. Sua funo apenas permitir o acesso aos elementos
do vetor sem a utilizao de contadores, sendo que tal alterao deve ser feita com o for
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 101
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
tradicional.
Em uma estrutura for aprimorada, o parmetro composto por um tipo e um identificador do
vetor cujos elementos sero percorridos. Os tipos de parmetros so baseados nos tipos de
elementos contidos no vetor.
Para compreendermos como funciona uma estrutura for aprimorada, vejamos a sintaxe e o
exemplo a seguir:


for (parmetro: nomeVetor)
comandos;

Exemplo:

class ForAprimorado
{
public static void main(String args[])
{
int valor[], resultadoSoma;
resultadoSoma = 0 ;
valor = new int [5] ;
valor[0] = 5;
valor[1] = 10;
valor[2] = 15;
valor[3] = 20;
valor[4] = 25;
//Utilizando o a estrutura for aprimorada

for (int contador: valor)
{
resultadoSoma += contador;
}

System.out.println("O resultado da soma dos " +
"nmeros : +
resultadoSoma);
}
}

2.2. Array com vrias dimenses

O exemplo descrito a seguir demonstra os processos de declarao e de instanciao de um
array, de acordo com a seguinte situao: cadastraremos uma sequncia de 400 notas dos
alunos de uma determinada escola. Para cada aluno, temos 3 notas distintas, sendo que a
primeira refere-se matria Portugus, a segunda Matemtica e a terceira Histria.
Observemos a seguir:

double nota [ ] [ ] = new double [400][3]; // 400 igual quantidade de alunos
// 3 igual quantidade de notas
nota[0][0] = 7.5; // primeira dimenso(0) / ndice(0) vlidos
nota[0][1] = 2.3;
nota[0][2] = 6.0;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 102
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
nota[1][0] = 5.4;
nota[1][1] = 9.0;
nota[1][2] = 2.1;
.
.
.
nota[399][2] = ... // ltima dimenso(399)/ ndice(2) vlidos

Os vetores tambm podem ter vrias dimenses.
O exemplo descrito a seguir demonstrar isso:

class Cap11_Ex4
{
static public void main(String args[ ])
{
int A[ ][ ] = new int[3][2];
int i,j;
A[0][0] = 10;
A[0][1] = 33;
A[1][0] = 550;
A[1][1] = 110;
A[2][0] = 16;
A[2][1] = 99;

i = 1;
j = 0;

System.out.println("A[" + i + "][" + j + "] = " +
A[i][j]);
}
}

2.3. Passando um array como parmetro

Um array pode ser passado e recebido como parmetro. importante destacar que quaisquer
alteraes realizadas nos valores do mtodo que receber um array como parmetro sero
refletidas no array original. Isso significa que, assim como os tipos construdos, os arrays so
passados como referncia.
Observemos o exemplo a seguir, em que o vetor das funes passado e retornado:

class Cap11_Ex5
{
static public void main(String args[ ])
{
int A[ ]= new int[3];
int B[ ]= new int[3];
int i;
A[0] = 10;
A[1] = 20; // possvel substituir essas trs linhas
A[2] = 30; // por int A[ ]={10,20,30}

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 103
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
B = fv(A);
for( i = 0; i < 3; i++)
System.out.println("B["+ i+ "]= "+ B[i]);
}

static int[ ] fv(int x[ ])
{
int i;
for( i =0; i<3; i++)
x[i]= 2 * x[i];
return x;
}
}

2.4. Criando array com tipos construdos

Os arrays no apenas so criados com tipos bsicos, mas tambm com tipos construdos,
assim como demonstra o exemplo descrito a seguir:

class Pessoa
{
double altura, peso ;
}

class Cadastro
{
public static void main(String args[])
{
Pessoa nomes[] = new Pessoa[2]; // declara nomes =
//tipo Pessoa
nomes[0] = new Pessoa(); // cria instncia para
// ocorrncia 0
nomes[0].altura = 1.68;
nomes[0].peso = 55;
nomes[1] = new Pessoa(); // cria instncia para
//ocorrncia 1
nomes[1].altura = 1.77;
nomes[1].peso = 60;
}
}











PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 104
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Exerccios de Fixao:

1 Usando o conceito de array com vrias dimenses, desenvolver a classe Notas para
cadastrar as notas de 3 matrias para 5 alunos de determinado curso. O resultado esperado de
ser igual ao da figura a seguir:

aluno 0 nota 0 7.5
aluno 0 nota 1 10.0
aluno 0 nota 2 8.0
aluno 1 nota 0 5.0
aluno 1 nota 1 7.8
aluno 1 nota 2 9.0
aluno 2 nota 0 10.0
aluno 2 nota 1 9.5
aluno 2 nota 2 8.0
aluno 3 nota 0 3.0
aluno 3 nota 1 4.5
aluno 3 nota 2 6.0
aluno 4 nota 0 10.0
aluno 4 nota 1 8.8
aluno 4 nota 2 6.6

2 O cdigo a seguir contm erros que precisam ser identificados e corrigidos. Identificar os
mesmos e corrig-los.

Class Bola
{
double raio;
String tipo;
}

class Ex2_Cap11
{
public static void main(String args[])
{
Bola bolas[] = new Bola[1];
bolas[0].tipo = futebol;
bolas[0].raio = 7.5;
bolas[1].tipo = ping-pong;
bolas[1].raio = 1.5;

System.out.println(bolas[0].tipo);
System.out.println(bolas[0].raio);
System.out.println();
System.out.println(bolas[1].tipo);
System.out.println(bolas[1].raio);
}
}



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 105
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 12

1. Introduo

As classes ajudam a definir um objeto e seu comportamento e as interfaces que auxiliam na
definio dessas classes. As interfaces so formadas pela declarao de um ou mais mtodos,
os quais obrigatoriamente no possuem corpo.
As operaes especficas para cada um desses mtodos so realizadas pela classe que
implementa a interface. De um modo geral, dizemos que as interfaces definem certas
funcionalidades, as quais dependem das classes que implementam as interfaces para que os
mtodos existam.
Em uma mesma classe, podem ser implementadas uma ou mais interfaces, sendo que elas
devem estar separadas por vrgulas. Se uma classe implementa uma determinada interface,
todos os mtodos declarados nessa interface implementada devem ser definidos na respectiva
classe. Caso isso no ocorra, ser gerado um erro de compilao.

Nota: Um objeto de um tipo definido por uma interface no pode ser instanciado.

Os membros declarados em uma interface so implicitamente pblicos. Sendo assim, as
classes nas quais esses mtodos so definidos tambm devem ser pblicas. Com relao s
variveis, elas podem ser declaradas em interfaces, porm, so obrigatoriamente assumidas
como pblicas, estticas ou finais.
Como exemplo da utilizao de interfaces, podemos citar quando trabalhamos com
componentes grficos na tela do computador, em que utilizamos botes, janelas e outros
tens. Neste caso, temos vrias interfaces com diversos mtodos para o tratamento dos
eventos que podem ocorrer nesses componentes.
Dentre esses eventos, podemos ter os seguintes: fechar a janela, abrir a janela, clicar sobre
um boto, etc. Os mtodos que capturam esses eventos esto definidos em interfaces
especficas, mas a ao a ser executada quando um desses eventos ocorrer de
responsabilidade da classe que implementou a interface. por isso que os mtodos
declarados na interface no possuem corpo.
Um tem importante que devemos ressaltar que no precisamos nos preocupar com o modo
como esses eventos so capturados pela interface.
Vejamos, ento, um exemplo que nos mostra a utilizao da interface:

interface Produto
{
static final String FABRICANTE =
"Saturno Inter-Planetrio";
static final String FONE = "11 5555-5563";
public int getPreco(int id);
}

class Brinquedo implements Produto
{
public int getPreco(int id)
{
if (id == 1)
return(5);
else
return(10);
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 106
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}
}


class Aparelho implements Produto
{
public int getPreco(int id)
{
if ( id == 1 )
return(25);
else
return(30);
}
}

class ExemploInterface
{
static Brinquedo carrinho;
static Aparelho radio;
public static void main(String args[])
{
inicio();
compraInfo(carrinho, 1);
compraInfo(radio,2);
}

public static void inicio()
{
carrinho = new Brinquedo();
radio = new Aparelho();
}

public static void compraInfo(Produto item, int tipo)
{
System.out.println();
System.out.println(" Pedidos de Compra atravs de: "
+item. FABRICANTE +
"\nFone: + item.FONE);

System.out.println("\nEste item custa: " +
item.getPreco(tipo));
}
}

2. Varivel de referncia

As variveis de referncia a objetos podem ser criadas utilizando-se como tipo uma
interface. Quando criamos uma varivel dessa maneira, podemos armazenar nela uma
instncia de qualquer classe que implemente a interface.
Quando utilizamos uma referncia do tipo de uma interface para chamarmos um mtodo,
ser tomada como base a instncia da interface que est sendo referenciada para que a verso
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 107
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
correia do mtodo seja chamada. A partir disso, podemos perceber que o mtodo a ser
executado resolvido no tempo de execuo, de forma dinmica.
Ento, aps criarmos o cdigo que chama os mtodos de uma classe, podemos criar a classe.
Essa tarefa pode ser realizada pela interface, a partir de um mtodo chamado pelo cdigo,
que praticamente o mesmo que chamar um mtodo de uma subclasse por meio de uma
referncia superclasse.

Devemos ressaltar que essa prtica pode fazer com que a performance dos programas sofra
um impacto considervel, isso porque a resoluo dinmica dos mtodos pode ser lenta.
Devido ao impacto gerado, recomendamos que essa prtica seja adotada apenas em casos
nos quais ela fundamental.
Destacamos, inclusive, que apenas os mtodos que so declarados na interface so de
conhecimento da varivel de referncia interface.

3. Variveis inicializadas

Em uma interface, podem existir variveis inicializadas que funcionam como constantes,
mas no podem existir variveis de instncia. A partir disso, as classes que implementam a
interface em questo compartilham as variveis que funcionam como constantes.
Na linguagem Java, podemos definir uma interface apenas com as constantes, sem
utilizarmos os mtodos. Nesse caso, a classe somente importa as constantes, ou seja, ela no
implementa coisa alguma. So essas constantes importadas pela classe que fazem o papel de
variveis finais.

Exerccios de Fixao:

1 Desenvolver a interface Treinamento com as seguintes caractersticas:

varivel ESCOLA recebendo o valor "Escola Privada que Cobra";
varivel FONE recebendo o valor "11 5555-6565";
um mtodo que retorne o preo do treinamento de acordo com seu mdulo.

2 Desenvolver duas classes, Office e DesenvolvimentoWeb, ambas implementando a
interface Treinamento.

O mtodo a ser definido nestas classes dever retornar o preo do treinamento de acordo com
a seguinte condio:

na classe Office, se o mdulo for igual a 1, retornar o valor 500, caso contrrio, retornar o
valor 800;
na classe DesenvolvimentoWeb, se o mdulo for igual a 1, retornar o valor 700, caso
contrrio, retornar o valor 1000.

3 Desenvolver a classe Cap12_Fixacao, que dever:

instanciar dois objetos: Excel (objeto da classe Office) e Flash (objeto da classe Desen-
volvimentoWeb);
conter o mtodo treinaInfo, que dever receber o nome do treinamento e o mdulo para que
possa retornar os itens ESCOLA, FONE e get.PREO.


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 108
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 13

1. Introduo

Os pacotes so utilizados em Java nas situaes em que h necessidade de reutilizar as
classes que foram escritas ou definidas em pacotes distintos. Dessa forma, caso tenhamos a
necessidade de utilizar recursos de outras classes, estas no precisam ser novamente
construdas, mas apenas importadas para dentro dos programas.
comum, durante a construo ou o desenvolvimento de sistemas, precisarmos criar
diretrios especficos para cada uma das aplicaes a serem desenvolvidas e, dentro desses
diretrios, construirmos as classes ou os programas desejados.
Quando criamos e compilamos classes, preciso especificar um pacote para as mesmas,
pois, caso contrrio, elas assumiro por padro um pacote default sem nome, embora isso
no seja explcito.
Para fazermos qualquer referncia s classes presentes em um mesmo diretrio,
desnecessrio que elas sejam importadas para dentro do programa, uma vez que se
encontram no mesmo diretrio ou no pacote default.
Ao criarmos uma classe e especificarmos que ela pertence a um determinado pacote,
poderemos reutiliz-la em outros programas que no estejam rodando no mesmo diretrio
em que a classe foi definida. Sendo assim, os pacotes esto diretamente relacionados aos
diretrios em que as classes foram criadas e sua possvel reutilizao em classes de outros
pacotes. Vale destacar que podemos disponibilizar classes para que estas tambm sejam
referenciadas na Internet.

Nota: Os nomes que so atribudos tanto aos pacotes quanto aos sub-pacotes de classes em
Java, normalmente, so escritos em caixa baixa, tais como java.lang.

2. Package

A criao de um pacote em Java um procedimento simples, j que basta apenas determinar
o pacote ao qual a classe definida pertencer. Neste caso, a especificao do pacote deve
ocorrer no incio da definio da classe. Para isso, utilizamos o comando package.
Observemos no exemplo a seguir como utilizar esse comando:

package grafico;

public class Circulo
{
public void mostra()
{
System.out.println(" Mtodo executado da classe " +
"Circulo do pacote grfico");
}
}

No exemplo que acaba de ser descrito, utilizamos public para o membro de uma classe. Ao
fazer isso, determinamos que esse membro poder ser referenciado por outras classes que
no estejam no mesmo pacote.



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 109
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
A fim de que o programa criado seja compilado, basta utilizar a seguinte linha de comando:

javac -d . Circulo.java OBS: Executar via console

3. Import

Aps gerar o pacote, podemos fazer uma referncia classe Circulo. Para que possamos
referenci-la fora de seu pacote (grafico), preciso importar essa classe para dentro do
programa.
Observemos no exemplo a seguir como realizar essa importao:

import grafico.Circulo;

class Cap13_Ex1
{
public static void main(String arg[])
{
Circulo c = new Circulo();
c.mostra();
}
}

Depois de realizada a compilao desse programa, ser possvel observar que no foi
necessrio o arquivo Circulo.class estar no mesmo diretrio para que a compilao fosse
efetuada normalmente.

Grande parte dos programas importar pacotes que j vm prontos da linguagem Java. Ao
importarmos apenas parte do pacote ou o pacote como um todo para dentro de uma classe,
possibilitamos a utilizao das caractersticas daquele pacote especfico, como a construo
de grficos, a conexo entre micros, entre outros.

Ainda, destacamos que possvel utilizar os pacotes de forma mais complexa, dependendo
da situao real na qual estivermos desenvolvendo um projeto ou um sistema.

Exerccios de Fixao:

1 Utilizando os comandos package e import

a. Desenvolver a classe Caneta, que deve criar o pacote estoque (usar o comando package);

b. Desenvolver a classe Cap13_Fixacao, que deve instanciar um objeto da classe Caneta
(usar o comando import);

Nota: Lembre-se de que a compilao deve ocorrer atravs da linha de comando.







PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 110
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 14

1. Introduo

Neste captulo, abordaremos os conceitos relacionados a trs classes distintas, as quais se
encontram no pacote java.lang.
Vejamos, a seguir, quais so essas classes:

String;

Math;

Wrapper.

2. Classe String

Antes de definirmos uma classe String, necessrio termos em mente algumas informaes
importantes a respeito da mesma. Grande parte das linguagens de programao com as quais
contamos tem a manipulao dos strings de caracteres como um de seus aspectos essenciais.
Mais especificamente, na linguagem Java, cada um dos caracteres de uma string um
caractere Unicode de 16 bits. Para compreendermos melhor este aspecto, destacamos que o
Unicode um padro capaz de representar os caracteres de vrias linguagens de forma
unificada. Esse padro internacional diferente do padro ASCII na medida em que seus
caracteres so codificados em 2 bytes, e no em 1 byte. Sendo assim, o Unicode capaz de
representar uma quantidade consideravelmente maior de caracteres.
Tendo em vista que na linguagem de programao Java as strings so objetos, com a
palavra-chave new podemos criar a instncia de uma String, assim como ocorre com
quaisquer outros objetos, da seguinte maneira:

String j = new String ();

Por meio da linha de cdigo descrita a seguir, um novo objeto da classe String ser criado,
bem como ser atribuda a ele uma varivel de referncia, que, neste caso, j. Observemos: j
= "joao";

Contudo, como a classe String possui diversos construtores, podemos utilizar outro tipo de
atalho, tais como:
String j = new String ("joao);
String j = "joao";

As opes que acabam de ser descritas realizam as seguintes tarefas:

Criam um novo objeto String;
Atribuem a esse objeto o valor "joao";
Atribuem esse valor varivel de referncia j.

Alm dessas tarefas, tambm podemos criar uma segunda referncia ao mesmo objeto e
fazermos com que a varivel de referncia j aponte para essa referncia. Vejamos, a seguir,
como podemos fazer isso:

String j2 = j; //j2 referencia a mesma String que j
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 111
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
2.1. Inalterabilidade

O objeto String apresenta como uma de suas caractersticas a inalterabilidade, pois, uma vez
atribudo um valor a ele, este no mais poder sofrer alteraes. Porm, embora no seja
possvel alterar o objeto String, sua varivel de referncia pode ser alterada sem problemas.

Observemos o exemplo descrito a seguir:

j = j.concat("cliente especial"); // o mtodo concat() inclui um valor literal ao final

Neste exemplo, o valor da String j, que "joao", teve "cliente especial"
adicionado ao seu final. Dessa forma, o valor resultou em "joao cliente especial". Porm,
como no possvel alterar uma String, conseqentemente a Virtual Machine no capaz de
inserir uma nova String quela referenciada por j. Sendo assim, um novo objeto String, cujo
valor "joao cliente especial", foi criado e, ento, referenciado por j.

Temos, portanto, trs objetos String: o primeiro com valor "joao"; o segundo com valor
"joao cliente especial" e o terceiro, que na verdade um argumento literal que foi
concatenado, tambm um objeto String ("cliente especial"), embora apenas "joao" e
"joao cliente especial" sejam referenciados por j2 e por j, respectivamente.

Vale ressaltar que, caso anteriormente ao chamado de j = j.concat("cliente especial") no
fosse criada uma segunda varivel de referncia para "joao", esta seria considerada como
perdida, uma vez que no haveria um cdigo do programa que fosse capaz de referenci-la.
Devemos lembrar que por ser inaltervel, a String original "joao" no foi modificada, o que
sofreu alteraes foi somente a varivel de referncia j a fim de que pudesse referenciar
outra String.
O exemplo descrito a seguir demonstra claramente os detalhes expostos :

String j = "joao"; // cria um novo objeto String com o valor "joao",
// j referencia o objeto
String j2 = j; // cria uma segunda varivel de referncia que referencia a
// mesma String
j = j.concat (" cliente especial"); // cria um novo objeto String com valor
// "joao cliente especial", o j referencia esse objeto
// altera a referncia de j da String antiga para a nova String
// lembre-se que j2 ainda faz referncia String original
"joao".

class Cap14_Ex1
{
public static void main(String args[])
{
String a = "Aluno";
a.concat (" Mdulo Avanado");
System.out.println("a = " + a); // o resultado
a = Aluno
}
}

Vejamos uma explicao a respeito de cada linha desse ltimo exemplo:
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 112
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Na primeira linha, temos a criao de um objeto String, cujo valor Aluno e que est
sendo referenciado por a;

Na segunda linha, um outro objeto String criado pela Vitual Machine. O valor desse
objeto "Aluno Mdulo Avanado", porm, nada o referencia. Sendo assim, esse Segundo
objeto perdido de forma imediata;

Ento, a continua a referenciar o primeiro objeto String criado, cujo valor Aluno.
Continuemos a explicao aps observar o exemplo a seguir:

class Cap14_Ex2
{
public static void main(String args[])
{
String a = "Aluno";
a.concat (" Modulo Avanado");
// o resultado a = Aluno
System.out.println("a = " + a);
// o resultado ainda a = Aluno
a.toUpperCase();
System.out.println("a = " + a);
// o resultado ainda a = Aluno
a.replace(A,e');
System.out.println("a = " + a);
// o resultado ainda a = Aluno
}
}

No exemplo que acaba de ser descrito, inicialmente criamos um novo objeto String cujo
valor ALUNO, porm, em seguida ele foi perdido. Apesar disso, a String "Aluno"
original continua sem alteraes, bem como a ainda a referencia. Na sequncia, um novo
objeto String, cujo valor "eLUNO", foi criado pela VM. Esse objeto, contudo, tambm
perdido. Dessa forma, o objeto String original, cujo valor "Aluno", permanece sem
alteraes, e a continua referenciando-o.

Embora tenhamos chamado diversos mtodos com a finalidade de criar uma nova String
para alterar a j existente, esta permaneceu sem alteraes devido ao fato de no atribuirmos
uma varivel de referncia nova String. O exemplo a seguir demonstra como solucionar
esse problema:

class Cap14_Ex3
{
public static void main(String args[])
{
String a= "Aluno";
a = a.concat (" Modulo Avanado");
// a est sendo atribudo nova String
System.out.println("a = " + a);
// o resultado a = Aluno Modulo Avanado
}
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 113
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Este exemplo demonstra que, no momento da execuo de sua segunda linha, ser criado o
objeto String "Aluno Modulo Avanado", o qual ser referenciado por a. Vale destacar
que o objeto original "Aluno" perdido quando no est sendo referenciado. Isso ocorre nas
situaes em que temos dois objetos String e uma nica varivel de referncia.

class Cap14_Ex4
{
public static void main(String args[])
{
String a = "Aluno";
System.out.println("a = " + a);
a = a.concat (" Modulo Avanado");
System.out.println("a = " + a);
a = a.toUpperCase();
System.out.println("a = " + a);
a = a.replace('A','e');
System.out.println("a = " + a);
}
}

Antes de finalizarmos, consideremos o exemplo a seguir:

class Cap14_Ex5
{
public static void main(String args[])
{
String m1 = "passa para ";
String m2 = m1 + "comeo ";
m1.concat("volta ");
m2.concat(m1);
m1 += "fim ";
System.out.println(m1 + " " + m2);
}
}

Este exemplo tem como resultado "passa para fim passa para comeo", e as variveis de
referncia presentes nele so m1 e m2. Quanto aos objetos String criados, estes foram os
seguintes:

"passa para ";
"comeo", sendo que este foi perdido;
"passa para comeo";
"volta", sendo que este foi perdido;
"passa para volta", sendo que este foi perdido;
"passa para comeo passa para volta", sendo que este foi perdido;
"fim", sendo que este tambm foi perdido;

No total, foram criados oito objetos String, mas seis foram perdidos, restando apenas dois
("passa para fim" e "passa para comeo").


PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 114
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Ainda, para que possamos compreender a inalterabilidade de forma adequada, destacamos a
manipulao dos objetos de string na memria. Dessa forma, tendo em vista que as
linguagens de programao buscam utilizar a memria de maneira eficiente, a Java Virtual
Machine mantm uma rea reservada chamada de pool constante de strings, uma vez que
determinadas strings literais tomam um grande espao na memria e, inclusive, podem ser
redundantes dentro de um programa.
O pool constante de strings um local verificado pelo compilador assim que este encontra
uma string literal. Essa verificao ocorre com a finalidade de identificar se h uma string
literal igual encontrada, pois, caso haja essa coincidncia, no ser criado qualquer novo
objeto String, e ser direcionada uma referncia ao novo valor literal para a String j
existente.

A inalterabilidade dos objetos String uma caracterstica importante na medida em que,
caso uma grande quantidade de variveis de referncia apontem para uma nica String sem
ter conscincia a respeito disso, a possvel alterao do valor dessa String no seria uma boa
prtica. preciso destacar, tambm, que uma classe String marcada como final para que
os mtodos do objeto String no sejam modificados de forma alguma, assegurando, assim,
sua inalterabilidade.

2.2. Alguns mtodos da classe String

Os mtodos que sero descritos a seguir esto relacionados classe String. Vejamos
detalhes a respeito de cada um deles:

.charAt(Numero_do_lndice)
Este mtodo tem a funo de retornar o caractere que se encontra no ndice determinado da
ciasse String, o qual se inicia em zero. Observemos os exemplos para uma melhor
compreenso:

class Cap14_Ex6
{
public static void main(String args[])
{
String x = "estudo";
System.out.println(x.charAt (2));
}
}

O exemplo acima retornar: a letra t

.concat(Texto_A_Ser_Concatenado)
Este mtodo tem a funo de retornar um objeto String. Esse objeto retornado com o valor
da string que foi passada para ele acrescido ao final da string que foi utilizada a fim de
chamar esse objeto.
Vejamos, a seguir, exemplos de utilizao desse mtodo:






PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 115
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap14_Ex7
{
public static void main(String args[])
{
String x = "estudando";
System.out.println(x.concat(" Java"));
}
}

Com as mesmas funes do mtodo concat(), tambm contamos com os operadores de
sobreposio, que so: + e +=. A seguir, teremos um exemplo da utilizao desses
operadores:

class Cap14_Ex8
{
public static void main(String args[])
{
String A = "Cliente";
System.out.println(A + " especial");
String B = "Pessoa";
B += " Jurdica";
System.out.println (B);
}
}

Podemos observar no exemplo que acaba de ser descrito que o valor atribudo a B foi
alterado de fato. Devido ao += ser um operador de atribuio, na linha de cdigo B +=
"J urdica"; temos a criao de um novo objeto String e a sua atribuio varivel B. Dessa
forma, aps a execuo desta linha, a string que a varivel B estava referenciando
originalmente abandonada, neste caso "Pessoa", resultando agora em "Pessoa Jurdica".

.equalslgnoreCase(Argumento)
A funo deste mtodo retornar um valor booleano baseado em uma comparao entre o
valor referente String do argumento e o valor utilizado com a finalidade de chamar o
mtodo.

Tendo em vista que os valores booleanos so true ou false, o mtodo retornar true se
houver coincidncia entre os valores comparados. Vale destacar que o valor retornado pelo
mtodo ser true at mesmo nas situaes em que os caracteres dos objetos String que
estiverem sob comparao apresentarem-se de forma distinta com relao s letras
maisculas ou minsculas.
Vejamos o exemplo a seguir:

class Cap14_Ex9
{
public static void main(String args[])
{
String x = "Ligado";
System.out.println(x.equalsIgnoreCase ("ligado"));
}
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 116
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
O exemplo acima retomar: true

.length()
A funo deste mtodo retornar o tamanho apresentado pela String utilizada com a
finalidade de chamar o mtodo, como no exemplo descrito a seguir:

class Cap14_Ex10
{
public static void main(String args[])
{
String x= "Ligado";
System.out.println(x.length());
}
}

O exemplo acima retornar: 6

importante destacar que h um atributo dos arrays que possui o mesmo nome deste
mtodo, ou seja, chamado de length. Erros de compilao sero gerados caso tentemos
utilizar o mtodo length() em um array ou, ainda, o atributo length em um objeto String.

.replace(Caractere_Antigo, Caractere_Novo)
A funo deste mtodo retornar um objeto String que apresenta como valor a String
utilizada com a finalidade de chamar o mtodo. Esse valor, contudo, atualizado de forma
que as ocorrncias do tipo char referentes ao primeiro argumento sejam substitudas por
ocorrncias do tipo char referentes ao segundo argumento.
Observemos o exemplo a seguir:

class Cap14_Ex11
{
public static void main(String args[])
{
String x = "Pressuposto";
System.out.println (x.replace ('s','S'));
}
}

O exemplo acima retomar: PreSSupoSto

,substring(Posio_lnicial, Posio_Final)
Este mtodo tem a funo de retornar uma parte do objeto String, o qual foi utilizado na
chamada do mtodo. Essa parte do objeto String tambm denominada substring. O
primeiro argumento (PosioInicial) diz respeito ao local em que a substring inicia, sendo
que esse incio a partir de zero.

A chamada pode conter um ou dois argumentos. Se possuir somente um argumento, ento, a
substring retornada ter todos os caracteres at o final da String original. No entanto, caso
contenha dois argumentos, a substring retornada terminar com o caractere determinado pelo
segundo argumento (Posio_Final). Devemos destacar que somente o segundo argumento
no ter incio em zero. Sendo assim, caso este argumento seja 5, ser da posio 5 da String
original o ltimo caractere da String retornada, e isso corresponde a 4.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 117
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Observemos o exemplo a seguir:

class Cap14_Ex12
{
public static void main(String args[])
{
String x = "Pressuposto";
System.out.println(x.substring(6));
System.out.println(x.substring(6,9));
}
}

.toLowerCase()
Este mtodo tem a funo de retornar um objeto String, sendo que o valor desse objeto
refere-se String que foi utilizada para chamar o mtodo. Ao utilizarmos toLowerCase(), o
resultado obtido ter todos seus caracteres convertidos para caixa baixa.
Vejamos:

class Cap14_Ex13
{
public static void main(String args[])
{
String x = "CLASS";
System.out.println(x.toLowerCase());
}
}

O exemplo acima retornar: class

.toUpperCase()
Este mtodo tambm tem a funo de retornar o objeto String que contm o valor da String
utilizada para chamar o mtodo, porm, ao contrrio do mtodo anterior, toUpperCase()
retorna todos os caracteres convertidos em caixa alta.
Observemos:

class Cap14_Ex14
{
public static void main(String args[])
{
String x = "class";
System.out.println(x.toUpperCase());
}
}

O exemplo acima retornar: CLASS

.trim()
Assim como os mtodos descritos anteriormente, este tambm tem a funo de retornar o
objeto String que apresenta como valor a String utilizada a fim de chamar o mtodo.
Contudo, o resultado obtido por meio de trim() no contm quaisquer espaos em branco,
sejam estes espaos precedentes ou finais.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 118
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Vejamos o exemplo:

class Cap14_Ex15
{
public static void main(String args[])
{
String x = "Curso ";
System.out.println(x + "s");
System.out.println(x.trim() + "s");
}
}

.toString()
A funo deste mtodo retornar o valor referente String utilizada com a finalidade de
chamar o mtodo. Para compreendermos de forma mais adequada, destacamos que todos os
objetos da linguagem de programao Java devem conter o mtodo em questo, o qual
retorne uma String capaz de descrever os objetos.
Observemos a seguir:

class Cap14_Ex16
{
public static void main(String args[])
{
String x = "contedo da String";
System.out.println( x.toString() );
}
}

O exemplo acima retornar: contedo da String

2.3. Classe StringBuffer

Tendo em vista que os objetos String so inalterveis, manipul-los de forma excessiva pode
fazer com que eles fiquem abandonados no pool. Dessa maneira, nas situaes em que
desejamos realizar alteraes em strings de caracteres, devemos utilizar a classe
StringBuffer, uma vez que os objetos do tipo StringBuffer podem ser alterados diversas
vezes sem que objetos String sejam abandonados.
Considerando o fato de os objetos StringBuffer serem adequados para a manipulao de
blocos de dados, a utilizao mais comum destes na entrada e sada de arquivos, nas
situaes em que o programa manipula diversas alteraes e h um grande fluxo de entrada
de dados. Os objetos StringBuffer, alm de serem a melhor opo para a manipulao de
dados, tambm so capazes de pass-los adiante aps manipul-los para que, assim, o espao
na memria destinado a essa manipulao possa ser reutilizado.
2.3.1. Alguns mtodos da ciasse StringBuffer

Assim como foram descritos os mtodos relacionados classe String, neste momento,
descreveremos os mtodos relacionados classe StringBuffer. Observemos, a seguir,
detalhes a respeito de cada um deles, bem como exemplos que auxiliam na compreenso de
suas funes:

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 119
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
.append(Texto_a_acrescentar")
importante destacar que no somente este mtodo, mas todos os mtodos referentes
classe StringBuffer trabalham com o valor do objeto que chama o mtodo.
O valor do objeto que chamou o mtodo append() tambm atualizado pelo mtodo em
questo. Isso ocorre independentemente do fato de o valor de retorno ter sido atribudo a
uma varivel. Embora este mtodo utilize argumentos distintos, tais como boolean, char,
int, long, entre outros, o que se encontra com mais frequncia o objeto String.

Ainda, importante ressaltar que possvel encadear as chamadas de mtodos append(), tal
como descrito no seguinte exemplo

class Cap14_Ex17
{
public static void main(String args[])
{
StringBuffer x = new StringBuffer("casa");
x.append ("mento");
System.out.println("x = " + x);
}
}

O exemplo acima retornar: casamento

.insert (Posio, Texto_a_ser_inserido)
Alm de ter a funo de retornar o objeto StringBuffer, este mtodo tambm responsvel
por atualizar o valor do mesmo objeto StringBuffer que o chamou.Em ambos os casos, no
objeto StringBuffer original ser inserido o objeto string passado para o segundo
argumento, sendo que o incio ser no primeiro argumento, o qual comea em zero.
Observemos:

class Cap14_Ex18
{
public static void main(String args[])
{
StringBuffer x = new StringBuffer("guardachuva");
x.insert(6,"-");
System.out.println("x = " + x);
}
}

O exemplo acima retornar: guarda-chuva

Nota: Este mtodo tambm permite que diversos tipos de dados sejam passados pelo
segundo argumento, tais como boolean, char, int, long, entre outros, porm, o argumento
String aquele visto com mais frequncia.

.reverse()
Alm de ter a funo de retornar o objeto StringBuffer, este mtodo tambm responsvel
por atualizar o valor desse mesmo objeto StringBuffer que o chamou. Em ambos os casos,
h uma inverso dos caracteres do objeto StringBuffer, assim como descrito no exemplo a
seguir;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 120
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap14_Ex19
{
public static void main(String args[])
{
StringBuffer x = new StringBuffer("Roma");
x.reverse ();
System.out.println("x = " + x);
}
}

O exemplo acima retornar: amoR

.toString()
A funo deste mtodo retornar o valor do objeto StringBuffer que chamou o mtodo.
Esse valor retornado como um objeto String.
Vejamos no exemplo a seguir:

class Cap14_Ex20
{
public static void main(String args[])
{
StringBuffer x = new StringBuffer("Teste");
System.out.println(x.toString());
}
}

O exemplo acima retornar: Teste

2.4. Mtodos encadeados

O conceito de mtodos encadeados de suma importncia a quem vai prestar o exame de
certificao, pois esse conceito est presente em grande parte das questes. Sendo assim,
observemos, a seguir, a sintaxe de uma instruo que apresenta mtodos encadeados:

resultado=mtodo1().mtodo2().mtodo3();

Normalmente, encontramos no mximo trs mtodos encadeados, embora seja possvel
utilizar vrios mtodos dessa maneira. A fim de que possamos compreender esses mtodos
encadeados, preciso, em primeiro lugar, verificar o que ser retornado da chamada do
mtodo que se encontra na extrema esquerda. Esse valor retornado ser chamado de A.
O valor A, ento, deve ser utilizado como um objeto que ser responsvel por chamar o
segundo mtodo, considerando a contagem a partir da esquerda. Caso haja somente dois
mtodos encadeados, o resultado da expresso ser correspondente ao resultado da segunda
chamada. Contudo, caso haja mais um mtodo, isto , um terceiro, o resultado obtido a partir
da segunda chamada ser utilizado para chamar esse terceiro mtodo. Neste caso, o resultado
da expresso ser correspondente ao resultado dessa terceira chamada.
Observemos o exemplo descrito a seguir para compreendermos melhor a explicao:




PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 121
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap14_Ex21
{
public static void main(String args[])
{
String x = "teste";
String y =
x.concat(" final").toUpperCase().replace('E', 'x');
// mtodos encadeados
System.out.println("y = "+ y);
}
}

O exemplo acima retornar: TxSTx FINAL

Vejamos o que ocorreu em cada etapa:
Considerando o valor literal "teste", em primeiro lugar este foi concatenado (concat) a "
final". A partir de ento, foi criado um objeto String cujo valor "teste final". Este objeto
intermedirio e temporrio, ou seja, ser perdido em breve;
Em seguida, um novo objeto String de carter temporrio foi criado pelo mtodo
toUpperCase(). O valor desse novo objeto "TESTE FINAL";
Ento, um objeto String final, cujo valor "TxSTx FINAL", foi criado pelo mtodo
replace(), o qual tambm referenciou "y" a esse valor.

class Cap14_Ex22
{
public static void main(String args[])
{
String a = "pessoa fsica";
String b =
a.concat(" jurdica").toUpperCase().substring(7);
System.out.println(b);
}
}

O exemplo acima retornar: FSICA JURDICA porque a String a recebeu o texto "pessoa
fsica". A String b recebeu o encadeamento dos mtodos concat, toUpperCase e substring,
onde o mtodo a.concat acrescentou o texto " jurdica", o mtodo toUpperCase
transformou o texto em maisculo e o mtodo substring retornou uma parte do contedo da
String b a partir da 7
a
posio.

3. Classe Math

O pacote java.lang de suma importncia para a linguagem de programao Java na medida
em que ele responsvel por definir as classes mais importantes para essa linguagem, as
quais so importadas de forma automtica.
Dentre as classes que esto contidas no pacote java.lang, destacamos as seguintes:

Boolean;
Byte;
Character;
Double;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 122
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Float;
Integer;
Long;
Math;
Object;
Short;
Void

A classe Math utilizada com a finalidade de efetuar operaes matemticas comuns.
Tendo em vista que todos os mtodos da classe Math so definidos como static, estes no
precisam ser instanciados para que possam ser utilizados. De fato, h duas limitaes da
classe Math que precisam ser destacadas: devido ao fato de seu construtor ser privado, no
possvel criar uma instncia da classe Math; alm disso, essa classe tambm no pode ser
estendida por ser definida como final.
Destacamos, ainda, que a classe Math responsvel por determinar aproximaes para as
constantes pi e e, cujas assinaturas so public final static double Math.PI e public final
static double Math.E, respectivamente.

3.1. Alguns mtodos da classe Math

Sabemos que os mtodos da classe Math so estticos. Dessa forma, possvel acess-los
como mtodos estticos a partir do nome da classe. Normalmente, chama-se esses mtodos
da seguinte maneira: resultado Math.umMtodoMathEsttico();
a descrio desses mtodos Math em conjunto aos exemplos de sua utilizao:

Mtodo Descrio Exemplo
abs() Retorna o valor absoluto de um nmero. Este
mtodo possui quatro assinaturas que so:
public static double abs(double a)
public static float abs(float a)
public static int abs (int a)
public static long abs (long a)
x = Math.abs(-1)
retorna 1
ceil() Retorna um nmero inteiro que correspondente
ao seu inteiro superior mais prximo ao
argumento. Este nmero est em formato double.
A assinatura deste mtodo :
public static double ceil(double a)
double x;
x = Math.ceil(3.9);
retorna 4
floor() Retorna um nmero inteiro que correspondente
ao seu inteiro inferior mais prximo ao
argumento. Este nmero est em formato double.
A assinatura deste mtodo :
public static double floor(double a)
double x;
x = Math.floor(3.9);
retorna 3
max() Retorna o maior entre dois nmeros distintos. As
assinaturas deste mtodo so quatro:
public static double max(double a, double b)
public static float max(float a, float b)
public static int max(int a, int b)
public static long max(long a, long b)
int x;
x = Math.max(920,810);
retorna 920
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 123
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
min() Oposto ao max(), retorna o menor entre dois
nmeros distintos. Este mtodo tambm possui
quatro assinaturas, que so:
public static double min(double a, double b)
public static float min(float a, float b)
public static int min(int a, int b)
public static long min(long a, long b)
int x;
x = Math.min(920,810);
retorna 810
random() Sem utilizar quaisquer parmetros, retorna um
valor entre 0.0 e 1.0, o qual do tipo double. a
assinatura deste mtodo :
public static double random()
double x;
x = Math.random();
retorna um valor aleatrio
entre 0.0 e 1.0
round() Retorna um nmero inteiro que esteja mais
prximo ao nmero uitlizado no argumento. So
duas as assinaturas deste mtodo:
public static int round (float a)
public static long round(double a)
double x;
x = Math.round(-6.5);
retorna -6.0
sin() Retorna o seno de um ngulo, sendo que o
argumento refere-se ao ngulo em radianos. Alm
disso, esse argumento um double. Vale destacar
que por meio de Math.toRadians() podemos
converter graus em radianos. A assinatura deste
mtodo :
public static double sin(double a)
double x;
x = Math.sin(90.0);
retorna 0.8939966676&

Math.sin(toRadians(90.0)
);
Retorna 1
cos() Retorna o co-seno de um ngulo. Assim como no
mtodo anterior, o argumento um double que se
refere ao ngulo em radianos. a assinatura deste
mtodo :
public static double cos(double a)
double x;
x = Math.cos(0.0);
retorna 1

tan() Retorna a tangente de um ngulo, sendo que o
argumento tambm um double que se refere ao
ngulo em radianos. a assinatura deste mtodo a
seguinte:
public static double tan(double a)
double x;
x = Math.tan(45.0);
retorna 0.99999999&

sqrt() Retorna a raiz quadrada de um valor double. A
assinatura deste mtodo :
public static double sqrt (double a)
double x;
x = Math.sqrt(9.0);
retorna 3.0
toDegrees() Retorna um ngulo em graus a partir do
argumento, o qual representa o ngulo em
radianos. A assinatura deste mtodo :
public static double toDegrees(double a)
double x;
x =
Math.toDegrees(Math.PI
* 2.0);
retorna 360
toRadians() Oposto do mtodo anterior, retorna um ngulo em
radianos a partir do argumento, o qual representa
o ngulo em graus. A assinatura deste mtodo :
public static double toRadians(double a)
double x;
x =
Math.toRadians(360.0/2);
retorna 3.14 ( o valor de
PI)

Ainda, importante destacar algumas questes a respeito dos mtodos ceil() e floor().
Ambos utilizam tipos double e tm, como ponto principal, a converso de doubles em
inteiros, o que realizado de acordo com as regras apresentadas pelos mtodos, muito
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 124
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
embora seja estranho o fato de um valor inteiro ser retornado em contineres de tamanho
double. Vale destacar, tambm, que o mtodo round() utiliza argumentos double e retorna
valores inteiros correspondentes.

Os mtodos Math.round() e Math.ceil() sero iguais caso o valor da primeira casa decimal
aps a vrgula for maior ou igual a 0,5. Devemos lembrar que, caso o valor seja negativo,
nmeros que apresentam casa decimal 0,5 sero arrendados para um inteiro superior.
Sabemos que o mtodo sqrt() retorna a raiz quadrada de um valor, mas, se esse valor for
negativo, o mtodo em questo retorna NaN (Not a Number), um padro de bits indicando
que o resultado no um nmero.
Vimos, na tabela descrita anteriormente, a assinatura de alguns mtodos. A seguir,
destacaremos as assinaturas dos mtodos estticos da classe Math que so mais importantes:

double abs(double a);
double ceil(double a);
double cos(double a);
double floor(double a);
double max(doublea,double b);
double min(double a,double b);
double random();
double sin(double a);
double sqrt(double a);
double tan(double a);
double toDegrees(double angleInRadians - ngulo em radianos);
double toRadians(double angleInDegrees - ngulo em graus);
float abs(float a);
float max(float a,float b);
float min(float a, float b);
double sqrt(double a);
int abs(int a);
int max(int a,int b);
int min(int a,int b);
int round(float a);
long abs(long a);
long max(long a, long b);
long min(long a, long b);
long round(double a).

4. Classe Wrapper

As classes Wrapper da linguagem Java so responsveis por fornecer essencialmente o
seguinte:

Um conjunto de funes que so utilitrias aos tipos primitivos;
Um mecanismo capaz de agrupar os valores primitivos em um objeto.

Ao agrupar tais valores, estes podem ser adicionados em tarefas que so reservadas a
objetos. Alm disso, grande parte das funes que so utilitrias aos tipos primitivos tem
relao com diversos tipos de converses, tais como a converso de objetos String em tipos
primitivos e de tipos primitivos em objetos String, entre outras.
Cada um dos tipos primitivas contm uma classe Wrapper, sendo que o nome dessa classe
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 125
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
correspondente ao nome do tipo, porm, escrito em caixa alta. Dessa forma, o nome da
classe Wrapper para o tipo float Float, por exemplo.

importante destacar, no entanto, que nem todos os nomes de classes seguem as mesmas
regras: o nome da classe Wrapper para o tipo char Character, e o nome dessa classe para
o tipo int Integer.

Quanto aos objetos Wrapper, temos que algumas abordagens para a sua criao utilizam
como argumento a String de um tipo primitivo. Caso no seja possvel converter a String
utilizada no tipo primitivo adequado, essas abordagens lanam excees
NumberFormatException.
Esses objetos Wrapper tambm possuem como caracterstica a inalterabilidade, tendo em
vista que os valores recebidos por eles no podem ser alterados.
A seguir, teremos uma relao dos tipos primitivos e dos argumentos do construtor de cada
classe Wrapper:

Boolean
A classe Wrapper Boolean possui o tipo primitivo Boolean, e seu construtor tem os
argumentos booleano ou String.

Byte
A classe Wrapper Byte possui o tipo primitivo Byte, e seu construtor tem os argumentos
byte ouString

Character
A classe Wrapper Character possui o tipo primitivo Char, e seu construtor tem o
argumento char.

Double
A classe Wrapper Double possui o tipo primitivo Double, e seu construtor tem os
argumentos double ou String.

Float
A classe Wrapper Float possui o tipo primitivo Float, e seu construtor tem os argumentos
float ou String.

Integer
A classe Wrapper Integer possui o tipo primitivo Int, e seu construtor tem os argumentos
int ou String.

Long
A classe Wrapper Long possui o tipo primitivo Long, e seu construtor tem os argumentos
long ou String.

Short
A classe Wrapper Short possui o tipo primitivo Short, e seu construtor tem os argumentos
short ou String.

4.1. Construtores Wrapper

Dois construtores Wrapper esto presentes em cada uma das classes Wrapper, exceto na
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 126
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
classe Character, a qual fornece somente um construtor. Esses construtores oferecidos pelas
classes Wrapper so os seguintes:

Aquele que utiliza o tipo primitivo em criao como argumento;
Aquele que utiliza a representao em String desse tipo como argumento.

O nico construtor fornecido pela classe Wrapper Character utiliza como argumento um
tipo char, como mostra a linha Character c1 = new Character ('A'); do exemplo a seguir:

class Cap14_Ex23
{
public static void main(String args[])
{
Integer i1 = new Integer(77);
Integer i2 = new Integer("77");
Float f1 = new Float(5.54f);
Float f2 = new Float("5.54f");
Character c1 = new Character('A');
System.out.println(i1);
System.out.println(i2);
System.out.println(f1);
System.out.println(f2);
System.out.println(c1);
}
}

4.2. Mtodos de converso

As classes Wrapper possuem mtodos de converso. Os mtodos que sero descritos a
seguir tm grande probabilidade de estarem presentes no exame, pois so os mais utilizados.
4.2.1. Mtodos valueOf()

Estes mtodos estticos que so fornecidos por grande parte das classes Wrapper
apresentam uma abordagem capaz de permitir a criao de objetos Wrapper.
Ambos os mtodos representam o tipo adequado de seu primeiro argumento por meio de
uma String. Quando temos um segundo mtodo, este utiliza um argumento de carter
opcional, o qual tem a funo de determinar em que base foi representado o primeiro
argumento. Essa base pode ser binria, octal ou hexadecimal.

Observemos o exemplo a seguir para compreender os mtodos valueOf() de maneira
adequada:

class Cap14_Ex25
{
public static void main(String args[])
{
Integer i2 = Integer.valueOf("010111", 2);
Float f2 = Float.valueOf(6.75f") ;
System.out.println(i2);
System.out.println(f2);
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 127
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}
}

4.2.2. parse()

O mtodo valueOf() descrito anteriormente est relacionado aos seis mtodos parse(), os
quais correspondem a cada tipo Wrapper numrico. Isso ocorre porque eles apresentam
algumas semelhanas entre si, tais como:

Eles utilizam como argumento uma String;
Caso o argumento String esteja em formato inadequado, ambos lanam uma exceo
NumberFormatException;
Eles so capazes de realizar a converso de objetos String que apresentam bases distintas
nas situaes em que temos um tipo primitivo oculto como sendo um dos quatro tipos
inteiros (byte, integer, long e short).
No entanto, preciso destacar que alm das semelhanas, os mtodos parse() e valueOf()
possuem algumas diferenas entre si, tais como o fato de um mtodo parse() retornar o tipo
primitivo ao qual j foi atribudo um nome e o fato de o mtodo valueOf() retomar um
objeto Wrapper a partir do tipo que realizou a sua chamada, sendo que esse objeto acaba de
ser criado.

Vejamos o exemplo a seguir:

class Cap14_Ex26
{
public static void main(String args[])
{
double pi = Double.parseDouble("3.14");
System.out.println("PI = " + pi);
Double pi2 = Double.valueOf("3.14");
System.out.println(pi2 instanceof Double );
long l1 = Long.parseLong("010111", 2);
System.out.println("L1 = " + l1);
Long l2 = Long.valueOf("010111", 2);
System.out.println("L2 value = " + l2);
}
}

4.2.3. Value()

Os mtodos Value() no contm argumentos. Eles so utilizados nas situaes em que o
valor de um objeto Wrapper numrico deve ser convertido em um tipo primitivo.
Um objeto primitivo Wrapper numrico pode ser convertido em um tipo primitivo porque
cada uma das seis classes Wrapper numricas contm seis mtodos. Observemos o exemplo
descrito a seguir:






PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 128
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap14_Ex27
{
public static void main(String args[])
{
Integer i = new Integer(64);
// cria um novo objeto Wrapper
System.out.println(i);
byte b = i.byteValue();
// converte o valor de i para um primitivo byte
System.out.println(b);
short s = i.shortValue();
// outro mtodo Integer Value
System.out.println(s);
double d = i.doubleValue();
// outro mtodo Integer Value
System.out.println(d);
Float f = new Float(6.75f);
// cria um novo objeto Wrapper
short s1 = f.shortValue();
// converte o valor F para um primitivo short
System.out.println(s1);
// o resultado 3 (truncado)
}
}

toString()

Este um mtodo da classe Object, que a principal classe em Java, a partir da qual todas
as outras classes so herdadas. Como consequncia, temos que todas as classes Java
possuem o mtodo toString(), o qual capaz de permitir que uma representao
significativa de um objeto seja obtida.
O mtodo toString() retorna uma String, sendo que o valor do tipo primitivo est
encapsulado no objeto. Alm disso, vale ressaltar que a verso de uma instncia desse
mtodo, a qual no esttica e no possui argumentos, est contida nas classes Wrappers,
as quais so marcadas como classes finais.
Vejamos, a seguir, um exemplo para melhor compreenso do assunto:

class Cap14_Ex28
{
public static void main(String args[])
{
Double d= new Double("6.75");
System.out.println("d = " + d.toString() );
}
}

Um mtodo toString() sobreposto fornecido pelas classes Wrappers numricas. Esse
mtodo, alm de utilizar um tipo nmero primitivo mais apropriado situao, retorna uma
String contendo o valor do tipo nmero primitivo em questo. Vejamos como o exemplo a
seguir ilustra essa situao:

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 129
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
class Cap14_Ex29
{
public static void main(String args[])
{
System.out.println("d = " + Double.toString(6.75));
}
}

O exemplo que ser descrito a seguir demonstra um terceiro mtodo toString() fornecido
pelas classes Integer e Long:

class Cap14_Ex30
{
public static void main(String args[])
{
System.out.println("Decimal = " +
Long.toString(12,10));
System.out.println(" Hexadecimal = " +
Long.toString(12,16));
System.out.println("Binario = " +
Long. toString(12,2));
}
}

O terceiro mtodo toString() fornecido pelas classes Long e Integer apresenta as seguintes
caractersticas:

Possui como primeiro argumento o tipo primitivo mais adequado;
Possui como segundo argumento uma base (binria, octal, hexadecimal);
um mtodo esttico.

O segundo argumento tem a funo de informar ao mtodo que ele deve converter o primeiro
argumento de acordo com a base definida. Em seguida, o resultado dever ser retomado
como uma String. Normalmente, esse primeiro argumento encontra-se na base 10.
Os mtodos de converso toString() utilizam os tipos int e long e, assim, retornam o valor
que foi convertido como uma representao em String. Observemos o exemplo a seguir:

class Cap14_Ex31
{
public static void main(String args[])
{
String s = Integer.toHexString(1000);
// converte 1000 para hexadecimal
System.out.println("1000 em hex = " + s);
String s1 = Long.toOctalString (1000);
// converte 1000 para octal
System.out.println("1000 em octal = "+ s1);
}
}

Aps termos verificado a descrioo dos mtodos de converso, teremos, a seguir, uma lista
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 130
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
dos mtodos Wrapper mais comuns para converso:

ByteValue: Byte, Double, Integer, Long e Short;
doubleValue: Byte, Double, Integer, Long e Short;
FloatValue: Byte, Double, Integer, Long e Short;
IntValue: Character, Float, Integer, Long e Short;
LongValue: Character, Float, Integer, Long e Short;
ShortValue: Character, Float, Integer, Long e Short;
Parse (esttico e exceo): Character, Float, Integer, Long e Short;
Parse (esttico, exceo e com a base): Character, Integer, Long e Short;
valueOf (esttico e exceo): Boolean, Character, Float, Integer, Long e Short;
valueOf (esttico, exceo e com a base): Character, Integer, Long e Short;
toString: Character, Double, Float, Integer, Long, Short;
toString (esttico e primitivo): Byte, Double, Float, Integer, Long e Short;
toString (esttico, primitivo e base): Integer e Long;
toBinaryString (esttico): Integer e Long;
toHexString (esttico): Integer e Long;
toOctaIString (esttico): Integer e Long.

Nota: As assinaturas mais importantes dos mtodos de converso so as seguintes:
primitive parseXxx(String); primitive xxxValue(); e Wrapper valueOf(String).

5. Autoboxing e auto-unboxing

No J2SE 5.0, a converso entre valores de tipos primitivos e objetos empacotadores de tipo
mais simples: elimina-se a necessidade do programador utilizar um cdigo adicional para
realizar a converso.
J em verses anteriores ao J2SE 5.0, necessrio gerar um novo objeto da classe
empacotadora (wrapper) de tipo correspondente e, em seguida, inseri-lo na coleo, para que
um valor primitivo seja introduzido em uma estrutura de dados capaz de armazenar
unicamente Objects.
Ainda nas mesmas verses, o trabalho para recuperar, a partir de uma coleo, um objeto de
uma classe empacotadora de tipo e manipular seu valor primitivo depende da invocao de
um mtodo no objeto, de maneira a obter seu valor de tipo primitivo correspondente.

O J2SE 5.0 apresenta dois novos tipos de converso:

Converso boxing Por meio desta converso, um valor de um tipo primitivo
transformado em um objeto da classe empacotadora de tipo correspondente. Quando
realizada de maneira automtica, essa converso denominada autoboxing;

Converso unboxing: Utilizamos este tipo de converso para transformar um objeto de
uma classe empacotadora de tipo em um valor de tipo primitivo correspondente. Quando
realizada de maneira automtica, essa converso denominada auto-unboxing.

O processo de autoboxing e auto-unboxing pode afetar implicitamente a performance e o
throughput das aplicaes, devido mistura de wrappers e objetos primitivos nas expresses
aritmticas, em um loop estreito. Por causa disso, no devemos utilizar autoboxing de
maneira deliberada.

A seguir, temos um exemplo da utilizao de autoboxing e auto-unboxing:
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 131
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
public class TesteAutoboxing
{
public static void main(String args[])
{
int varint = 22;
// chamando o autoboxing
Integer varAut = varint;
//chamando o auto-unboxing
int var2int = varAut;
System.out.printf("%s\n%s\n%s", varint, varAut,
var2int);
}
}






































PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 132
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 15

1. Introduo

A criao das sadas de forma grfica e das interfaces grficas para usurios na linguagem
Java torna-se mais fcil medida que podemos utilizar um conjunto de classes e interfaces
disponibilizado por Java. Com esse conjunto, o desenvolvimento das aplicaes grficas
pode ser feito em forma de appiets, bem como em forma de aplicaes autnomas.
Para criarmos as aplicaes grficas, utilizamos alguns componentes grficos e tambm
recursos associados. Eles encontram-se em dois pacotes:

java.awt

O pacote AWT (Abstract Windowing Toolkit) definido por meio das classes de java.awt
e de seus subpacotes, dentre os quais podemos citar os seguintes:

java.awt.event;
java.awt.color.

As funcionalidades grficas existentes desde a primeira verso da linguagem Java
encontram-se nesses pacotes descritos. Mas para a construo de seus componentes visuais
na tela, o AWT dependia do sistema operacional, pois era ele quem fornecia as demais
informaes necessrias para que esses componentes fossem criados.
Sendo assim, a principal desvantagem em relao ao pacote Swing, descrito a seguir, que
as classes utilizadas no AWT no so totalmente escritas em Java.

javax.swing

O pacote Swing utilizado para construirmos as interfaces grficas de usurio (GUIs) na
linguagem Java. A maioria das classes utilizadas neste pacote escrita na prpria linguagem
Java.
Grande parte dos componentes que utilizam o Swing inicia com a letra J, como o Jlabel.
Para utilizarmos o pacote Swing, precisamos importar o seguinte pacote:
import javax.swing

Nota: Os comandos bsicos de Java no necessitam serem importados.

Vejamos, a seguir, algumas caractersticas do Swing:

Permite que os componentes grficos sejam exibidos mais rapidamente;
Os botes e os rtulos podem ter imagens adicionadas a eles;
Possui novos componentes grficos com relao ao AWT.

Alm dos dois pacotes descritos anteriormente, muitos dos programas que utilizam o Swing
tambm necessitam importar um outro pacote:
o java.awt.event

Container
Os containeres referem-se ao local em que sero adicionados os componentes visualizados
na tela. Os tipos mais comuns de containeres da linguagem Java so os seguintes:

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 133
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Frames
Os frames correspondem s janelas nas quais construmos as aplicaes, cuja aparncia
similar das janelas do sistema operacional. Porm, o componente necessita de ajuda do
sistema para construir a aparncia das telas, no que se refere a botes de fechar, minimizar,
maximizar, entre outros.

Vejamos a sintaxe utilizada para criarmos um trame:

JFrame frame = new JFrame("Exemplo de Frame");

Quando criamos os frames, precisamos definir o seu tamanho e torn-lo visvel. Observemos
as sintaxes para cada uma dessas tarefas:

Definir o tamanho do frame
frame.setSize(colunas, linhas)

Tornar o frame visvel
frame.setVisible(true)

A seguir, mostraremos um exemplo em que criamos um container Jframe:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex1
{
public static void main(String args[])
{
JFrame frame = new JFrame(" Exemplo de Frame");
frame.setSize(300,300);
frame.setVisible(true);
}
}



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 134
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Caixas de dilogo

As caixas de dilogo (JOptionPane) so caixas do seguinte tipo e finalidade:

showMessageDialog
Esta caixa utilizada para exibir um texto na tela.

Sua sintaxe a seguinte:

JOptionPane.showMessageDialog
Vejamos um exemplo de como cri-la:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex2
{
public static void main ( String args[])
{
JOptionPane.showMessageDialog(null,
"Utilizando dilogo PLAINMESSAGE no Swing +
sem cone",
"Mensagem normal ",JOptionPane.PLAIN_MESSAGE);
}
}



Em que:

null refere-se posio na qual a caixa mostrada na tela; com este valor, no definido
um alinhamento em relao pgina principal;

"Utilizando Dilogo PLAIN_MESSAGE no Swing sem cone" a
mensagem apresentada na caixa;

"Mensagem normal" refere-se ao ttulo da caixa de mensagem;

JOptionPane.PLAIN_MESSAGE especifica que no haver cone a ser apresentado
nesta caixa.

showConfirmDialog
Esta uma caixa de confirmao.

Deseja finalizar a execuo?
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 135
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Sua sintaxe a seguinte:
JOptionPane.showConfirmDialog
As caixas de dilogo podem ser acompanhadas/com os seguintes botes:
DEFAULT_OPTION; YES_NO_OPTION; YES_NO_CANCEL_OPTION;
OK_CANCEL_OPTION.

Vejamos um exemplo de utilizao da caixa de dilogo:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex3
{
public static void main(String args[])
{
int var = JOptionPane.showConfirmDialog(null,
"Deseja finalizar a execuo?", "Sada",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
}
}


Em que:

var a varivel que contm a resposta para o boto pressionado;

null refere-se posio em que a caixa mostrada na tela;
quando este valor indicado, no definido um alinhamento em relao pgina principal;

"Deseja finalizar a execuo?" a mensagem apresentada na tela;

JOptionPane.YES_NO_OPTION especifica os botes YES e NO da caixa;

JOptionPane.QUESTION_MESSAGE indica que ser mostrado o ponto de interrogao
(?) juntamente com o texto.

showInputDialog
Esta uma caixa de dilogo que aguardar por uma entrada de dados.

Digite o primeiro nmero:
Sua sintaxe a seguinte:
JOptionPane.showInputDialog

Vejamos um exemplo:
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 136
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex4
{
public static void main(String args[])
{
String var = JOptionPane.showInputDialog(
null, "Digite o primeiro nmero: ",
"Entrada de dados 1",
JOptionPane.QUESTION_MESSAGE);
}
}



Em que:

var a varivel que contm a expresso em string digitada dentro da caixa;

null refere-se posio em que a caixa mostrada na tela; quando este valor indicado,
no definido um alinhamento em relao pgina principal;

"Digite o primeiro nmero: " a mensagem apresentada na tela para a entrada de dados;

"Entrada de dados 1" o ttulo da caixa;
JOptionPane.QUESTION_MESSAGE indica que ser mostrado o ponto de interrogao
(?) juntamente com o texto.

A seguir, mostraremos um exemplo com a criao de containeres JOptionPane:















PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 137
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex5
{
public static void main(String args[])
{
int resp;
do
{
DialogExs(); // executa vrios exemplos de
// caixa de dilogo
// confirmar sada sim ou no
resp = JOptionPane.showConfirmDialog(null,
"Deseja finalizar a execuo?",
"Sada", JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE);
}
while (resp == 1); // boto YES = O, boto NO = 1
System.exit(0);
}
static void DialogExs()
{
// mensagem normal, sem cone
JOptionPane.showMessageDialog(null,
"Utilizando dilogo PLAIN_MESSAGE no Swing sem cone",
"Leia",
JOptionPane.PLAIN_MESSAGE);
// mensagem normal, cone informao.
JOptionPane.showMessageDialog(null,
"Utilizando dilogo INFORMATION_MESSAGE +
no Swing com cone",
"Aviso", JOptionPane.INFORMATION_MESSAGE);
// mensagem normal, cone pergunta.
JOptionPane.showMessageDialog(null,
"Utilizando dilogo QUESTION_MESSAGE no Swing",
"Pergunta", JOptionPane.QUESTION_MESSAGE);
//mensagem normal, cone aviso
JOptionPane.showMessageDialog(null,
"Utilizando dilogo WARNING.MESSAGE no Swing",
"Aviso", JOptionPane.WARNING_MESSAGE);
// mensagem normal, cone erro.
JOptionPane.showMessageDialog(null,
"Utilizando dilogo ERROR_MESSAGE no Swing",
"Erro", JOptionPane.ERROR_MESSAGE);
// mensagem normal, cone personalizado.
Icon icone = new ImageIcon("undercon.gif");
JOptionPane.showMessageDialog(null,
"Utilizando dilogo INFORMATION_MESSAGE no +
Swing com cone personalizado",
"Mensagem", JOptionPane.INFORMATION_MESSAGE);
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 138
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
// mensagem normal para entrada de dados
String num1 = JOptionPane.showInputDialog(null,
"Digite o primeiro nmero: ",
"Entrada de dados 1",
JOptionPane.QUESTION_MESSAGE);
String num2 = JOptionPane.showInputDialog(null,
"Digite o segundo nmero: ",
"Entrada de dados 2",
JOptionPane.QUESTION_MESSAGE);
int result = Integer.parseInt(num1) +
Integer.parseInt(num2);
JOptionPane.showMessageDialog(null,
"Resultado da soma + result,
"Resultado", JOptionPane.WARNING_MESSAGE);
}
}

Applets

Este container ser visto em um prximo captulo.


2. Eventos


Um dos pontos mais importantes que encontramos na linguagem Java a resposta a eventos,
os quais so acionados pelos programas que se baseiam em interface grfica. Grande parte
desses eventos gerada pelos usurios dos programas.

H diversas maneiras de os eventos serem passados para o programa, o que varia
conforme o evento que est sendo executado. Os eventos mais comuns so gerados pelo
teclado ou pelo mouse, mas temos tambm aqueles gerados a partir dos botes e dos
menus, ou seja, dos controles disponveis na interface grfica do usurio.

2.1. Event Listener

Quando um evento criado pelo usurio, um objeto recebe a informao de que esse evento
est sendo gerado. Esse objeto refere-se ao listener, cujas principais caractersticas so as
seguintes:

Para receber informaes a respeito de tipos especficos de eventos, necessrio registrar o
listener com uma ou mais fontes;

Para que possa receber e, tambm, processar as informaes, ele deve implementar
mtodos.



Para capturarmos os eventos em nossa aplicao, devemos ter uma classe que implemente o
listener. Sabendo-se que a sua funo verificar quando um determinado evento acontece
em um objeto, precisamos adicionar um listener em cada componente ou objeto cujos
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 139
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
eventos desejamos capturar. Ele o responsvel por tratar do evento quando este ocorrer,
tomando como base o objeto que o gerou.

O evento de clicar em um boto sempre o mesmo, independentemente do boto que estiver
sendo pressionado. O tratamento desse evento realizado por uma interface que, ao ser
implementada na classe, trata os respectivos mtodos de ao ou o evento que a interface
implementada exige. Com essa tarefa, possvel identificarmos a partir de qual objeto ou
componente a ao ou evento foi gerado.

Vejamos, a seguir, as aes que podem gerar um evento e as respectivas interfaces listener
de cada uma:

Mover o mouse sobre um componente
Interface MouseMotionListener.

Fechar um Frame
Interface WindowListener.

Clicar sobre um boto ou pressionar Return ao digitar
Interface ActionListener.

Pressionar o boto do mouse enquanto o cursor estiver sobre um componente
Interface MouseListener;

2.2. Eventos do teclado

Ao entrarmos com informaes via teclado, fazemos com que seja gerado o objeto
KeyEvent, que pode ser dos seguintes tipos:

KEY_PRESSED;

KEY_RELEASED;

KEY_TYPED.

Para identificarmos qual o tipo de evento KeyEvent que est sendo gerado, podemos utilizar
as constantes int que so definidas pela classe KeyEvent. Esta, que uma subclasse da
classe InputEvent, define diversas outras constantes int, tais como VK_ENTER,
VK.CANCEL e VK_ESCAPE
Vejamos algumas outras constantes;

VK_0 a VK_9
Estas constantes definem os caracteres em ASCII correspondentes aos algarismos.

VK_A a VK_Z
Estas constantes definem os caracteres em ASCII correspondentes s letras.

Dentre os vrios mtodos que so definidos pela classe KeyEvent, temos o getKeyChar().
Com ele, retornado o caractere digitado. A sintaxe geral desse mtodo a seguinte:

char getKeyChar()
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 140
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Temos, ainda, os construtores da classe KeyEvent, os quais so os seguintes:

KeyEvent(Component src, int type, long when, int modifiers, int code);

KeyEvent(Component src, int type, long when, int modifiers, int cod, char ch).

Em que:
src refere-se ao componente que gerou o evento;

type refere-se ao tipo de evento gerado;

modifiers o item que identifica os modificadores que estavam pressionados quando o
evento foi gerado;

code define os caracteres especiais, tais como as teclas de funo (F1 a F12) e as teclas
HOME ou SHIFT;

ch o item que determina os caracteres comuns.

2.3. Eventos do mouse

Para tratarmos os eventos do mouse gerados nos programas em Java, precisamos
implementar duas interfaces nas classes. Essas interfaces so descritas a seguir, juntamente
com os mtodos e eventos associados a cada uma:

MouseListener

mouseClicked()
Este o evento de clicar e soltar o cursor do mouse em um componente.

mousePressed()
Este evento gerado quando o mouse pressionado em um componente.

mouseReleased()
Este evento gerado quando o mouse pressionado e liberado em seguida.

mouseEntered()
Este evento gerado quando o mouse entra nos limites de um componente.

mouseExited()
Este o evento gerado quando o mouse sai das coordenadas de um componente.

MouseMotionListener

mouseDragged()
Este o evento de pressionar e mover o boto do mouse.
mouseMoved()
Este o evento realizado por qualquer movimento do mouse em um componente.

Todos os mtodos citados recebem como parmetro um objeto do tipo MouseEvent, o qual
contm informaes a respeito do evento e quais as coordenadas em que esse evento ocorreu
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 141
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
dentro do componente. Como valor de retorno, esses mtodos tm o void.
Vejamos, a seguir, um exemplo com os mtodos descritos:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ExemploMouse extends JFrame
implements MouseMotionListener, MouseListener
{
JLabel mensagem;
ExemploMouse()
{
super("Eventos do mouse");
mensagem = new JLabel();
getContentPane().add(mensagem);
addMouseListener(this);
addMouseMotionListener(this);
setSize(300,150);
show();
}

public void mouseClicked(MouseEvent e)
{
mensagem.setText("Clicado em " + coords(e));
}

public void mousePressed(MouseEvent e)
{
mensagem.setText("Pressionado em " + coords(e));
}

public void mouseReleased(MouseEvent e)
{
mensagem.setText("Liberado em " + coords(e));
}

public void mouseExited(MouseEvent e)
{
mensagem.setText("O mouse saiu da janela");
}

public void mouseEntered(MouseEvent e)
{
mensagem.setText("O mouse entrou na janela");
}

public void mouseDragged(MouseEvent e)
{
mensagem.setText("Arrastado em " + coords(e));
}

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 142
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
public void mouseMoved(MouseEvent e)
{
mensagem.setText("Movido em " + coords(e));
}

public String coords(MouseEvent e)
{
return e.getX() + ", " + e.getY();
}

public static void main(String args[])
{
ExemploMouse aplic = new ExemploMouse();
aplic.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
} );
}
}

2.3.1. Tratamento de eventos

A interface listener que trata eventos para fechar a janela chama-se WindowListener. Os
mtodos que ela possui so os seguintes:

public void windowClosing(WindowEvent e);

public void windowlconified(WindowEvent e);

public void windowOpened(WindowEvent e);

public void windowDeiconified(WindowEvent e);

public void windowActivated(WindowEvent e);

public void windowDeativated(WindowEvent e);

public void windowClosed(WindowEvent e).

Aps a compilao do exemplo Cap15_Ex1, podemos verificar que, se clicarmos na janela
para ela ser fechada, esta ao ser realizada. Contudo, a janela de console no liberada,
pois no fizemos o tratamento correio do evento de fechar a janela para este objeto.

No exemplo a seguir, mostramos como adicionar o tratamento do evento para fechar a janela
quando esse evento ocorrer para o objeto JFrame:



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 143
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex7
{
public static void main(String args[])
{
JFrame frame = new JFrame("Exemplo de frame");
frame.setSize(300,300);
frame.setVisible(true);
WindTratar wt = new WindTratar();
frame.addWindowListener(wt);
}
}

class WindTratar implements WindowListener
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}

public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}

Observando o exemplo apresentado, percebemos a criao de uma classe apenas para
tratarmos o evento de fechar a janela. Essa classe obrigada a colocar todos os sete mtodos
que a interface WindowListener exige quando implementamos uma classe.

O mtodo addXXXListener() ser sempre utilizado quando quisermos capturar eventos que
podem ser gerados plos objetos. Neste caso, adicionamos uma instncia da classe
WindTratar ao objeto criado a partir da classe JFrame, a qual uma janela.

Nota: A classe WindTratar tem como finalidade implementar a interface que contm os
eventos para o objeto (janela) com as respectivas aes quando esses eventos ocorrerem.

No exemplo a seguir, mostraremos como criar um container JFrame com a interface
WindowListener implementada na prpria classe:








PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 144
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex8 extends JFrame
implements WindowListener
{
public static void main(String args[])
{
Cap15_Ex8 frame2 = new Cap15_Ex8();
}

public Cap15_Ex8()
{
super("Exemplodeframe");
setSize(300,300);
setVisible(true);
addWindowListener(this);
}
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
public void windowIconified(WindowEvent e) {}
public void windowOpened(WindowEvent e) {}
public void windowClosed(WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated(WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}
}

2.3.2 Classes adaptadoras

Quando implementamos uma interface em uma classe, os mtodos declarados so
redefinidos na classe implementada. Se uma classe implementa a interface
WindowListener, temos que declarar os sete mtodos correspondentes a ela. Contudo, se
desejarmos apenas tratar um evento quando ele ocorrer, podemos somente redefinir um
mtodo da interface.

Para realizarmos essa tarefa, utilizamos as classes adaptadoras, as quais implementam
interfaces listener redefinindo todos os seus mtodos. Mas os mtodos definidos na classe
listener no possuem corpo ou funcionalidade. Isso ocorre para que possamos criar uma
classe filha ou uma subclasse da classe adaptadora, na qual, ento, redefinimos ou
implementamos o mtodo desejado

Observemos o exemplo a seguir:






PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 145
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
import java.awt.*;
import java.awt. event.*;
import javax.swing.*;
public class Cap15_Ex9
{
public static void main(String args[])
{
JFrame frame = new JFrame(Exemplo de frame");
frame.setSize(300,300);
frame.setVisible(true);
windTratarAdapt wtAdapt = new windTratarAdapt();
frame.addWindowListener(wtAdapt);
}
}

class windTratarAdapt extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}

As principais classes adaptadoras da linguagem Java, bem como as suas respectivas
interfaces implementadas, esto listadas a seguir:

MouseAdaper
Interface MouseListener

MouseMotionAdapter
Interface MouseWindowListener.

WindowAdapter
Interface WindowListener.

KeyAdapter
Interface KeyListener.

2.3.3. Classes internas

Um recurso bastante interessante que encontramos em Java refere-se s classes internas. Elas
so utilizadas para auxiliar as classes na construo ou na manipulao dos objetos criados
ou gerados por elas mesmas.
A filosofia da utilizao de classes internas no se restringe somente ao tratamento de
eventos. No exemplo a seguir, mostraremos as classes internas com a finalidade de auxiliar
as classes que criam objetos grficos a tratarem os eventos. Neste caso, utilizaremos a classe
inner class, que faz o tratamento do evento:




PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 146
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex10
{
public static void main(String s[])
{
JFrame frame = new JFrame("Exemplo de frame");
frame.setSize(300,300);
frame.setVisible(true);
frame.addWindowListener(new WindTratarAdapt());
}
static class WindTratarAdapt extends WindowAdapter
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
}

Nesse exemplo, a classe WindTratarAdapt interna classe Cap15_Ex10. Vejamos, em
seguida, um exemplo com uma classe interna annima, que a anonymous class:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex11 extends JFrame
{
public static void main(String s[])
{
JFrame frame = new JFrame("Exemplo de frame");
frame.setSize(300,300);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}








PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 147
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
3. Criando componentes utilizando o swing


Antes de construirmos qualquer componente a ser visualizado na tela, necessitamos
adicion-lo a um container. Os passos para a adio de componentes dentro de containeres
resumem-se em dois processos: o primeiro a criao do componente; o segundo a sua
adio no container.

Para adicionarmos esses componentes nos containeres, chamamos o mtodo
getContentPane(). por meio dele, tambm, que os componentes tornam-se visveis na
tela. Vejamos a sintaxe para realizarmos essa tarefa:

<container>.getContentPane().add(boto1);

Em que o mtodo getContentPane() retorna o content pane para o container em questo.


4. Gerenciadores de layout


Quando construmos aplicaes, quem se encarrega da disposio e do tamanho dos
elementos na tela ou dentro dos containeres so os gerenciadores de layout. Essa
preocupao em relao montagem de tais componentes de tela ocorre porque uma janela
montada manualmente para um determinado sistema operacional pode ter outra visualizao
quando for executada em um sistema operacional diferente.
Os gerenciadores de layout ou de classes disponveis para trabalharmos so os seguintes:

FlowLayout
Este gerenciador de layout o padro para Applets, Panel e JPanel.
Ele adiciona os componentes da seguinte forma: da esquerda para a direita at que nenhum
componente caiba mais na linha. Ento, ele passa para a prxima tinha, repetindo o processo.
Ao adicionarmos os componentes no container a partir do mtodo add(), podemos
especificar qual a ordem em que eles devem ser dispostos.

BorderLayout
Este gerenciador de layout divide o container em 5 regies distintas, que so: NORTH
(Norte). SOUTH (Sul), CENTER (Centro), EAST (Leste) e WEST (Oeste). Destacamos
que essa diviso lgica, ou seja, no podemos visualiz-la na tela.

O BorderLayout o gerenciador padro para JFrames e JApplets.
Ao utiliz-lo, somente podemos ter um componente para cada regio do container.

GridLayout
Este gerenciador de layout divide o container como se fosse uma grade com tamanhos e
espaos iguais entre os componentes. Estes, por sua vez, dividem-se nas linhas e colunas do
layout





PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 148
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
5. Componentes


Agora que j temos conhecimento de de todas as informaes anteriores, podemos adicionar
alguns componentes ao container JFrame. Vejamos quais so eles:

JLabel
Os rtulos JLabel possuem texto simples, de uma nica linha, sendo que juntamente com o
texto a ser apresentado podemos ter uma imagem. Vejamos o exemplo para a criao de um
rtulo simples:

JLabel label1 = new JLabel("Exemplo de JLabel");

Se aplicarmos o mtodo setToolTipText() ao componente, uma mensagem aparecer
automaticamente quando o mouse for posicionado sobre o componente. A sintaxe desse
mtodo a seguinte:

labell.setToolTipText("Informe aqui para que serve +
este label");

Agora, alm do texto, podemos colocar uma imagem (Icon) no componente. Ela ser o
alinhamento do texto, e a sintaxe a seguinte:

Icon img = new lmagelcon("undercom.gif");
label2 = new JLabel("Rtulo com texto e imagem",
img, SwingConstants.Left);

Em que:
Imagelcon uma classe que implementa a interface Icon, a qual possibilita a exibio de
imagens do tipo gif e jpg;

SwingConstants.XXXX uma interface que contm valores padro para alinhamento de
textos, como SwingConstants.RIGHT, SwingConstants.TIP. Esses valores podem ser
utilizados em componentes Swing.

Para especificarmos a posio do texto em relao imagem, utilizamos os seguintes
mtodos: setHorizontalTextPosition(), para posicionarmos o texto esquerda, direita ou
ao centro; setVerticalTextPosition(), para posicionarmos o texto acima, abaixo ou ao centro
da figura.
Observemos a sintaxe:

labeI2.setHorizontalTextPosition(SwingConstants.CENTER);
label2.setVerticalTextPosition(SwingConstants.TOP);

Em seguida, podemos adicionar o componente ao container. Para tanto, utilizamos a seguinte
sintaxe:

frame.getContentPane().add(label2);



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 149
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
No exemplo a seguir, temos a utilizao do componente JLabel:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex12
{
public static void main(String s[])
{
JFrame frame = new JFrame("Exemplo de trame");
frame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
JLabel label1 = new JLabel("Texto de label normal",
SwingConstants.CENTER);
Icon img = new ImageIcon("udercon.gif");
JLabel label2 = new JLabel("Rtulo com texto +
e imagem", img,
SwingConstants.CENTER);
label2.setToolTipText("Informe aqui para que +
serve este label");
label2.setHorizontalTextPosition(
SwingConstants.CENTER);
label2.setVerticalTextPosition(
SwingConstants.TOP);
frame.getContentPane().add(label1,
BorderLayout.SOUTH);
frame.getContentPane().add(label2);
frame.setSize(300,300);
frame.setVisible(true);
}
}















PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 150
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
JButton

Para inserirmos um componente do tipo boto em uma GUI, utilizamos o JButton. Este
componente permite a insero de textos e, tambm, de imagens. Mas a caracterstica
principal que quando o boto pressionado, ele pode ter um comportamento (evento)
especfico.

Para criarmos um boto, temos a seguinte sintaxe:

JButton botaol = new JButton("texto");

Para criarmos um boto com imagem, a sintaxe diferente. Observemos:

JButton imgBotao = new JButton(" Boto com imagem", img1);

Vejamos um exemplo com a utilizao de um JButton:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex13 extends JFrame
{
private JButton txtBotao, //boto simples com texto
imgBotao ;//boto com imagem
public Cap15_Ex13()
{
super("Testando JButtons");
//chamando a super classe
Container c = getContentPane();
//criao de um objeto
//do tipo content pane
c.setLayout(new FlowLayout());
txtBotao = new JButton("Boto simples");
c.add(txtBotao);
Icon img1 = new ImageIcon("smallimg.gif");
Icon img2 = new ImageIcon("UNDERCON.gif");
imgBotao = new JButton(" Boto com imagem", img1);
imgBotao.setRolloverIcon(img2);
imgBotao.setHorizontalTextPosition(
SwingConstants.CENTER);
imgBotao.setVerticalTextPosition(
SwingConstants.BOTTOM);
c.add(imgBotao);
c.add(txtBotao);
ButtonTratar tratarB = new ButtonTratar();
imgBotao.addActionListener(tratarB);
txtBotao.addActionListener(tratarB);
setSize(300,150);
show();
}

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 151
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
public static void main(String args[])
{
Cap15_Ex13 aplic = new Cap15_Ex13();
//classe annima para tratamento de janela
aplic.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//classe interna para handle event
private class ButtonTratar implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
JOptionPane.showMessageDialog(null,
"Voc pressionou: " + e.getActionCommand());
//retorna o rtulo do boto
}
}
}

JTextField

Este componente permite a criao de um componente de entrada de texto, geralmente
contendo uma linha. Quando o usurio finaliza a entrada do respectivo texto ou dado e
pressiona a tecla Return, gerado um evento.

A sintaxe para criarmos um campo texto a seguinte:

JTextField TField1 = new JTextField(20);

Nesse caso, o item (20) indica que podem existir at 20 posies visveis na tela. Agora,
temos a sintaxe para criarmos um campo texto em que um texto inicial indicado:

JTextField TField2 = new JTextField(
"Campo Texto preenchido e editvel", 20);

Alm do campo texto editvel, podemos criar um campo texto que no permite a edio do
texto inicial. A sintaxe para isso a seguinte:

JTextField TField3 = new JTextField(
"Campo Texto no editvel", 20);
TField3.setEditable(false);

As sintaxes a seguir correspondem a um campo texto que gera evento:

if(e.getSource() == TFieldl)
if(e.getSource() == TField2)
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 152
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
if(e.getSource() == TField3)

Apresentaremos, em seguida, um exemplo contendo a utilizao do componente JTextField:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex14 extends JFrame
{
String texto;
private JTextField tField1, tField2, tField3;
private JLabel lbl1, lbl2, lbl3;
public Cap15_Ex14()
{
super("Utilizando JTextField");
Container c = getContentPane();
c.setLayout(new GridLayout(3,2));
//3 colunas, 2 linhas
//JLabel (ttulos) para campos de textos
lbl1 = new JLabel("Digite um texto aqui: ",
SwingConstants.RIGHT);
lbl2 = new JLabel("Este j vem com texto ",
SwingConstants.RIGHT);
lbl3 = new JLabel("Este no pode ser editado ",
SwingConstants.RIGHT);
tField1 = new JTextField(20);
tField2 = new JTextField(
"Campo texto preenchido e editvel", 20);
tField3 = new JTextField("Campo texto no editvel",
20);
tField3.setEditable(false);
c.add(lbl1);
c.add(tField1);
c.add(lbl2);
c.add(tField2);
c.add(lbl3);
c.add(tField3);
TextFieldTratar tratarTF = new TextFieldTratar();
tField1.addActionListener(tratarTF);
tField2.addActionListener(tratarTF);
tField3.addActionListener(tratarTF);
setSize(420,120);
show();
}
public static void main(String args[])
{
Cap15_Ex14 app = new Cap15_Ex14();
app.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 153
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
System.exit(0);
}
});
}
//classe interna (inner class) para o event handling
private class TextFieldTratar implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
texto = "";
if(e.getSource() == tField1)
texto = "Contedo de tField1 = " +
tField1.getText(); // retorna o texto
else if(e.getSource() == tField2)
texto = "Contedo de tField2 = " +
tField2.getText();
else if(e.getSource() == tField3)
texto = "Contedo de tField3 = " +
tField3.getText();
JOptionPane.showMessageDialog(null,
texto, "Texto digitado",
JOptionPane.WARNING_MESSAGE);
}
}
}

JcheckBox

O JCheckBox, que uma caixa de seleo, nos permite criar um componente que possui um
rtulo para a sua identificao. Ele pode assumir dois estados: selecionado ou no-
selecionado.

Vejamos a sintaxe para criarmos uma caixa de seleo:

JCheckBox caixa = new JCheckBox("ltem 1 ");

Para verificarmos em qual componente o evento ocorreu, utilizamos a seguinte sintaxe:

if(e.getSource() == caixa[ct])

Agora, temos a sintaxe do mtodo utilizado para verificarmos o estado do componente:

if(e.getStateChange() == ItemEvent.SELECTED)

Observemos, em seguida, um exemplo prtico da utilizao do componente JCheckBox:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex15 extends JFrame
{
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 154
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
private JCheckBox caixa[];
private Icon img[], img2;
private JLabel label[];
public Cap15_Ex15()
{
super("Escolha uma ou mais figuras +
/ JCheckBox exemplo");
Container c = getContentPane();
c.setLayout(new GridLayout(2,4));
img = new ImageIcon[4];
img2 = new ImageIcon("purple.gif");
//imagem padro quando no selecionada
label = new JLabel[4];
caixa = new JCheckBox[4];
CheckBoxTratar tratarCB = new CheckBoxTratar();
for(int ct = 0; ct < 4; ++ct)
//preenchimento e imagens e labels
{
img[ct] = new ImageIcon(ct + ".gif");
//nome das figuras 0,1,2,3.gif
label[ct] = new JLabel();
label[ct].setIcon(img2);
// somente imagem
c.add(label[ct]);
}
for(int ct=0; ct<4; ++ct)
// criao das caixas de seleo
{
caixa[ct] = new JCheckBox(" Figura" + (ct+1));
c.add(caixa[ct]);
caixa[ct].addItemListener(tratarCB);
}
setSize(450,170);
show();
}
public static void main(String args[])
{
Cap15_Ex15 aplic = new Cap15_Ex15();
aplic.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
private class CheckBoxTratar implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
for(int ct=0; ct<4; ++ct)
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 155
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
//verificando evento
if(e.getSource() == caixa[ct])
if(e.getStateChange() ==
ItemEvent.SELECTED)
label[ct].setIcon(img[ct]);
else
label[ct].setIcon(img2);
}
}
}

JRadioButton

Com este componente, podemos criar um grupo de botes de seleo. A principal diferena
entre este componente e o JCheckBox que no JRadioButton apenas uma das opes pode
ser selecionada por vez. Alm disso, o formato do boto arredondado, e no quadrado
como no JCheckBox.

Para que um conjunto de botes possa assumir somente um estado, selecionado ou no,
precisamos adicion-los a um grupo, o qual tambm precisa ser criado. Vejamos, ento, a
sintaxe para criamos um boto de opo:

JRadioButton radioBot = new JRadioButton("Nome", estado);

Agora, temos a sintaxe para criarmos o grupo no qual o conjunto de botes JRadioButton
ser adicionado:

ButtonGroup radioGrupo = new ButtonGroup();

Para verificarmos em qual componente o evento ocorreu, utilizamos a sintaxe a seguir:

if(e.getSource() == radioBot)

Podemos definir nos botes de opo a fonte a ser utilizada no texto. Vejamos a sintaxe para
essa tarefa:

Font normalF = new Font("TimesRoman", Font.PLAIN, 14);

No exemplo a seguir, mostramos como utilizar o componente JRatioButton:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ExJRadioButton extends JFrame
{
private JRadioButton normal, negrito, italico, itaNeg;
private ButtonGroup radioGrupo;
private JTextField texto;
private Font normalF, negritoF, italicoF, itaNegF;
private Container c;
private RadioButtonTratar tratarRB;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 156
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
public ExJRadioButton()
{
super("RadioButton exemplo");
c = getContentPane();
c.setLayout(new FlowLayout());
texto = new JTextField("Clique nos botes para ver
+ o resultado" , 30);
c.add(texto);
tratarRB = new RadioButtonTratar();
radioGrupo = new ButtonGroup();
//criao dos JRadioBox
normal = adicRadio("Normal" , true);
negrito = adicRadio("Negrito" , false);
italico = adicRadio("Itlico" , false);
itaNeg = adicRadio("Negrito + Itlico" , false);
//criao das fontes
normalF = new Font("TimesRoman" , Font.PLAIN, 14);
negritoF = new Font("TimesRoman" , Font.BOLD, 14);
italicoF = new Font("TimesRoman" , Font.ITALIC, 14);
itaNegF = new Font("TimesRoman" , Font.BOLD +
Font.ITALIC, 14);
texto.setFont(normalF);
setSize(400,100);
show();
}
public static void main(String args[])
{
ExJRadioButton aplic = new ExJRadioButton();
aplic.addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
//definio do mtodo para adicionar componentes
private JRadioButton adicRadio(String nome, boolean b)
{
JRadioButton radioBot = new JRadioButton(nome, b);
radioBot.addItemListener(tratarRB);
c.add(radioBot);
radioGrupo.add(radioBot);
return radioBot;
}
private class RadioButtonTratar implements ItemListener
{
public void itemStateChanged(ItemEvent e)
{
if(e.getSource() == normal)
texto.setFont(normalF);
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 157
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
else if (e.getSource() == negrito)
texto.setFont(negritoF);
else if (e.getSource() == italico)
texto.setFont(italicoF);
else if (e.getSource() == itaNeg)
texto.setFont(itaNegF);
texto.repaint();
}
}
}


JPanel

Os painis tm a finalidade de facilitar a construo das interfaces de usurio. O JPanel
funciona como um container, em que outros componentes so adicionados a ele. Podem,
inclusive, serem adicionados outros painis no interior do JPanel.

Em vez de adicionarmos os componentes diretamente ao container, podemos adicion-los
aos painis. A vantagem disso que a velocidade de construo da tela maior, alm de que
h uma maior flexibilidade, pois cada painel pode ter seu prprio gerenciador de layout para
a disposio dos componentes na tela.

Aps a definio do painel, bem como de seus componentes, necessrio adicion-lo a um
JFrame.
Vejamos, ento, como criar um painel:

JPanel panSub1 = new Jpanel();

Para acrescentarmos componentes ao painel, utilizamos a seguinte sintaxe:

panSub1.add(new JButton(" Boto #1"));

Agora, temos a sintaxe utilizada para definirmos um gerenciador de layout para o painel:

panSub1.setLayout(new GridLayout(2,2));
//panSub1 2 linhas x 2colunas

Quando adicionamos outros painis no interior de um JPanel, estamos aninhando-os. Para
tanto, temos a seguinte sintaxe:

panPrin.add(panSub1);
//adiciona o painel panSubI ao painel panPrin

Observemos, a seguir, um exemplo prtico da utilizao do componente JPanel:

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Cap15_Ex17 extends JPanel
{
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 158
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
private JPanel panPrin, panSub1, panSub2;
public Cap15_Ex17()
{
panPrin = new JPanel();
panSub1 = new JPanel();
panSub2 = new JPanel();
//definio do painel 1
panSub1.add(new JButton(" Boto #1"));
panSub1.add(new JButton(" Boto #2"));
panSub1.add(new JButton(" Boto #3"));
panSub1.add(new JButton(" Boto #4"));
//definio do gerenciador de layout
panSub1.setLayout(new GridLayout(2,2));

//definio do painel 2
panSub2.add(new JButton(" Boto #5"));
panSub2.add(new JButton(" Boto #6" ) ) ;
panSub2.add(new JButton(" Boto #7"));
//definio do gerenciador de layout
panSub2.setLayout(new GridLayout(3,1));

//adiconando subpainis ao painel principal
panPrin.add(panSub1);
panPrin.add(panSub2);
super.add(panPrin);
}
public static void main(String args[])
{
Cap15_Ex17 aplic = new Cap15_Ex17();
JFrame frame = new JFrame("Utilizando o painel);
frame.getContentPane().add(aplic);
frame.setSize(350,150);
frame.setVisible(true);
frame.addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
}

Nota: No gerenciador de layout BorderLayout permitida a incluso de apenas um
componente (boto) em seu interior. Isso, contudo, se no utilizarmos os painis.






PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 159
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 16


1. Introduo


Os Applets so definidos como sendo pequenos programas ou aplicaes executados em
browsers. A maioria dos browsers disponveis no mercado foi desenvolvida para suportar
Applets criados em Java. No caso do Internet Explorer, aquela que garante o reconhecimento
dos Applets em Java a MVM (Microsoft Virtual Machine) ou o JRE da Sun.
Depois de compilarmos um Applet em Java, precisamos criar um arquivo sob a extenso
HTML ou HTM (Caso seja alguma aplicao ASP, poder ser extenso asp), a fim de
que a visualizao deste Applet seja possvel. Em seguida, dentro do arquivo gerado,
devemos criar uma tag para que o Applet seja chamado. Ento, por meio do browser,
abrimos o arquivo para que o Applet seja automaticamente carregado.

A seguir, um exemplo de criao de um applet:

Primeiro, o arquivo em htm salvo como Cap16_Ex1.htm:

<applet code = Cap16_Ex1 WIDTH = 300 HEIGHT = 200> </applet>

Agora, a classe para gerar o applet:

import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class Cap16_Ex1 extends Applet
{
Label lb;
public void init()
{
lb = new Label(" Hello Applet!");
add(lb);
}
}















PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 160
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
2. Principais mtodos


Um Applet contm quatro mtodos principais, descritos na tabela a seguir:
Mtodo Descrio
Init() Este mtodo executado uma nica vez, no
momento em que a pgina carregada pela
primeira vez. indicado us-lo para carregar
e inicializar todas as variveis a serem
empregadas no Applet.
start() Este mtodo, executado logo depois do
init(), indicado para iniciar arquivos de
som e animaes grficas.

stop() Este mtodo chamado toda vez que a
janela do Applet deixar de ser a principal,
como quando minimizamos ou mudamos da
pgina do Applet para uma outra. Quando
voltamos para a pgina do Applet, o start()
novamente executado.
destroy() Quando executado, este mtodo "libera"
recursos que foram alocados pelo Applet.
recomendvel chamar o destroy() assim que
estivermos certos de que a pgina no ser
mais utilizada.

Vale ressaltar que o uso desses quatro mtodos dentro de um Applet no obrigatrio.


3. Restries de applets


Uma das caractersticas de um Applet refere-se ao fato dele ser executado na mquina
cliente. Por esta razo, os Applets esto sujeitos a algumas restries, no que diz respeito
impossibilidade destes em realizar certas operaes por meio do browser.
As restries citadas envolvem o fato de os Applets no poderem realizar qualquer tentativa
de acesso a dados locais na mquina cliente, alm de s se comunicarem com a mquina em
que esto hospedados. Estes recursos somente podero ser utilizados em um Applet por meio
de uma assinatura digital em conjunto com o browser.


4. Applet x Awt x Swing


Para que possamos utilizar componentes Swing em Applets, a instalao do Java Plug-in na
mquina cliente torna-se essencial. Para atender tal exigncia, adotaremos o pacote AWT
com a finalidade de construir, nos browsers, os componentes grficos em tela.



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 161
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
/* A seguir, temos o exemplo Applet - capturando eventos
*/
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class Cap16_Ex2 extends Applet
{
public void init()
{
setBackground(Color.yellow);
add(new Label("Hello Applet"));
addMouseListener(new MouseAdapter()
{
public void mouseEntered(MouseEvent e)
{
setBackground(Color.red);
}
public void mouseExited(MouseEvent e)
{
setBackground(Color.blue);
}
});
}
}

/* A seguir, temos o exemplo
Applets - capturando eventos botes
*/
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
public class Cap16_Ex3 extends Applet
{
Button b1, b2;
TextField txt = new TextField(25);
public void init()
{
setBackground(Color.green);
setLayout( new FlowLayout() );
add( b1 = new Button(" Boto 1"));
add( b2 = new Button(" Boto 2"));
b1.addActionListener(alist);
b2.addActionListener(alist);
add(b1);
add(b2);
add(txt);
}

ActionListener alist = new ActionListener()
{
public void actionPerformed( ActionEvent e)
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 162
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
{
if (e.getActionCommand() == "Boto 1")
txt.setText(" Voc pressionou o boto 1");
else if (e.getActionCommand() == "Boto 2")
txt.setText("Voc pressionou o boto 2");
}
};
}


5. Passando parmetros para um applet


Para passar parmetros de uma pgina de HTM para um Applet, precisamos definir a tag
PARAM na pgina, como descrito no seguinte exemplo:

<PARAM NAME="msg" VALUE="teste passando parmetro">

Onde:

O atributo NAME trata o nome do parmetro como uma string;

O atributo VALUE trata o nome do parmetro como uma string que pode ser convertida
convenientemente dentro do programa, caso seja necessrio.

Assim, criaremos uma varivel do tipo String para que a mesma receba como valor o mtodo
getParameter(String nome), cujo argumento o prprio nome do parmetro que foi
definido na pgina HTM. Esta varivel String importante para obtermos o valor do
parmetro no programa.

Considerando o exemplo anterior, a chamada do mtodo citado seria getParameter("msg"),
retornando um valor String "teste passando parmetro".


6. Imagens e sons


Uma das caractersticas dos Applets o suporte para som e imagem. Os Applets aceitam a
implementao de imagens do tipo JPEG ou GIF (que tambm pode ser animado) e
arquivos de som do tipo MIDI, WAV, AU e AIFF.
O exemplo seguinte descreve o uso de parmetros especificados pela pgina HTM para que
os arquivos de som e imagem sejam recebidos:

Nome do arquivo: Cap16_Ex4.htm
<html>
<title>Usando Parmetros</title>
<body>
<applet code = Cap16_Ex4 WIDTH=300 HEIGHT=200>
<PARAM NAME = "par1" VALUE = "bld.jpg">
<PARAM NAME = "par2" VALUE = "spacemusic.au">
</applet>
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 163
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
</body>
</html>


/* A seguir, temos o exemplo Applet - parmetros, imagem, som
*/
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class Cap16_Ex4 extends Applet
{
String imagem, som;
Image img;
AudioClip s;
Button b1,b2,b3;
public void init()
{
imagem = getParameter("par1");
som = getParameter("par2");
img = getImage (getDocumentBase(), imagem);
s = getAudioClip(getDocumentBase(), som);
setLayout(new FlowLayout());
add(b1 = new Button("Play"));
add(b2 = new Button("Stop"));
add(b3 = new Button("Loop"));
b1.addActionListener(alist);
b2.addActionListener(alist);
b3.addActionListener(alist);
add(b1);
add(b2);
add(b3);
}
ActionListener alist = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand() == "Play")
s.play();
else if (e.getActionCommand() == "Stop")
s.stop();
else if (e.getActionCommand() == Loop")
s.loop();
}
};

public void paint(Graphics g)
{
g.drawImage(img,0,0,this);
}

public void stop()
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 164
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
{
s.stop();
}
}


/* A seguir, temos o exemplo Applet - URL
*/
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.net.*;
public class Cap16_Ex5 extends Applet
{
Button b1;
URL u;
public void init()
{
setLayout(new FlowLayout());
add(b1 = new Button("Mudar"));
b1.addActionListener(alist);
add(b1);
try
{
u = new URL(getDocumentBase(),"Cap16_Ex2.htm);
}
catch(Exception e)
{
showStatus("Erro na URL !...");
}
}
ActionListener alist = new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand() == "Mudar")
getAppletContext().showDocument(u);
}
};
}











PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 165
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 17


1. Introduo

Uma exceo um objeto gerado com o propsito de indicar que algum tipo de
condio excepcional ocorreu durante a execuo de uma chamada de mtodo
ou construtor.
Assim, as excees esto associadas a condies de erro que no tinham como
ser verificadas durante a compilao do programa e que acontecero somente
durante a sua execuo.
As duas atividades associadas manipulao de uma exceo so: gerao e
captura. A manipulao (tratamento) de uma situao excepcional significa
definir aes necessrias para a recuperao da situao de falha e dar
continuidade a execuo do programa.
Para cada exceo que pode ocorrer durante a execuo de um cdigo java, um
bloco de aes de tratamento (um exception handler) dever ser especificado.
um mecanismo adequado manipulao de erros sncronos, para situaes
onde a recuperao da falha possvel.

A hierarquia de excees




Uma exceo em Java um objeto. A classe raiz de todas as excees a
java.lang.Throwable. Apenas objetos dessa classe ou de suas subclasses
podem ser gerados, propagados e capturados atravs do mecanismo de
tratamento de excees.



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 166
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
A classe java.lang.Throwable tem duas subclasses:
java.lang.Exception: a superclasse das classes derivadas de
java.lang.Throwable que indica situaes que a aplicao pode gerar e
realizar um tratamento apropriado permitindo prosseguir com o processamento.
Exemplo: Quando acessamos um arquivo, deveremos nos preocupar com as
condioes de erro de IO (entrada e sada), para isso existe a classe
java.io.IOException;
java.lang.Error: a superclasse das classes derivadas de
java.lang.Throwable que indica situaes que a aplicao no poder tratar.
Usualmente indica situaes anormais, que no deveriam ocorrer dentro da JRE.
Exemplo: Se por alguma condio anormal, ocorrer uma falha no sistema
operacional que impea da JRE alocar memria, aconter uma
java.lang.OutOfMemoryError.

Excees mais conhecidas
java.lang.ArithmeticException: indica situaes de erros em processamento
aritmtico, tal como uma diviso inteira por 0.

java.lang.NumberFormatException: indica que tentou-se a converso de uma
String para um formato numrico, mas seu contedo no representava
adequadamente um nmero para aquele formato. uma subclasse de
java.lang.IllegalArgumentException.

java.lang.ArrayIndexOutOfBoundsException: indica a tentativa de acesso a
um elemento de um array fora de seus limites -- ou o ndice era negativo ou era
maior ou igual ao tamanho do array. uma subclasse de
java.lang.IndexOutOfBounds, assim como a classe
java.lang.StringIndexOutOfBounds.

java.lang.NullPointerException: indica que a aplicao usou uma referncia
com valor null para invoca um mtodo ou acessando um atributo de um objeto,
por exemplo.

java.lang.ClassNotFoundException: indica que a aplicao tentou carregar
uma classe mas no foi possvel encontr-la.

java.io.IOException: indica a ocorrncia de algum tipo de erro em operaes
de entrada e sada.
Entre os erros mais conhecidos , subclasses de java.lang.Error, esto
java.lang.StackOverflowError e java.lang.OutOfMemoryError. So
situaes onde no possvel uma correo a partir de um tratamento realizado
pelo prprio programa que est executando.

Como as excees em java so objetos, podem incluir atributos, mtodos e
construtores. A classe java.lang.Throwable inclui o registro do estado atual da
pilha de chamadas de mtodos e uma String associada a uma mensagem de
erro, que pode ser obtida para qualquer exceo atravs do mtodo
Throwable.getMessage().
Todas as excees derivadas de java.lang.RuntimeException, no so
obrigadas a serem tratadas, pois so condies excepcionais que acontecem por
falha nos algoritmos que o programador desenvolveu durante a chamada
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 167
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
daquele mtodo. Estas so chamadas tecnicamente de Unchecked
Except i ons.

Todas as excees derivadas de java.lang.Exception, exceto as derivadas de
java.lang.RuntimeException, so obrigadas a serem tratadas, pois so
condies excepcionais esperadas e que podem acontecer durante a chamada
daquele mtodo. Estas so chamadas tecnicamente de Checked Except i ons
Todas as excees derivadas de java.lang.Error, devem ser tratadas,
entretanto, quando aconterem interrompem a execuo do aplicativo. Estas so
chamadas tecnicamente de Er r or s

Capturando e tratando excees.

A sinalizao da exceo propagada a partir do bloco de cdigo onde ela
ocorreu atravs de toda a pilha de invocaes de mtodos at que a exceo
seja capturada por um bloco manipulador de exceo.

Eventualmente, se tal bloco no existir em nenhum ponto da pilha de
invocaes de mtodos, a sinalizao da exceo atinge o mtodo main(),
fazendo com que o interpretador Java apresente uma mensagem de erro e
aborte sua execuo.

Estrutura try-catch-finally.

A captura e o tratamento de excees em Java se d atravs da especificao
de blocos try, catch e finally, definidos atravs destas mesmas palavras
reservadas da linguagem. Um comando try/catch/finally obedece seguinte
sintaxe:

try
{
// cdigo que inclui comandos/invocaes de mtodos
// que podem gerar uma situao de exceo.
}
catch (Throwable t)
{
// bloco de tratamento associado condio de
// exceo derivada de Throwable ou a qualquer uma de //suas
// subclasses, identificada aqui pelo objeto
// com referncia t
}
finally
{
// bloco de cdigo que sempre ser executado aps
// o bloco try, independentemente de sua concluso
// ter ocorrido normalmente ou ter sido interrompida
// este bloco opcional
}

Os blocos no podem ser separados por outros comandos -- um erro de sintaxe
seria detectado pelo compilador Java neste caso. Cada bloco try pode ser
seguido por zero ou mais blocos catch, onde cada bloco catch refere-se a uma
nica exceo.
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 168
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
O bloco finally, quando houver, sempre executado independente se houve ou
no uma exceo.

Em geral, ele inclui comandos que liberam recursos que eventualmente possam
ter sido alocados durante o processamento do bloco try e que necessitam ser
liberados, independentemente de a execuo ter encerrado com sucesso ou ter
sido interrompida por uma condio de exceo. A presena desse bloco
opcional.

Usando o bloco try-catch.

No programa abaixo faremos a leitura de um nmero via teclado, esta operao
exige o uso de mecanismo de IO, que por sua vez podem gerar excees que
devem ser tratadas.

import java.io.*;
public class ConverteInteiro
{
public String leLinha()
{
byte[] lidos = new byte[20];
System.in.read(lidos); // l o buffer do teclado
String texto = new String(lidos);
return texto;
}
public int leInt()
{
String linha = leLinha();
return Integer.parseInt(linha);
}
public static void main(String[] args)
{
ConverteInteiro ci = new ConverteInteiro ();
System.out.print("Entre inteiro: ");
int valor = ci.leInt();
System.out.println("Valor lido foi: " + valor);
}
}

Compilando o programa, vemos que o compilador informa que uma exceo
esperada java.io.IOException que uma Checked Exception, no foi
devidamente tratada.

Lendo a documentao da classe java.lang.System da Java API, vemos que o
mtodo read() do atributo esttico in que do tipo java.io.InputStream foi
definido assim:


public int read(byte[] b) throws java.io.IOException

Veja mais detalhes no link abaixo (via internet) a definio:
http://java.sun.com/j2se/1.4.1/docs/api/java/io/InputStream.html -
read(byte[])

PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 169
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
A keyword throws, indica que este mtodo gera e arremessa a quem cham-lo
uma exceo do tipo java.io.IOException em uma determinada situao, e
que se esta situao acontecer, o chamador deve estar apto a interpret-la.

Corrigindo o programa, inserimos o bloco de tratamento de excees para a
exceo esperada que gerada pelo mtodo
System.in.read(byte[] b)throws IOException.

import java.io.*;
public class ConverteInteiro2
{
public String leLinha()
{
byte[] lidos = new byte[20];
String texto = "";
try
{
System.in.read(lidos); // le o buffer do teclado
texto = new String(lidos);
texto = texto.trim(); // retira os espacos em
branco
}
catch (IOException ioException)
{
// se acontecer um erro na leitura
// imprime na tela o erro
ioException.printStackTrace();
}
return texto;
}
public int leInt()
{
String linha = leLinha();
return Integer.parseInt(linha);
}
public static void main(String[] args)
{
ConverteInteiro2 ci = new ConverteInteiro2();
System.out.print("Entre inteiro: ");
int valor = ci.leInt();
System.out.println("Valor lido foi: " + valor);
}
}

Vemos que a compilao acontece com sucesso!.










PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 170
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Criando excees customizadas.

Em muitos casos, para facilitar o mapeamento das falhas em nossas aplicaes
para mensagens amigveis para o usurio criaremos excees customizadas
para essas funcionalidades.
Imaginando o problema de um banco. Quando manipulamos operaes de
dbito e crdito, devemos seguir algumas regras. A seguir veremos dois cdigos
fontes, um que se utiliza do mecanismo de tratamento de excees e outro que
no.
Sem o mecanismo try-catch.

public class Conta
{
private double saldo;
public boolean debito(double valor)
{
if ( valor < 0 )
{
return false;
}
else
{
if ( saldo - valor < 0 )
{
return false;
}
else
{
saldo -= valor;
return true;
}
}
}
public boolean credito(double valor)
{
if ( valor < 0 )
{
return false;
}
else
{
saldo += valor;
return true;
}
}
public double getSaldo()
{
return saldo;
}
}

public class TesteConta
{
public static void main(String args[])
{
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 171
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Conta c1 = new Conta();
System.out.println("Realizado: "+ c1.debito(100) );
System.out.println("Saldo: "+ c1.getSaldo() );
System.out.println("Realizado: "+ c1.credito(100) );
System.out.println("Saldo: "+ c1.getSaldo() );
System.out.println("Realizado: "+ c1.credito(-100) );
System.out.println("Saldo: "+ c1.getSaldo() );
System.out.println("Realizado: "+ c1.debito(-100) );
System.out.println("Saldo: "+ c1.getSaldo() );
}
}

Com o mecanismo try-catch.

Neste caso, criaremos uma nova classe exceo que represente saldo
insuficiente:
SaldoInsuficienteException, como vimos, todas as excees que devem ser
tratadas devem ser subclasses de java.lang.Exception.

public class SaldoInsuficienteException extends Exception
{
public SaldoInsuficienteException ()
{
super("Falta de saldo para esta operao!");
}
public SaldoInsuficienteException (String mensagem)
{
super(mensagem);
}
}

Alteraremos a classe Conta, para quando o saldo for insuficiente, seja gerada e
arremessada uma exceo com uma mensagem amigvel.

public class Conta2
{
private double saldo;
public void debito(double valor)
t hr ows Sal doI nsuf i ci ent eExcept i on
{
if ( valor < 0 )
{
// unchecked exception no precisa ser declarada na
clausula thorws
throw new IllegalArgumentException
("Valor de debito deve ser maior que zero!");
}
else
{
if ( saldo - valor < 0 )
{
// checked exceptio, deve ser declara na
clausula throws
t hr ow new Sal doI nsuf i ci ent eExcept i on
( " Sal do i nsuf i ci ent e! At ual : " +sal do) ;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 172
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
}
else
{
saldo -= valor;
}
}
}
public void credito(double valor)
{
if ( valor < 0 )
{
// unchecked exception no precisa ser declarada na
clausula thorws
t hr ow new I l l egal Ar gument Except i on
( " Val or de cr edi t o deve ser mai or que zer o! " ) ;
}
else
{
saldo += valor;
}
}
public double getSaldo()
{
return saldo;
}
}

Alteraremos a classe TesteConta, para usar o mecanismo try-catch-finally e
tratar a exceo criada quando ela acontecer.

public class TesteConta2
{
public static void main(String args[])
{
Conta2 c2 = new Conta2();
try
{
c2.credito(100);
System.out.println("Saldo: "+ c2.getSaldo() );
c2.debito(50);
System.out.println("Saldo: "+ c2.getSaldo() );
c2.debito(500);
System.out.println("Saldo: "+ c2.getSaldo() );
}
catch (SaldoInsuficienteException e)
{
// se acontecer uma SaldoInsuficienteException
// caira neste bloco
e.printStackTrace();
}
catch (Exception e)
{
// se acontecer qualquer outra Exception
// caira neste bloco
e.printStackTrace();
}
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 173
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
finally
{
System.out.println("Saldo: "+ c2.getSaldo() );
}
}
}

O uso do mecanismo de excees para estes casos evita a codificao de
estruturas de controle complexo na execuo de chamadas de mtodos
consecutivos e dependentes, facilitando a construo e o entendimento do fluxo
do programa.










































PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 174
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Captulo 18


1. Introduo

Objetos do Banco de Dados

A criao de um banco de dados compreende uma srie de instrues para
definio de como sero as caractersticas do banco; onde os dados sero
fisicamente armazenados; quantos usurios iro utilizar o banco
simultaneamente; como ser a configurao da instncia do banco, entre outras
informaes. Mas no basta apenas criar o banco. necessrio que este banco
tenha estruturas que possibilitem o armazenamento de dados, o acesso aos
dados e mecanismos que auxiliem na recuperao dos dados, entre outros. Os
objetos do banco representam estas estruturas e so criados e manipulados
com as instrues DDL Data Definition Language, e suas definies ficam
armazenadas no dicionrio de dados (Data Dictionary) do banco. Como
exemplos de objetos pode-se citar:

Tabela (Table)
Viso (View)
Seqncia (Sequence)
ndice (Index)
Usurio (User)
Personagem (role)
Procedimentos (Procedure)
Funes (Function)
Gatilhos (Trigger)
Pacotes (Package)

Usurios do Banco de Dados

Os usurios do banco de dados so as pessoas que utilizam o banco de dados e
seus objetos, direta ou indiretamente, e esto agrupados nas seguintes
categorias:
desenvolvedor de aplicaes: o profissional responsvel pela construo de
aplicaes que iro acessar a base de dados para realizar consultas, alteraes
ou excluses de dados;
usurio final: a pessoa que faz uso dos dados consolidados, para tomada de
deciso ou simples consulta ou atualizao. Normalmente, interage com o banco
por intermdio de aplicaes.
analista de Banco de dados (Case): o usurio responsvel pela modelagem
dos dados e implementao do banco de dados nos nveis lgico e fsico junto
com o DBA.
administrador de banco de dados: o profissional que tem as seguintes
responsabilidades:
Instalar e atualizar o banco de dados e as ferramentas de aplicao;
Alojar sistemas de armazenamento e planejar os futuros armazenamentos de
requerimentos para o sistema de banco de dados;
Criao e armazenamento das estruturas primrias para que os
desenvolvedores possam gerar aplicaes;
Criao de objetos primrios, uma vez que os usurios tenham construdo uma
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 175
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
nova aplicao;
Modificar a estrutura do banco de dados para adequ-lo s novas aplicaes;
Garantir a disponibilidade do banco de dados, bem como a performance do
mesmo;
Controlar e monitorar os acessos dos usurios ao banco de dados (Segurana);
Fazer o backup das informaes e a restaurao;
Manter um controle sobre os backup's.

JDBC API

Dentro das classes java, o pacote java.sql fornece o modelo necessrios para
o acesso a bancos de dados atravs do modelo JDBC (Java DataBase
Connectivity).
Como existem vrios fornecedores de bancos de dados, a JavaSoft definiu
essencialmente interfaces que definem os mtodos que um Driver JDBC deve
fornecer para a manipulao de comandos SQL.


Responsabilidades funcionais.

As interfaces disponveis no pacote java.sql definem como o fabricante deve
implementar as classes para a manipulaco de comandos SQL.
Para facilitar o desenvolvimento, cada interface tem uma responsabilidade
dentro do conceito de acesso, execuo, manipulao e processamento de
comandos dentro de um banco de dados relacional.

Categoria Componente Funcionalidade
Carregar um
Driver.

java.sql.DriverManager
Gerencia um conjunto de
drivers.
Representar
um Driver e
criar uma
conexo.
java.sql.Driver
Fornece uma conexo e
informaes do driver. UM
Driver representado por uma
URL.
Representar
a Conexo.
java.sql.Connection
Representa uma conexo e
uma sesso ao banco.
Executar
comandos
SQL
java.sql.Statement



java.sql.PreparedStatement





java.sql.CallableStatement

Executar um comando SQL
esttico.

Executar comandos Pr-
Compilados e facilitar o
mapeamento Objeto-Relacional.

Executar Strored Procedures
(Funes criadas e
armanazenadas dentro do
banco de dados.)
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 176
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Recuperar
dados
resultantes
de um
comando
SELECT

java.sql.ResultSet
Fornece uma lista dentro da
aplicao que uma espelho
das informaes contidas no
banco de dados resultante da
execuo de um SELECT.
Excees
java.sql.SQLException
Representa erros durante a
execuo dos comandos SQL.


Entendendo o funcionamento dos componentes da API JDBC.

Agora que j sabemos um pouco sobre tipos e o mapeamento para os tipos do
Java, veremos como usar a API JDBC para manipular comandos SQL.

O que um Driver?

Driver um tipo de software que tem por finalidade permitir a comunicao
entre dois sistemas.

Ex:
Software <-> Driver <-> Arquivo de Dados
(java) (ODBC) Access

Os drivers geralmente so fornecidos pelos fabricantes, mas comum encontrar
drivers genricos distribudos com o sistema operacional e tambm drivers de
terceiros.
O que um ODBC?

OBDC Open Database Connectivity/Padro aberto de conectividade a banco de
dados uma interface com grande disponibilidade de drivers para acesso a
banco de dados.
O uso da ponte ODBC-JDBC uma das formas possveis para aplicaes Java
acessar arquivos de dados.

O que um JDBC?

JDBC Java Database Connectivity/Padro Java de conectividade a banco de
dados a interface que possibilita s aplicaes Java acessarem bancos de
dados relacionais e demais arquivos de dados.

JDBC-ODBC

Embora um programa em Java possa utilizar diretamente a interface ODBC para
acessar arquivos de dados, este procedimento trabalhoso e elimina a
portabilidade da aplicao. No devemos esquecer que os drivers ODBC
geralmente so escritos em C. Para superar este obstculo, os programadores
utilizam a ponte JDBC-ODBC.



PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 177
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
Criando uma fonte de dados ODBC.

Abra o aplicativo Fonte de Dados ODBC(32 bits) (Windows 2000)
ouAdministrador de Fonte de dados ODBC (Windows XP).
Na guia NFD de Sistema (Windows 2000) ou Fonte de dados de Sistema
(Windows XP) clique em adicionar.
Selecione Driver para o Microsoft Access(*.mdb) (Windows 2000) ou Driver do
Microsoft Access (Windows XP) e clique em concluir.
D um nome para o seu banco de dados, no nosso caso, d o nome de
Empresa.
Clique em selecionar e localize o banco de dados EMPRESA.MDB disponibilizado
pelo professor.
Clique em Ok e clique novamente em Ok.
Est criado nossa fonte de dados ODBC.

Lembre-se:

Voc precisa criar uma fonte de dados para cada banco de dados que pretenda
estabelecer conexo. Esta fonte de dados poder servir qualquer linguagem de
programao.



Anatomia de uma conexo

// Linha de comentrio

import java.sql.*;

class NomeDaClasse
{

public static void main (String args[])
{
try
{

String url = "jdbc:odbc:nome_da_fonte_de_dados";
String usuario = "";
String senha = "";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection con;
con =
DriverManager.getConnection(url,usuario,senha);

System.out.println("Conexo realizada com
sucesso.");

con.close();
}

catch(Exception e)
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 178
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
{
System.out.println("Mensagem a ser exibida");
}
}
}

Explicando o cdigo:

import java.sql.*;
Importa as classes que implementam o acesso a banco de dados com o Java.

try { ...
Toda classe de acesso banco de dados TEM que ter captura de excees, por
ser do tipo Checked Exception.

String url = "jdbc:odbc:nome_da_fonte_de_dados";
String usuario = "";
String senha = "";
Onde so criadas as Strings de conexo, o nome do usurio e a senha. Lembre-
se que a fonte de dados criada em operao parte.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Este comando carrega o driver que ser usado pela aplicao java para realizar
a comunicao com o banco de dados.

Connection con;
Cria uma conexo de nome com.

con = DriverManager.getConnection(url,usuario,senha);
Estabelece a conexo usando os valores das variveis declaradas e inicializadas.

con.close();
Fecha a conexo aberta. Lembre-se de sempre fechar uma conexo aberta,
para evitar problemas.

Testando a conexo

// TESTA CONEXO

import java.sql.*;

class Cap18_Ex1
{

public static void main (String args[])
{
try
{
String url = "jdbc:odbc:Empresa";
String usuario = "";
String senha = "";

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

Connection con;
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 179
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
con =
DriverManager.getConnection(url,usuario,senha);

System.out.println("Conexo realizada com
sucesso.");

con.close();
}

catch(Exception e)
{
System.out.println("Problemas na conexo. +
Verifique a digitao dos nomes e a existncia
+
da fonte de dados. \nRecompile e +
execute novamente.");
}
}
}

Consultando dados (SELECT)

A classe seguinte insere dados em nossa tabela Cliente.

// SELECT

import java.sql.*;
class Cap18_Ex2
{
public static void main (String args[])
{
try
{
String url = "jdbc:odbc:Empresa";
String usuario = "";
String senha = "";
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con;
con =
DriverManager.getConnection(url,usuario,senha);
Statement st = con.createStatement();
ResultSet rs =
st.executeQuery("SELECT * FROM Cliente");
while (rs.next())
{
System.out.print(
rs.getString("CodCli") + " ");
System.out.print(
rs.getString("Nome") + " ");
System.out.print(
rs.getString("Telefone") + " ");
System.out.print(
rs.getString("DtNascimento") + " ");
}
System.out.println("Operao realizada com +
sucesso.");
PDF created with pdfFactory trial version www.pdffactory.com
Programao de Computadores I Linguagem Java
Pgina 180
ETECSP/ETECPJ Prof. Osvaldo Rodrigues Srgio
st.close();
con.close();
}

catch(Exception e)
{
System.out.println("Problemas na conexo. +
Verifique a digitao dos nomes e a +
existncia da fonte de dados. +
\nRecompile e execute novamente.");
}
}
}

Explicando o Cdigo:

Statement st = con.createStatement();
Criando uma varivel da Classe Statement, para execuo de comando.

ResultSet rs = st.executeQuery("SELECT * FROM Cliente");
Criando uma varivel da classe ResultSet, que recebe uma executeQuery
(Execuo de consulta), atravs de uma clusula SQL.

while (rs.next())
Faz um loop, enquanto for verdadeiro a existncia de novo registro. Lembrando
que quando realizamos a executeQuery, o ponteiro do resultado posicionado
no primeiro registro.

rs.getString("CodCli") + " ");
o getString executa o processo de buscar na consulta o valor do campo
indicado. Note que o + para garantir que, caso o campo tenha um valor
nulo, no resulte em erro a operao de exibio/atribuio de valor.

Concluso:

Como podemos observar, o acesso banco de dados pelo Java bem simples e
muito parecido com a conexo ADO da Microsoft. Os comandos SQL funcionam
independente do banco de dados a ser acessado deve-se mudar somente
alguns detalhes, quando o banco de dados que for acessado no seguir o
padro SQL-ANSII 92, como o caso do MS-ACCESS.

PDF created with pdfFactory trial version www.pdffactory.com