Você está na página 1de 61

1

Introduo e Instalao

Introduo
Jav a uma linguagem de programao de alto nvel e orientada objetos criada pela empresa Sun Microsystems no
comeo da dcada de 90. A sintaxe da linguagem muito parecida com C e C++, mas ela possui um nmero maior
de facilidades e funcionalidades.

Por que aprender Java?


A linguagem Java possui uma srie de vantagens como:
Quando um programa em Java compilado, gerado um conjunto de bytecodes java, no um programa
executvel normal. Um conjunto de bytecodes geralmente pode ser interpretado em qualquer mquina ou sistema
operacional que possua suporte Java. Com isso, s preciso compilar o seu programa uma nica vez e ele pode
ser rodado em quase qualquer arquitetura.
uma linguagem fcil de ser usada.
Possui "Coleta de Lixo" automtica. Isso significa que ela desaloca automaticamente qualquer espao de memria
no utilizado sem que o programador se preocupe com isso.
No expe rotinas de baixo nvel tornando a execuo mais estvel.

Desvantagens da Linguagem
Apesar disso, a linguagem tambm possui as seguintes desvantagens:
Performance reduzida: por ser uma linguagem no projetada para gerar cdigo nativo para cada arquitetura, os
programas em Java costumam ter um desempenho menor que os escritos em linguagens como C++. Eles tambm
costumam ocupar mais espao em memria. Mas medida que a linguagem vem sendo refinada, tal desvantagem
vem diminuindo cada vez mais.
Programas em Java geralmente demoram mais tempo para compilar.
Programas que realizam clculo com nmeros em ponto flutuante tendem a possuir baixo desempenho.
O que Java 2

O que Java
Jav a uma linguagem de programao orientada a objetos, fcil de se aprender, e que possui como maior
vantagem ser portvel entre as diversas plataformas existentes.
Por exemplo, se o programa java for feito em uma plataforma Linux, ele pode ser usado na plataforma FreeBSD ou
Windows - o programa rodar sem problema nenhum desde que a JR E (Java Runtim e Environm ent), tambm
conhecida como M quina V irtual Jav a (Java Virtual Machine) esteja instalada na plataforma.
Linguagens como C e C++ rodam em diversas plataformas, mas os programas precisam ser recompilados, o que no
acontece com o Java onde o mesmo binrio pode ser portado. Alm disso a linguagem pode ser usada para
desenvolver programas para a maioria dos celulares, PDA's (Palm Tops) alm de diversos dispositivos como cartes
(Vale Refeio, Vale transporte, Cartes de acesso).

Caractersticas de linguagens orientadas a objetos


Antes de aprender Java, preciso conhecer quais so as caractersticas da Programao Orientada a Objetos (POO)
que ela possui. Este captulo tem por intuito mostrar a filosofia da POO para programadores no habituados ela.

O que so Objetos
Em programao, objetos nada mais so do que um conjunto de dados sobre o qual esto definidas algumas
operaes. Se fssemos criar um programa capaz de gerar na tela formas geomtricas, por exemplo, poderamos criar
um objeto chamado "quadrado" que seria um conjunto de quatro nmeros (que em POO so chamados de Atributos)
que representam os seus vrtices. O objeto "quadrado" poderia possuir as operaes (que em POO so chamadas de
Mtodos) "MudaPosicaoO" que serviria para posicionar o quadrado em uma coordenada especfica passada como
argumento e MudaCor() que trocaria a cor do quadrado desenhado na tela.
Os Atributos de um objeto so quaisquer variveis que eles possuam que representam um nmero, caractere ou
string. Se fssemos programar um jogo, por exemplo, o personagem que o jogador controla poderia possuir atributos
chamados Fora, Resistncia e Velocidade que seriam variveis inteiras dentro do cdigo. Ele tambm poderia
possuir um atributo chamado Posio, que seria um vetor de inteiros que armazenariam a sua coordenada na tela.
Os Mtodos de um objeto podem ser qualquer ao que o objeto pode executar. No jogo do exemplo acima, o
personagem principal poderia possuir um mtodos chamados Pular, Atirar e Andar. Os Mtodos nada mais so do
que funes executadas sobre os Atributos de um Objeto.

Classes
Classes nada mais so do que uma declarao de um objeto no comeo do cdigo. Nesta declarao, voc especifica
quais so os Atributos e Mtodos(Comportamentos)de seu objeto. Por exemplo, uma vez que voc crie uma classe
chamada "quadrado", voc pode passar a criar novos objetos pertencentes esta classe, que poderiam ter diferentes
valores para cada um de seus Atributos.
Classe um conjunto de especificaos tcnica de um objeto, Nesta declarao, pode-se especificar quais so os
Atributos e Metodos(Comportamentos) da classe. Por exemplo, uma vez que seja criada uma classe chamada
"quadrado", pode-se passar a criar novos objetos pertencentes esta classe, que podem ter diferentes valores para
cada um de seus Atributos.
Caractersticas de linguagens orientadas a objetos 3

Herana
Herana a capacidade que as classes tem de passar informaes umas para as outras. Atravs da herana possvel
criar fcil e rapidamente novos tipos de classes baseadas nas classes existentes. Por exemplo, assumindo que existe
uma classe chamada "Veiculo", poderamos gerar uma nova classe chamada "Carro", e outra classe chamada
"Caminhao" que herdam (ou so filhas) de "Veiculo".
A classe "Veiculo" possui todos os Atributos que tem em comum entre um caminho e um carro. Ambos possuem
caracteristicas (Atributos) como, nmero de rodas, tipo de combustvel, quantidade de portas, etc. Estes Atributos
esto definidos na classe "Veiculo". Por sua vez, as classes "Carro" e "Caminho", alm de herdarem os atributos da
classe "Veiculo", podem possuir seus prprios Atributos exclusivos. O mesmo ocorre com os Metodos.
Por exemplo, a classe "Caminhao", que poderia ter o Atributo numero de marchas reduzidas, que no faz sentido
para um carro, apenas para um caminho.
Para identificar se dois objetos tem uma relao de herana, deve-se analisar se o relacionamento do tipo " um
tipo de". Por exemplo, Carro um tipo de Veiculo, logo Carro herda de Veiculo; Cachorro um tipo de Mamifero, e
assim por diante.
Nota: em outras linguagens orientadas a objeto, como C++, existe herana mltipla, ou seja, uma classe pode herdar
de mais de uma. Ex.: 'morcego um tipo de mamfero' E 'morcego um tipo de animal que voa'. Em java NO
EXISTE herana mltipla! O que pode ser feito para simular isso implementar uma Interface, mas isso ser visto
mais adiante.

Sobrecarga de mtodos
Algumas vezes uma mesma operao pode ser feita de diversas maneiras, utilizando informaes diferentes. Isso
pode ser feito utilizando a sobrecarga de mtodos. Consiste em criar mais de um mtodo com o mesmo nome, porm
com parmetros de entrada diferentes. Isso muito usado quando uma funo tem valores padro. Cria-se um
mtodo que recebe 3 parmetros de entrada, e outro que no recebe nenhum, este ultimo ir invocar o primeiro
passando os 3 valores padro.

Sobreescrita de mtodos
Quando a herana usada, a classe 'filha' herda todos os mtodos da classe 'pai', porm, as vezes isso pode trazer
alguns problemas. Para dar mais flexibilidade, possvel sobreescrever um mtodo, ou seja, criar uma nova
implementao daquele mtodo para a classe filha.

Polimorfismo
Poli (muitas) morphos (formas) permite ao desenvolvedor utilizar uma mesma assinatura de mtodo para
desempenhar funes similares, de acordo com o contexto. Um exemplo de polimorfismo no exemplo utilizado na
herana seria um mtodo que retorna a autonomia do veculo. No carro, este mtodo tem que verificar a potncia do
motor e o combustvel usado (alcool ou gasolina) no caminho, teria que verificar o peso da carga e a potncia do
motor.
A vantagem do polimorfismo est no fato que um trecho de cdigo, muitas vezes no sabe se o objeto Veiculo um
caminho ou um carro, bastando chamar o mtodo que retorna a autonomia, se o objeto for um carro, a virtual
machine invoca o mtodo do carro, se o objeto for um caminho, ela invoca o metodo do caminho.
Caractersticas de linguagens orientadas a objetos 4

Agregao
Agregao um tipo de relacionamento entre objetos mais fraco que a Herana. Na Agregao, o tipo de
relacionamento que tem que ser analisado se uma classe "composta por outra", no existindo sem a outra.
Por exemplo, uma turma ou aula composta por alunos e um professor, no existindo sem os mesmos.

Associao
Associao um tipo de relacionamento entre objetos mais fraco que a Agregao. Na Associao, o tipo de
relacionamento que tem que ser analisado se uma classe "possui a outra".
Por exemplo uma pessoa possui um endereo.

Vantagens da Programao orientada Objetos


M odularidade: Uma vez que um objeto criado, ele pode funcionar independente do resto do programa. Ele
pode ser aproveitado em outros programas ou substitudo por algum outro objeto.
Encapsulamento: Uma vez que objetos so criados, voc s precisa se concentrar em us-los, sem se preocupar
com os detalhes de sua implementao.

Desvantagens da Programao Orientada Objetos


Alguns tipos de programas podem ficar mais difceis de serem criados usando POO.
Por ser uma filosofia de programao de mais alto nvel, os programas tendem a ser mais lentos.

A histria de Java
A histria de Java
Java comeou na verdade como um projeto na Sun que objetivava o estudo e a anlise de interaes entre
dispositivos eletrnicos e computadores, no exatamente para o desenvolvimento de uma linguagem para aplicativos
embarcados. Nesse tempo a linguagem tinha o nome-cdigo Green e foi idealizada por James Gosling. Contudo, a
Sun perdeu a disputa para uma outra empresa e o projeto Green estava marcado para ser descontinuado.
Entretanto, eis que surge algo novo, sim, uma nova palavra chamada internet. Com o advento em 1993 do web
browser Mosaic e das pginas estticas HTML a vida das pessoas sofreria uma mudana profunda, bem como a do
projeto Green. Com o objetivo de tirar proveito desse mercado o projeto Green sofre algumas mudanas e
adaptaes, se chamando Oak e em 1995 lanado com o nome Java. Tal nome adveio do evento que os
idealizadores da linguagem descobriram que j havia uma linguagem chamada Oak e ento ao tomar seus cafs
tiveram a idia de a chamar de Java em virtude de este ser o nome do local daonde o caf era comprado, a qual era
pequena ilha na Indonsia.
Assim em 1995 a Sun faz a divulgao da linguagem no evento SunWorld e a disponibiliza oficialmente em 1996,
ano da primeira JavaOne. Java foi lanada ento, sendo uma linguagem de propsito geral, porm, num primeiro
momento conhecida por seus applets que adicionavam interatividade s pginas Web, caracterstica ainda inexistente
na poca, quando a existncia do Flash ainda nem era pensada. De l para c a linguagem sofreu muitas mudanas e
evoluiu se adaptando com o tempo e atingindo a enorme popularidade que tem hoje.
Onde Java est presente 5

Onde Java est presente


Onde Java est presente
Java est presente em todos os lugares, desde telefones celulares at TVs e computadores. A linguagem Java uma
das mais difundidas e conta com inmeros recursos pela Web. Ela pode ser usada para criar aplicativos desktop,
como por exemplo o Azureus e o Eclipse, aplicaes web como applets, que rodam no lado cliente ou pginas JSP, e
outros termos relacionados sua verso EE, no lado do servidor. Alm disso h padres de TV digital que
disponibilizam algum suporte a Java. Inclusive at h robs que suportam Java, sendo o que o destaque vai para o da
misso Mars Rovers que percorreu o solo lunar. Sendo assim java est disponvel para um amplo espectro de
aplicaes, cada qual com sua utilidade e caractersticas prprias.

O porqu de se estudar Java


O Porqu de se escolher Java
Voc provavelmente j est convencido pelos pontos citados do porqu citar Java e queria mais, ou simplesmente
no leu o texto anterior e veio direto para c, ou talvez por algum outro motivo est aqui. Portanto para apresentar os
motivos porque voc deveria estudar Java estaro aqui tpicos em sntese que servem como motivos para estudar
Java:
Java tem a filosofia 'WORA'
Uma das principais caractersticas de Java o WORA (Write Once, Run Anywhere) ou simplesmente 'Escreva uma
Vez e Execute em Qualquer Lugar'. Isso por si s traz vantagens, pois poupa tempo aprendendo bibliotecas
especficas de Sistemas Operacionais. Poupa dinheiro, que seria gasto neste tempo. Poupa esforo, pois muitas vezes
no h a necessidade de se conhecer alguns ou vrios aspectos da plataforma subjacente.
Java uma linguagem de alto nvel
Por ser uma linguagem de alto nvel Java tem constructos e caractersticas que permitem escrever programas mais
rapidamente do que em C/C++. Sendo assim h uma maior produtividade. Aliado ao fato de que Java sendo uma
linguagem orientada a objetos, faz Java uma tima escolha para desenvolvimento.
Java est presente em uma variedade de lugares
Os aplicativos Java esto presentes em diversas reas, desde celulares, at servidores, o que d ao desenvolvedor
uma ampla gama de possibilidades de sistemas a serem desenvolvidos.
Java tem uma boa documentao, gratuito e de cdigo aberto
Como no h custo para se desenvolver em Java, pelo menos no incio, h um incentivo aos novatos que no
necessitam gastar com programas pagos, mas ao invs disso possuem escolhas de altssima qualidade gratuitas e
amplamente usadas.
Por onde comear 6

Por onde comear


Por Onde Comear
Provavelmente voc est ansioso para comear a aprender essa linguagem depois de tudo o que foi escrito at aqui,
mas vamos com calma porque h ainda mais coisas a explicar e alguns conselhos a dar antes de realmente
comearmos.
O primeiro que a linguagem Java est disponvel em vrias verses, cada uma com seu propsito. Cada uma destas
verses deve ser ressaltada uma vez que atuam em tecnologias diferentes e necessitam de diferentes pr-requisitos.
Java SE: a tecnologia Java para desktops. obrigatrio o seu entendimento, ou pelo menos seus conceitos, pois
serve de fundao para as outras verses. Atua em notebooks e PCs domsticos e est amplamente disponvel,
estando presente em quase 90% dos PCs do mundo.
Java ME: a verso para dispositivos mveis, os quais geralmente tm menos memria sendo ela limitada bem
como seu processamento tambm o sendo. Sendo assim nada mais do que uma verso reduzida das APIs para
desktop que incluem APIs especficas para construir aplicaes que lidem com estas limitaes.
JAVA EE: na verdade um conjunto de especificaes, as quais so implementadas em servidores de aplicao, tais
como JBoss, Jetty, BEA Logic, etc. A base dela o Java SE, porm o jeito de programar diferente devido ao amplo
conjunto de tecnologias e objetivos diferentes. Sendo assim o recomendado aprender primeiro JavaSE, pois a
base para as outras edies. Para isso, como em qualquer linguagem, o ideal primeiro treinar a lgica, pois o
processo de desenvolvimento de programas requer o uso de lgica o tempo todo, e depois aprender Java em paralelo
com o paradigma da orientao a objetos, o qual o mais usado atualmente.
Para aprender Java, portanto, siga para os prximos passos para poder comear aprender os bsicos dessa linguagem.
Infelizmente no vamos poder ensinar a fundo a Orientao a objetos, j que este no o foco principal do Wiki, e
sim, ensinar Java.
Pr-requisitos para acompanhar o livro 7

Pr-requisitos para acompanhar o livro


O que necessrio

Para executar os programas


Para rodar programas em Java, necessria uma M quina V irtual Java (que interpreta os bytecodes Java) e
alguns outros pacotes de acordo com o programa a ser executado.
O pacote JRE - Java Runtime Environment oferece esta mquina virtual, as bibliotecas bsicas e outros
componentes para executar os programas Java independentes e os que se executam dentro do navegador de
internet.
Existem verses destas mquinas virtuais para os sistemas operacionais: Solaris (Sparc e Intel), Linux e
Windows no site da Sun [1].

Para desenvolver os programas


Para desenvolvermos aplicativos em Java, ser necessrio possuir o Kit de desenvolvimento Jav a (JDK -
Java SE Development Kit). Ele um conjunto de programas que permitem voc criar os seus aplicativos em
Java. O principal programa incluso nesse conjunto o javac, o compilador da linguagem Java.
Obs.: O JD K j possui inclui todos os recursos do JR E - ento s necessitamos instalar o JDK.
Este livro baseado na verso 6u1 do Java SE Development Kit (JDK).
Alm disso, necessrio um editor de textos compatvel com o formato Unicode para podermos digitar os
cdigos fonte. Por exemplo: no Windows XP, podemos usar o Bloco de Notas (Notepad).

Instalando o Java Development Kit (JDK)

Verificando se j temos o JDK instalado


Abra a janela de um terminal e digite o seguinte comando:

ja v a c - v e r s io n

Se o JDK estiver instalado ser mostrado a verso do mesmo como, por exemplo, a seguir:

ja v a c 1 .6 .0 _ 0 1

Se a verso mostrada for maior que 1.6.0x pode-se pular o restante desta pgina e passar para o prximo
captulo
Caso o JDK no esteja instalado, ir aparecer a seguinte mensagem, por exemplo:

'jav a c' i s n o t r e c o g n i z e d a s a n i n t e r n a i o r e x t e r n a i command, operable


program or b a tc h f i l e .
Pr-requisitos para acompanhar o livro 8

Baixando o JDK
[2]
O JDK 6u1 pode ser baixado aqui .

Instalando o JDK
Roda-se o programa de instalao.
Aps a instalao, deve-se configurar o acesso global pasta do Java. Descrevemos a seguir como isto feito:

No Windows 9x
Adicione as seguintes linhas no final do arquivo AUTOEXEC.BAT:

s e t PATH=%PATH%; C : \ P r o g r a m F i l e s \ J a v a \ j d k 1 . 6 . 0 _ 0 1 \ b i n ;
s e t CLASSPATH=.

Obs.: A localizao da pasta dos arquivos Java ("C:\Program Files\Java\jdk1.6.0_01\bin;") deve ser mudada de
acordo do lugar onde voc instalou o JDK. Reinicie o computador.

No Windows XP
V ao Painel de controle - Sistema. Abra a aba da janela "Avanado" e clique no boto "Variveis do sistema".
Edite a varivel PATH adicionando o caminho C:\Program Files\Java\jdk1.6.0_01\bin (ou a pasta de
instalao dos executveis Java - caso j exista outros caminhos configurados, deve-se separar esta incluso
com ponto-e-vrgula ; ). Reinicie o computador.

No Linux
A instalao do Java no Linux pode ser feita de diversas maneiras e tambm varia muito dependendo da distribuio:
Para instalar no Ubuntu:
Mquina para executar programas Java:

apt-get in stall o p enjdk-7-jre

Plugin para executar applets Java no navegador

apt-get in stall icedtea-7-plugin

Instalao do SDK, o qual inclui compilador:

apt-get in stall openjdk-7-jdk

Para mais detalhes sobre como instalar o Java no Linux, veja o tutorial encontrado no livro Linux para iniciantes,
captulo Linux para iniciantes/Instalando programas/Java.

Referncias
[ 1] http:/ /java. sun. com
[2] http:/ /java. sun. com/javase/ downloads/ index.jsp
9

Os bsicos da linguagem

Criando e executando o primeiro programa


Criao de um programa
A criao de um programa pode conter muitas fases: o levantamento do que se quer fazer, do que as pessoas
esperam, do custo de desenvolvimento, etc. Como o objetivo inicial deste livro no explicar esses diversos
mtodos mas, explicar como se cria programas em Java, vamos simplificar neste momento nas seguintes fases:
1. definio do que o programa ir fazer;
2. criao de um (ou alguns) esboo(s), literal(is) ou grfico(s), de funcionamento do programa;
3. transformao do programa para a linguagem Java;
4. compilao.

Fase 1 - Definio do que o programa ir fazer


Envio rapido Espao Loko.com
Bem Vindo.java
Esse aplicativo foi desenvolvido por mim (Glenison Leone) - Meus Direitos Reservados
Acesse espacoloko.com [1]

Fase 2 - Criao de um esboo


Nosso primeiro programa muito simples, o esboo seria at desnecessrio. Vamos fazer para exemplificar:

Bem V i n d o a o A p l i c a t i v o . !

Fase 3 - Transformao do programa para linguagem Java


c l a s s O lam undo {
p u b l i c s t a t i c v o i d m a i n (S t r i n g a r g s []) {
S y s te m . o u t . p r i n t l n ( "Ol m u n d o !"); / / I m p r i m e na t e l a
}
}

Observao: o selecionar, copiar e colar do cdigo acima pode no funcionar em todos editores de texto
devido s diferenas de codificao de caracteres entre esta pgina web e o padro do editor. As diferenas
encontradas so entre os caracteres "extendidos", ou seja, os acentuados, sinais grficos ou letras que no so
do alfabeto latino, entre outras.
Criando e executando o primeiro programa 10

Fase 4 - Compilao
jav ac O lam undo.java

Como e onde o programa Java deve ser digitado?


O programa deve ser digitado com um editor de textos (Bloco de Notas do ambiente Windows, por exemplo) e
gravado num arquivo com a seguinte sintaxe de nomeao:
<appespacoloko>.java
Ou seja, o nome do programa seguido da extenso .java.
Ento, nesse primeiro programa, o arquivo que o conter ser chamado de:
App EspacoLoko.java
Note que h diferenciao entre letras maisculas e minsculas, ento verifique se a primeira letra do nome do
nosso programa maiscula (Olamundo.java diferente de olamundo.java).

O cdigo-fonte
Chamamos de cdigo-fonte o conjunto de instrues, expresses, etc. que esto numa linguagem de
computador no compilada, ou seja, cuja traduo para uma linguagem de mquina necessria. O conjunto
de instrues (e outros) em linguagem Java o nosso cdigo-fonte que deve estar contido no arquivo
Olamundo.java:

c l a s s O lam undo
{
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s )
{
S y s te m . o u t . p r i n t l n ( "Ol m u n d o !");
}
}

Compilao
O cdigo-fonte deve ser transformado, organizado, numa linguagem mais prxima da linguagem da mquina,
para isso se faz a compilao. A compilao em Java no como a das outras linguagens tradicionais pois ela
no traduz o programa para a linguagem de mquina de um determinada linha de processadores ou ambiente
operacional comum (Windows, DOS, Linux, etc.) e sim para uma mquina virtual JV M (Java Virtual
Machine), e a instalao do JDK (Java Development Kit) extremamente necessria, pois o JVM no compila
[2]
os projetos, apenas executa os projetos prontos. Faa o download do programa clicando AQUI .
As instrues que podem ser interpretadas (reconhecidas) pela JVM so denominadas bytecodes. Cada
ambiente operacional ter sua JVM especfica para executar os programas, porm o cdigo em bytecodes
reconhecido por qualquer JVM. Assim, um mesmo programa Java (cdigo-fonte) pode ser compilado em
bytecodes somente uma vez e ser executado em qualquer JVM de qualquer sistema ou ambiente operacional.
A compilao do cdigo-fonte Java feita com o programa javac de acordo com a sintaxe:

j a v a c <nome do p r o g r a m a > . j a v a

Ento, para compilar o nosso primeiro programa executamos:


obs: em linha de comando deve-se execut-lo no diretrio "bin" do "jdk" informando o caminho do arquivo para o
javac --> javac x:\caminhho\arquivo.java
Criando e executando o primeiro programa 11

jav ac O lam undo.java

Ser criado um arquivo com a extenso .class . Este o arquivo que conter os bytecodes.

Executando o programa
Para executarmos o programa compilado em bytecodes utilizamos o programa java, segundo a sintaxe:

j a v a <nome do p r o g r a m a >

Ento, para executar o nosso primeiro programa digitamos:

j a v a Ol amundo

No se deve especificar a extenso .class no caso do programa ser executado num terminal, numa linha de
comando (em alguns sistemas operacionais, como o Windows XP, escrever o .class gera uma mensagem de
erro). O comando deve ser digitado na origem do arquivo, raiz ou diretrio, onde se encontra o .class

Resumindo as etapas de digitao execuo do programa


digitar o cdigo-fonte em Java num editor de textos (Bloco de Notas, por exemplo);
salvar com o nome do programa (nome_do_programa) e a extenso .java;
importante que o nom e_do_program a tenha o mesmo nome da classe principal que contm o mtodo
principal, ou seja, o mesmo nome da classe que contm a funo main;
compilar com o programa com javac nome_do_programa.java;
executar com o programa com jav a nome_do_programa.

Referncias
[1] http:/ / www. espacoloko. com
[2] https://cds. sun. com/is-bin/INTERSHOP. enfinity/WFS/ CDS-CDS_Developer-Site/en_US/-/USD/
ViewProductDetail-Start?ProductRef=jdk-6u22-oth-JPR@CDS-CDS_Developer
Como funciona o primeiro programa 12

Como funciona o primeiro programa


O primeiro programa
O l mundo!

Cdigo-fonte

c l a s s O la m u n d o {
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ){
S y s te m . o u t . p r i n t l n ( "Ol m u n d o !");
}
}

Compilao

jav ac O lam undo.java

O que cada parte faz


c l a s s O lam undo
{

Declara uma classe (atravs da palavra-chave class) a ser desenvolvida no bloco entre chaves.
A linguagem Java organizada numa biblioteca de classes. Tambm, qualquer programa criado ser uma
extenso de uma classe preexistente (ancestral). Para declarar qual classe a ancestral, utiliza-se o comando
extends. Como no foi utilizado esse comando, assume-se como padro a superclasse Object. Para
exemplificar, a declarao acima corresponde exatamente a:

c l a s s O lam undo e x t e n d s O b j e c t
{

p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s )
{

a declarao do mtodo principal (main) da classe Olamundo. Este mtodo o bloco de programao que
ser iniciado pelo interpretador ao acessar a classe Olamundo.
A palavra-chave void indica que esse mtodo no retornar nenhum resultado.
O modificador static indica que esse mtodo inerente classe, ou seja, a classe no precisa ser instanciada
num objeto para esse mtodo ser executado.
O modificador de acesso public indica que o mtodo main pode ser executado a partir de outras classes, ou
seja, torna o mtodo main "pblico".
Como funciona o primeiro programa 13

String[] args a declarao dos parmetros que podem ser enviados, via linha de comandos, para executar o
nosso programa Olamundo. Esses parmetros formam um vetor de objetos da classe String. Estes objetos so
acessado atravs dos ndices do vetor (a ser estudado) args, por exemplo: args[0], args[1] etc.
Como este programa (depois de compilado) executado atravs do comando

j a v a Ol amundo

no estamos usando os argumentos args. Porm, caso o programa fosse executado

j a v a Ol amundo Meu Nome

poderamos tentar interpretar estes argumentos. Isto feito no exemplo 2.

S y s te m . o u t . p r i n t l n ( "Ol m u n d o !");

"Ol mundo!" uma instncia (no declarada) da classe de cadeia de caracteres String. Para parecer um pouco
mais claro, podemos assumir que "Ol mundo!" um dado, um conjunto de caracteres.
println um mtodo que imprime a String "Ol mundo!".
println um mtodo da subclasse PrintStream denominada out na classe String. Este mtodo escreve na tela a
cadeia de caracteres que lhe passada como parmetro (nesse casso, Ol mundo!) e faz uma quebra de linha
(faz com que a prxima escrita na tela seja na prxima linha).

Simplificando e resumindo
Para simplificar o entendimento vamos incluir comentrios no programa:

c l a s s O lam undo / / d e c l a r a a c l a s s e O lam undo q u e c o r r e s p o n d e ao nome do


programa
{
p u b l i c s t a t i c v o i d m a i n ( S t r i n g [] a r g s ) / / d e c l a r a o m to d o
principal (m a i n )
// q u e s e r e x e c u t a d o ao i n i c i a r a c l a s s e
{
S y s te m . o u t . p r i n t l n ( "Ol m u n d o !"); // escreve ' ' O l m u n d o ! ' ' na
tela
}
}

Nos captulos adiante sero explicados os termos que ainda no foram descritos aqui (vetores, classes etc.)
Tipos de dados primrios 14

Tipos de dados primrios


Tipos de dados primrios
Toda varivel deve ter um tipo de dado, pois, o tipo determ ina que valores a varivel poder conter e que
operaes podero ser realizadas com ela.
Os tipos primrios ou primitivos so os tipos de informaes mais usuais e bsicas. As variveis deste tipo
contm valores simples, apropriados ao tipo da varivel, e seus dados podem ser classificados basicamente em
trs categorias: lgicos, numricos (inteiros e reais) e de caracteres.

Tipos de dados lgicos

boolean
o tipo de dado que contm literal lgico. Serve para armazenar um nico bit de informao. Este bit pode ser
representado pelas palavras false (falso) ou true (verdadeiro). Representa estados binrios, tais como:
verdadeiro/falso, certo/errado, ligado/desligado, aberto/fechado, sim/no etc.
Exemplos de declaraes:

boolean c ;
boolean lig ad o = f a l s e ;

Observao: um erro muito comum para quem programa em C/C++ fazer testes lgicos usando variveis inteiras
ou reais. Em Java, a instruo if() s deve receber argum entos lgicos.

Tipos de dados numricos

Tipos de dados numricos inteiros

byte
o tipo de dado capaz de armazenar 8 bits de informao, ou seja, um nmero inteiro entre -128 e 127. Sua
utilizao recomendada em caso de economia de memria, j que alguns tipos de dados maiores possuem
processamento mais rpido.
Exemplos de declaraes:

byte a ;
byte b = ' 1 ' ;
byte z = 111;
b y t e p a t o = 0xA;
b y t e s e v e n = 07;
Tipos de dados primrios 15

short
o tipo de dado que capaz de armazenar nmeros inteiros de 16 bits, ou seja, um nmero inteiro entre
-32.768 e 32.767.
Exemplos de declaraes:

short a ;
s h o r t by1 = - 3 2 ;
s h o r t by2 = 0xBB;

int
o tipo de dado capaz de armazenar 32 bits, ou seja, de representar um nmero inteiro qualquer entre
-2.147.483.648 e 2.147.483.647. o tipo mais indicado na maioria dos casos por possuir uma grande faixa de
valores. Variveis deste tipo tambm costumam ser manipuladas mais rapidamente j que correspondem
largura de dados (de palavra) mais usual na maioria dos processadores atuais.
Exemplos de declaraes:

in t a ;
i n t by1 = - 3 2 ;
i n t by2 = 0xBB;

long
o tipo de dado capaz de armazenar 64 bits de informao, ou seja, que pode representar um nmero inteiro
qualquer entre -9.223.372.036.854.775.808L e 9.223.372.036.854.775.807L. Recomenda-se seu uso apenas
quando for preciso assumir valores maiores ou menores do que aqueles possveis de serem assumidos pelo int.
Exemplos de declaraes:

long a ;
l o n g bwy1 = - 3 2 L ;
l o n g byz2 = 32l ;

Tipos de dados numricos reais

float
o tipo de dado capaz de armazenar nmeros reais de preciso simples, ou seja, 32 bits de informao
representando um nmero real.
Exemplos de declaraes:

float a;
f l o a t by1 = - 3 2 . 0 ;
f l o a t bz2 = 3 2 . 2 F ;
f l o a t bz = 3 2 . 4 5 5 f ;
f l o a t bze = 1.32455e4f;
Tipos de dados primrios 16

double
o tipo de dado capaz de armazenar nmeros reais de preciso dupla, ou seja, 64 bits de informao em forma
de nmero real. usado para representar valores nos quais preciso uma preciso maior que a de float.
Exemplos de declaraes:

double a ;
d o u b l e by1 = - 3 2 . 0 ;
d o u b l e bz2 = 3 2 . 2 d ;
d o u b l e b z = 3 2 . 4 5 5 D;
d o u b l e b z e = 1 . 3 2 4 5 5 e 4 D;

Tipos de dados de caracteres

char
o tipo de dado capaz de armazenar 16 bits representando caracteres no formato UTF-16 (formato UTF
composto de dois caracteres de 8 bits). Representado numericamente, o tipo char pode ter valores de 0 a 65535
(inclusive) - de '\u0000' a '\uffff. Nas verses mais recentes da linguagem Java, prope-se substituir o tipo char
pelo tipo byte.
Exemplos de declaraes:

c h a r l e t r a = 'A' ;
char l e t r a = '\u 0 0 4 1 ' ;

Literais
Literais
Literais so as representaes de dados dentro do cdigo fonte. Na linguagem Java, literais representam os
dados dos tipos primitivos, dos tipos String e dos tipos nulo, por exemplo.
Assim, podemos subdividir os literais em:
Literais Booleanos ou Lgicos: correspondem ao valores true (verdadeiro) e false (falso).
Literais inteiros: representam os nmeros inteiros e podem ser de base octal, decimal, ou hexadecimal.
Assim:
Literais Inteiros Decimais: so nmeros em base decimal que representam um valor inteiro. Eles podem
ser tanto byte, como short, int ou long. Para escrever um literal inteiro na base decimal, basta digitar o seu
valor com um desses dgitos: 0 1 2 3 4 5 6 7 8 9.
Literais Inteiros Octais: so nmeros em base octal que representam um valor inteiro. Para representar
este tipo de literal, basta escrever os seus dgitos colocando 0 (dgito zero) antes. Os dgitos para este tipo
so: 0 1 2 3 4 5 6 7.
Literais Inteiros Hexadecimais: so nmeros em base hexadecimal que representam um valor inteiro. Para
representar este tipo de literal basta escrever os seus dgitos normalmente precedidos pelos caracteres 0x
(zero xis) ou 0X. Os dgitos permitidos so: 0 1 2 3 4 5 6 7 8 9 A a B b C c D d E e F f .
Literais Fracionrios (de Ponto Flutuante): correspondem aos nmeros racionais (fracionrios). Para
represent-los, basta escrever um nmero inteiro seguido por um ponto e por sua parte decimal - o ponto faz o
lugar da vrgula. Outra opo seria escrever o nmero em notao cientfica, escrevendo primeiro o valor da
mantissa, seguido do caractere "e" e do valor do expoente (de base 10).
Literais 17

Literais Caracteres: correspondem a um caractere. Para represent-los, basta escrever o caractere cercado por
apstrofos. Tambm podem armazenar caracteres de controle de formatao (quebra de linha, etc.) e tambm
caracteres no formato unicode.
Literais de cadeias de caracteres - Strings: correspondem s cadeias de caracteres. Para represent-los,
escreva o(s) caracter(es) cercado(s) por aspas.
Literal nulo: representa a ausncia de tipo e de dado (valor). Para representar utiliza-se a palavra null.
Os literais atribuem valores s variveis ou partes do cdigo. Ou seja, eles so usados para fazer com que
variveis passem a ter um valor ou se executem clculos. Exemplos:

b o o l e a n l i g a d o =t r u e ;
i n t v e l o c i d a d e = 12 8 ;
i n t x =0 0 12;
i n t p e s o =0x12a;
f l o a t p re c o =1.24;
char l e t r a = ' f ' ;
in t pesoT otal;
p e s o T o t a l =x *p e s o / 4 ;
S t r i n g t e x t o = " I s t o um e x e m p l o de c a d e i a de c a r a c t e r e s " ;

Nos exemplos acima, pudemos ver exemplos da atribuio de valores iniciais s diversas variveis no momento da
declarao assim como, a partir da declarao de pesoTotal (sem valor inicial), do clculo de pesoTotal igual a x
vezes o peso dividido por 4. A varivel ligado recebe o valor "verdadeiro", velocidade recebe o nmero 128, x
recebe 12 em octal que o mesmo que 10 em decimal, peso recebe 12A em hexadecimal que o mesmo que 298 em
decimal, preco recebe 1,24 e letra recebe f. J a varivel texto recebe Isto um exemplo de cadeia de caracteres.

Regras para representar literais fracionrios (de ponto flutuante)

Regras bsicas
Os literais do tipo float so representados colocando-se a letra F ou f aps o nmero. Por exemplo:

12f
22F

Observao: importante a utilizao do F (ou f) aps o nmero para representar o tipo float j que sua
omisso implicar que o literal passe a ser automaticamente interpretado como sendo do tipo double.
Por exemplo:
Os literais do tipo double so representados colocando-se a letra D ou d aps o nmero.

12d
22D

A separao entre a parte inteira e fracionrio do nmero feita atravs do ponto - ao invs da vrgula. Por
exemplo:

1 2 . 0 f r e p r e s e n t a o n m e r o 12
2 2.2 3 F r e p r e s e n t a o nmero 2 2 ,2 3

Caso a parte inteira seja 0 ("zero"), ela poder ser omitida desde que se coloque o ponto (representando a
vrgula) e a parte fracionria. Por exemplo:

.1 f r e p r e s e n t a o nmero 0,1
.0F r e p r e s e n t a o nmero 0
Literais 18

O utras variaes de representao


Os literais fracionrios tambm podem ser representados com o uso de uma exponenciao em base 10, ou
seja, atravs do nmero seguido da letra e ou E seguido do expoente de base 10 a ser multiplicado e do f ou F.
Exemplo:
1e3f representa o nmero \ x 103, ou seja, 1000
-1e3F representa o nmero x 103 , ou seja, -1000
1e-2F representa o nmero 1 x 10_2, ou seja, 0,01
-1e-3F representa o nmero 1 x 10_ 3 , ou seja, -0,001
Exista tambm a representao de literais fracionrios em hexadecimal.
a fazer

Representao de caracteres de controle de texto


Caracteres de controle de texto podem ser representados da seguinte forma:

Cdigo Significado

Escape Unicode

\b \u0008 caractere de retrocesso (backspace - BS)

\t \u0009 tabulao horizontal tab (horizontal tab - HT)

\n \u000a quebra de linha (linefeed - LF)

\f \u000c quebra de pgina (form feed - FF)

\r \u000d retorno de carro (carriage return - CR)

\" \u0022 aspas (double quote - " )

\' \u0027 apstrofo (single quote - ' )

\\ \u005c barra invertida (backslash - \ )

Representao de caracteres no formato Unicode-16


Unicode padro que define um conjunto de caracteres universais. O padro Unicode-16 define caracteres
com o uso de 2 bytes (16 bits). Na linguagem Java, define-se esses caracteres com \u seguido de 4 dgitos
hexadecimais (dgitos 0 1 2 3 4 5 6 7 8 9 A a B b C c D d E e F f). Assim, a representao poder variar de
\u0000 at \uFFFF. Exemplos:

Caractere Caractere
Unicode-16 gerado

\u7Fff rn
\u7Ffc m
\u0062 b

\u0078 x

Exemplo de declarao de uma varivel do tipo char usando o literal Unicode-16:

char le t r a x = '\u 0 0 7 8 ';


Variveis 19

Variveis
Variveis
Variveis so nomes atribudos endereos na memria de um computador onde se guardam dados. A
declarao de uma varivel consiste em dar um nome para a posio de memria a ser usada e especificar qual
tipo de dado a guardar na memria.
Para declarar uma varivel, utiliza-se a seguinte sintaxe:

m odificador tip o identificador;

Observao: o modificador opcional no caso da varivel ser a completar


Por exemplo:

static int flo r;

Pode-se declarar mais de uma varivel do mesmo tipo separando-as por vrgulas, como na seguinte sintaxe:

m odificador tip o id en tificad o r^ id entificado^, iden tificad o ^;

Por exemplo:

static f l o a t medida, r a i z 1 , r a i z 2 ;

Iniciar uma varivel atribuir um valor, um dado, varivel. As variveis tambm podem ser declaradas e
iniciadas ao mesmo tempo. Por exemplo:

static i n t t e m p o d e c o r r i d o =0;

Modificadores
Java/Modificadores

Identificadores
Java/Identificadores
Identificadores 20

Identificadores
Identificador o nome que utilizamos para representar as variveis, classes, objetos, etc. Por exemplo, na
Matemtica utilizamos um nome para as incgnitas (x, y, z, etc.) que o identificador daquela incgnita.
Utilizamos, em Java, as seguintes regras para criao do identificador:
1. no pode ser uma palavra-reservada (palavra-chave);
2. no pode ser true nem false - literais que representam os tipos lgicos (booleanos);
3. no pode ser null - literal que representa o tipo nulo;
4. no pode conter espaos em brancos ou outros caracteres de formatao;
5. deve ser a combinao de uma ou mais letras e dgitos UNICODE-16. Por exemplo, no alfabeto latino,
teramos:
letras de A a Z (de \u0041 a \u005a);
letras de a a z (de \u0061 a \u007a);
sublinha _ (\u005f);
cifro $ (\u0024);
dgitos de 0 a 9 (de \u0030 a \u0039).
Observao 01: caracteres compostos (acentuados) no so interpretados igualmente aos no compostos
(no acentuados). Por exemplo, Histria e Historia no so o mesmo identificador.
Observao 02: letras maisculas e minsculas diferenciam os identificadores, ou seja, a um
identificador diferente de A, Histria diferente de histria, etc.

Alguns exemplos de identificadores


X
abbora
yyeXo
carro1
carro_1

Palavras-chave
Em programao, palavras-chave, ou palavras reservadas, so as palavras que no podem ser usadas como
identificadores, ou seja, no podem ser usadas como nome de variveis, nome de classes, etc. Estas palavras
so assim definidas ou porque j tm uso na sintaxe da linguagem ou porque sero usadas em alguns
momento, seja para manter compatibilidade com verses anteriores ou mesmo com outras linguagens. No caso
do Java temos as seguintes palavras-chave:
Identificadores 21

abstract continue for new switch

assert(3) default goto(1) package synchronized

boolean do if private this

break double implements protected throw

byte else import public throws

case enum(4) instanceof return transient

catch extends int short try

char final interface static void

class finally long strictfp(2) volatile

const(1) float native super while

null

(1) sem uso na linguagem

(2) somente a partir da verso 1.2

(3) somente a partir da verso 1.4

(4) somente a partir da verso 5.0

Converso de tipos
De String para tipo bsico
i n t num = I n t e g e r . p a r s e I n t (n u m I n t ) ;
d o u b l e num = D o u b l e . p a r s e D o u b l e (numDou) ;

Implcitas
Entre inteiros: tipos menores para tipos maiores;

b y t e b = 10; s h o r t s = 10; int i = 10; l o n g l = 10;


s = b; i = b; i = s; l = b; l = s; l = i ;
i = 10; l = 1 00;

Explcitas
Type Casting

v a r T i p o l = (t i p o l ) v a r O u V a l T i p o 2 ;

Entre inteiros: tipos maiores para tipos menores;

b y t e b = 10; short s = 10; int i = 10; l o n g l = 10;


b = (b y t e ) s ; b = (b y t e ) i ; s = ( s h o r t ) i ; b = (b y t e ) l ; s = ( s h o r t ) l ;
i = (i n t ) l ;
b = (b y t e ) 10; s = ( s h o r t ) 10;

Cuidado para que o valor que est sendo atribudo no extrapole o tamanho mximo possvel do tipo que est
recebendo.
Constante 22

Constante
Constantes
As constantes em Java so declaradas atravs do modificador final. Um modificador de acesso tambm pode
ser adicionado opcionalmente com o fim de determinar o escopo da constante. A sintaxe para declarao de
uma constante a seguinte:

m odificador f i n a l tip o i d e n t i f i c a d o r =l i t e r a l ;

Onde:
modificador = modificador de acesso (opcional);
tipo = tipo de dado primrio;
identificador = nome (identificador) da constante;
literal = literal que atribui informao constante.
Exemplo:

p u b l i c f i n a l i n t d e z =10 ;

O exemplo acima cria uma constante pblica (pelo modificador de acesso public) com o tipo de dado inteiro
int com o valor 10.

Blocos e comentrios de programao


Blocos de programao
Blocos de programao so aglomerados de instrues e declaraes que tm escopo conjunto. Ou seja, as
variveis definidas como locais dentro de um bloco somente sero presentes dentro deste bloco assim como as
instrues ali presentes. Os blocos de programao so delimitados por chaves e podem ser aninhados -
colocados um dentro dos outros. Por exemplo:

{
// e s t e um b l o c o d e p r o g r a m a o
i n t a =1 0;
}

Outro exemplo:

{
// e s t e um b l o c o d e p r o g r a m a o
i n t a =1 0;
i n t b =1;
if (b ==3) {
// e s t e um b l o c o q u e e x e c u t a d o s e b f o r i g u a l a 3
b =a *10;
} e ls e {
// e s t e um b l o c o q u e e x e c u t a d o s e b f o r d i f e r e n t e d e 3
i n t a = 10 0 ;
b =a *10;
Blocos e comentrios de programao 23

}
S y s t e m . o u t . p r i n t l n ( "O v a l o r de b " + b ) ;
}

Comentrios
Comentrios, como o prprio nome instiga, so notas que podem ser includas no cdigo fonte para descrever
o que se quiser. Assim, no modificam o programa executado e servem somente para ajudar o programador a
melhor organizar os seus cdigos. Os comentrios em Java seguem a mesma sintaxe da linguagem C++.

/* */
Comentrios de uma ou mais linhas podem ser iniciados por /* e terminados por */ . Por exemplo:

{
i n t a =1 0;
int b;
b =a *2;
/ * a p a r t i r d e s t e p o n t o , d e v e - s e com ear a e x i b i r
o s r e s u l t a d o s na t e l a do u s u r i o */
}

//
Comentrios que terminam no final da linha so indicados com // . Pode ser usados desde o nicio da linha ou
colocados depois do cdigo funcional, desde que no haja um caractere de quebra de linha no comentrio. Por
exemplo:

{
i n t a = 1 0; // d e c l a r a o d e a como i n t e a t r i b u i o do v a l o r 10
i n t b ; / / d e c l a r a o de b
// a p r xim a l i n h a c a l c u l a b como s e n d o d u a s v e z e s a
b =a *2;
// d a q u i em d i a n t e d e v e - s e e x i b i r o s r e s u l t a d o s na t e l a
}

Comentrios para facilitar a documentao automtica


/** */

Pode-se utilizar comentrios de vrias linhas em que a primeira linha se inicia com /** e a ltima termina com
*/. Ou seja, na seguinte sintaxe:

//* * C o m en t rio
* com entrio
* com entrio
*
*/

Observao: a documentao gerada atravs do aplicativo javadoc.


24

Estruturas de controle

Comandos de seleo
Como pode-se notar, o conhecimento adquirido at aqui no permite a criao de programas muito interativos. Eles
sempre executam da mesma forma, independente do que o usurio faz ou dos valores que so recebidos. Mas agora
iremos aprender a usar alguns comandos que permitem que dependendo das circunstncias, os programas executem
instrues diferentes.

O comando if-then-else
O comando if-then-else permite que voc escolha duas aes diferentes a serem seguidas. Ele segue a seguinte
sintaxe:

i f (VALOR_BOOLEAN){
comando1;
comando2;
(...)
comandon;
}e l s e {
comando1;
comando2;
(...)
comandon;
}

Onde VALOR_BOOLEAN uma literal, varivel ou operador que possui ou retorna um valor do tipo boolean. Se o
valor de VALOR_BOOLEAN for "verdadeiro", a seqncia de comandos que vai desde o primeiro { aps o
comando at o primeiro } executada. Caso contrrio, a seqncia de comandos cercada por colchetes aps a palavra
else executada. O comando else opcional. E caso aps o if ou aps o else exista apenas um comando, o uso de
colchetes tambm se torna opcional. Exemplos de uso:
Exemplo 1:

i f (e l e m e n t o 1 >e l e m e n t o 2 )
elem en to m a i o r " ); / / R e p a r e que

m
p

p
y
t

u
t

n
t
n(
0
e
o

e
0
S
s

r
i
1

r
i
1
r

no so u s a d o s c o l c h e t e s , p o i s e s t e o n i c o comando a s e r e x e c u t a d o
n e ste bloco
e ls e {
e l e m e n t o 1 =e l e m e n t o 2 ;
e l e m e n t o e r a menor, mas a g o r a j

m
p

p
y
t

u
t

n
t
n(
0
e
o

e
0
S
s

r
i
1

r
i
1
r

r e c e b e u o v a l o r do s e g u n d o e l e m e n t o " ) ;
}

Exemplo 2:

i f (e l e m e n t o 2 ==e l e m e n t o 1 ) / / E s t e um e x e m p l o d e " i f " sem um " e l s e " .


Se o s n m e r o s n o f o r e m i g u a i s , n enhum comando e x e c u t a d o
Comandos de seleo 25

S y s t e m . o u t . p r i n t l n ( "Os n u m e r o s s a o i g u a i s " ) ;

Exemplo 3:

in t n o ta ; //V rio s p o d em s e r c o m b in a d o s f o r m a n d o

e
e
l
e"
f"
s

s
s
vrios cam inhos que o seu p ro g r a m a pode s e g u i r
i f (a c e r t o s = = 0 )
n o ta =0;
e ls e i f (a c e r t o s <20)
n o ta =10;
e ls e i f (a c e r t o s < 5 0 )
n o t a =4 0 ;
e ls e i f (a c e r t o s <80)
n o t a =60 ;
e ls e
n o t a =10 0 ;

Repare que no exemplo acima, s um dos comandos de atribuio ser executado. Mesmo que o valor da varivel
"acerto" satisfaa mais de uma das condies. O comando a ser executado ser o primeiro cujo valor de condio
seja "verdadeiro". Mas caso os "else"s sejam removidos no exemplo acima, os comandos que seriam executados
seriam todos aqueles cujo valor de condio sejam verdadeiros - e no apenas o primeiro.

O comando switch-case
O comando switch-case bastante semelhante ao if-then-else. A diferena que ele mais recomendado caso o seu
programa tenha muitos caminhos a serem seguidos por ser um comando mais fcil de ser escrito e interpretado. A
sintaxe do comando

s w i t c h (VARIVEL){
c a s e VALOR1: c o m a n d o s ; b r e a k ;
c a s e VALOR2: c o m a n d o s ; b r e a k ;
(...)
c a s e VALORn: c o m a n d o s ; b r e a k ;
d e f a u l t : comandos; b r e a k ;
}

Onde VARIVEL pode ser qualquer varivel de qualquer tipo e VALOR pode ser qualquer literal do mesmo tipo
que a varivel. Os comandos a serem executados so aqueles posicionados entre a literal que possuir o mesmo valor
que a varivel e o comando "break". Caso nenhum literal tenha o mesmo valor que a varivel, os comandos
posicionados logo aps o "default" so executados. O "default" opcional. Exemplos de uso:

i n t m e s =5;
s w itc h (m e s ) {
case 1 System . o u t . p r i n t l n (" J a n e i r o " ); b re a k ;
case 2 System . o u t . p r i n t l n (" F e v e r e i r o " ); b re a k ;
case 3 System . o u t . p r i n t l n ("Maro"); b re a k ;
case 4 System . o u t . p r i n t l n (" A b r i l " ); b re a k ;
case 5 System . o u t . p r i n t l n ("Maio"); b re a k ;
case 6 System . o u t . p r i n t l n ("Ju n h o "); b re a k ;
case 7 System . o u t . p r i n t l n (" J u l h o " ); b re a k ;
case 8 System . o u t . p r i n t l n ("A gosto"); b re a k ;
Comandos de seleo 26

c a s e 9: System . o u t . p r i n t l n ("Setem bro") ; b re a k ;


c a s e 10 : S y stem . o u t . p r i n t l n (" O u tu b ro " ); b re a k ;
c a s e 11 : S y s t e m . o u t . p r i n t l n ( "Novembro") ; b r e a k ;
c a s e 12 : S y stem . o u t . p r i n t l n ("Dezembro") ; b re a k ;
d e f a u l t : S y s t e m . o u t . p r i n t l n ( "Ms i n v l i d o . " ) ; b r e a k ;
}

No exemplo acima, a string "Maio" ser impressa na tela.

if
Foi proposta a fuso deste mdulo com: Java/Comandos de seleo (discuta).

Dando sequncia ao estudo de Java vamos comear a ver dois tipos de estrutura: a de seleo e a de iterao
(repetio).
As estruturas de seleo servem para dar ao programador uma maior liberdade de escolha sobre o rumo da execuo
de um cdigo. Geralmente elas esto associadas a condicionais e do a oportunidade de se escolher uma de duas ou
mais opes.
A primeira estrutura a ser vista o if, que se traduz para portugus para como se. Essa estrutura testa uma condio e
verifica se ela verdade se for executa o que est dentro do bloco if.
Para ilustr-la vamos fazer rapidinho um programa que testa se um dado nmero par ou no.

/ / ------------------ P a r . j a v a ---------------/ /

// te sta s e um n m e ro p a r / /

p u b lic c la s s P a r {

p u b l i c s t a t i c v o i d m a i n ( S t r i n g a r g s [] ){
i n t x = 8;

i f ( x % 2 == 0 ){ / / te sta s e o r e s t o da d i v i s o d e x p o r 2 0
System . o u t . p r i n t l n ( x + " p a r . " );
}

S y stem . e x i t ( 0 );
}

Dessa forma, a utilizao de estruturas if bem simples. A nica coisa a ser lembrada que a condio dos ifs
devem ser colocadas dentro de parnteses e que devem ser colocadas chaves para delimitar o corpo de um if. Obs:
Quando h somente uma instruo no bloco if a chave opcional, como por exemplo o trecho de cdigo dado acima.
Entretanto bom colocar-se a chave uma vez que d maior clareza e legibilidade ao cdigo na maioria das vezes.
if 27

else
Muitas vezes um bloco i f acompanhado de um bloco e l s e . Enquanto um deles, o i f , serve para testar um
condio, o e l s e serve para o mesmo propsito, porm a funo dele executar caso a condio que o i f avalia
seja falsa. Desta maneira um cdigo executa o que est dentro do bloco i f se a condio do i f for avaliada como
verdadeira e pula o e l s e e executa o que est dentro do e l s e , pulando o i f , caso a condio avaliada pelo i f
seja falsa. Junto com o e l s e tambm pode vir um outro i f o que faz com que se a execuo do primeiro i f seja
falsa ele caia no e l s e testando a condio desse segundo i f .
Exemplo:

i f ( x == 2 ){
S y s t e m . o u t . p r i n t l n ( "x v a l e 2" ) ;
}
e ls e i f ( x == 4 ){
S y s t e m . o u t . p r i n t l n ( "x v a l e 4" ) ;
}
e ls e {
S y s t e m . o u t . p r i n t l n ( "x n o v a l e nem 4 nem 2" ) ;
}

switch
Comando switch
A instruo switch uma instruo condicional de mltiplos desvios. Ou seja, de acordo com o resultado de uma
condio pode-se executar um desvio entre os vrios possveis - diferente da instruo if que permite somente dois
desvios: um para a condio verdadeira e outra para a falsa.
A instruo switch analisa o valor (literal) resultante de uma expresso ou varivel - que chamamos de condio no
pargrafo anterior - e, de acordo com esse valor (que pode ser dos tipos: char, byte, short, int, long ou um tipo
enumerado) desvia a execuo dos programas para um dos casos (atravs da palavra-chave case).

Sintaxe do comando switch


switch ( <condio> )

{
case <valor1>: <bloco de programa1 a ser executado>
break;

case <valor2>: <bloco de programa2 a ser executado>


break;

case <valorn>: <bloco de programan a ser executado>


break;

default: <bloco de programa a ser executado caso nenhuma das condies acima seja adequada>
break;
switch 28

Onde:
<condio> literal, expresso ou varivel que seja do tipo char, byte, short, int, long ou um tipo
enumerado.
case <valorn>: estabelece que o bloco n seguinte seja executado caso <condio> seja igual a
<valor >.
n
break; estabelece o fim do bloco de um dos casos.
default: estabelece que o bloco seguinte seja executado caso nenhum <valorx> seja igual <condio>.

Exemplos de uso do switch


im p o rt j a v a . u t i l . S c a n n e r ;

c l a s s T ro c a {
p u b l i c s t a t i c v o i d m a i n (S t r i n g a r g s []) {
S y s t e m . o u t . p r i n t l n ( " D i g i t e um n m e r o : \ n " ) ;
S c a n n e r l e r = new S c a n n e r ( S y s t e m . i n ) ;
i n t dia_da_sem ana = l e r . n e x t I n t ();
l e r . n e x t L i n e ();

s w itc h (d i a _ d a _ s e m a n a ){
c a s e 1: S y s t e m . o u t . p r i n t l n ( "Domingo") ;
b re a k ;

c a s e 2: S y stem . o u t . p r i n t l n (" S e g u n d a - f e i r a " );


b re a k ;

c a s e 3: S y stem . o u t . p r i n t l n (" T e r a - f e i r a " );


b re a k ;

c a s e 4: S y stem . o u t . p r i n t l n (" Q u a r t a - f e i r a " );


b re a k ;

c a s e 5: S y stem . o u t . p r i n t l n (" Q u i n t a - f e i r a " );


b re a k ;

c a s e 6: S y s t e m . o u t . p r i n t l n ( " S e x t a - f e i r a " ) ;
b re a k ;

c a s e 7: S y stem . o u t . p r i n t l n ("S bad o ");


b re a k ;

d e f a u l t : S y s t e m . o u t . p r i n t l n ( "O d i a d a s e m a n a e s t e r r a d o . " ) ;
b re a k ;
}
}
}
switch 29

No exemplo, temos uma varivel inteira, de nome d i a _ d a _ s e m a n a . A parte s w i t c h ( d i a _ d a _ s e m a n a ) nos


diz que a deciso devem ser em volta desta varivel, dos dados referentes a ela. c a s e 1: nos diz o que fazer, se o
valor de dia_da_semana for 1. O programa imprimir "Domingo". b r e a k ; diz ao sistema que ele deve
interromper, neste momento, a sequncia de comandos e terminar o switch, caso contrrio, ele continuaria nos outros
cases.
A parte i m p o r t j a v a . u t i l . Scanner; responsvel pela importao da classe S c a n n e r , que far a entrada
de dados no programa. Ali define-se uma classe S c a n n e r , com o objeto ler. Logo faz se a referncia a entrada de
dados. Na segunda linha, declara-se a varivel x, que conter o objeto ler, e o n e x t I n t (); significa que ele
Cortar, qualquer entrada do teclado (neste caso o Enter, Backspace, etc).

Comandos de iterao
Neste captulo veremos como fazer para que o seu programa execute uma sequncia de instrues um determinado
nmero de vezes ou at que determinada condio seja satisfeita.

O comando for
O comando for deve ser usado sempre que se deseja que um cdigo seja executado um determinado nmero de
vezes. A sintaxe do comando for :

f o r ( INICIALIZAO; CONDIO; EXPRESSO){


COMANDO( S ) ;
}

Quando o comando "for" executado, a primeira coisa a ser feita a inicializao prevista. Em seguida, verifica-se
se CONDIO "falso". Em caso afirmativo, o loop no ser executado. Caso contrrio, todos os comandos
existentes no bloco abaixo do comando so executados e a operao prevista em EXPRESSO executada. Mais
uma vez, a CONDIO analisada. Caso ela seja falsa, o loop interrompido. Caso contrrio, ela continua.
Exemplos de uso:

f o r (i n t i = 1 ; i <=10; i ++) / / O l o o p e x e c u t a d o 10 v e z e s
S y s t e m . o u t . p r i n t l n ( i +" " ); //S e r i m p r e s s a na t e l a uma c o n t a g e m de
1 at 10.

O comando while e do-while


O comando while deve ser usado sempre que no sabemos quantas vezes um loop ser executado. A sintaxe do
comando :

w h i l e (CONDIO){
COMANDO( S ) ;
}

Quando o comando "while" executado, verifica-se o valor retornado por CONDIO. Se for "verdadeiro", a
sequncia de comandos presente no bloco logo abaixo do comando executada. Ao fim, o valor de CONDIO
verificado novamente. O loop s para quando o valor retornado por CONDIO for "falso".
Alm do comando "while", tambm pode ser usado o comando "do-while" que segue a seguinte sintaxe:

do{
COMANDO( S ) ;
Comandos de iterao 30

}w h i l e (CONDIO) ;

Ele funciona exatamente igual ao comando "while". A diferena que a CONDIO s analisada depois que os
comandos so executados. Isso significa que o comando "do-while" sempre executa o conjunto de comandos ao
menos uma vez. Mesmo que a condio seja inicialmente falsa. Exemplos de uso:
Exemplo 1:

w h i l e (t r u e ){
System . o u t . p r i n t l s ("Estou p r e s o ! " ); //C o m o a q u i CONDIO s e m p r e
verdadeira, este comando s e m p r e s e r e x e c u t a d o .
}

Exemplo 2:

w h i l e (v a r i a v e l %435==4){
v a r i a v e l +=(v a r i a v e l *3); / / O n u m e ro d e v e z e s q u e e s t e comando
s e r e x e c u t a d o d ep e n d e do v a l o r i n i c i a l da v a r i v e l
}

Comandos de controle de fluxo


Existem alguns comandos que foram feitos para facilitar o uso de loops em programas. Eles permitem que voc
controle melhor o fluxo de execuo de um programa. So eles:

O comando break
O comando break um comando bastante importante no desenvolvimento da maior parte dos programas de
computador, ele usado para sair imediatamente de um lao (loop, em ingls), independente do valor de
CONDIO. Ele pode ser executado dentro de um while, for, do ... while ou switch (estes comandos sero
discutidos mais adiante neste livro), fazendo um sada imediata dessa instruo. Passando para o execuo do
prximo comando.
A sintaxe do comando bastante simples:

b re a k ;

Exemplos de uso: No exemplo abaixo temos um cdigo escrito em Java, onde em um loop for interrompido
quando a varivel inteira contador se torna igual a 5.

public class BreakTeste


{
public static void m a i n ( String args [] )
{
int contador; //Varivel de controle usada como referncia

for ( contador = 1; contador <= 10; contador++ )//Lao, ser repetido 10 vezes
{
if ( contador == 5 ) //Se o contador chegar at 5
break; //Termina o loop quando a condio do if se
tornar verdadeira

System.out.printf( "%d ", contador);


}//Termino da instruo for
Comandos de iterao 31

System.out.printf( "\nInterrompe o contador quando o contador =


%d\n",contador );
}//Fim do main
}//Fim da classe BreakTest

O comando continue
O comando continue serve para encerrar a execuo de comandos e verificar o valor de CONDIO. Caso o valor
seja "verdadeiro", a iterao continua. Caso contrrio, ela se encerra. Exemplos de uso:

f o r (i n t i = 1 ; i < = 1 0 ; i ++){ / / O l o o p e x e c u t a d o 10 v e z e s
i f ( i %2==0)
c o n tin u e ;
S y s t e m . o u t . p r i n t l n (i + " " ); //S e r i m p r e s s a na t e l a os nm eros
mpares e n t r e 1 e 10
}

Neste captulo veremos como fazer para que o seu programa execute uma sequncia de instrues um determinado
nmero de vezes ou at que determinada condio seja satisfeita.

O comando for
O comando for deve ser usado sempre que se deseja que um cdigo seja executado um determinado nmero de
vezes. A sintaxe do comando for :

f o r ( INICIALIZAO; CONDIO; EXPRESSO){


COMANDO( S ) ;
}

Quando o comando "for" executado, a primeira coisa a ser feita a inicializao prevista. Em seguida, verifica-se
se CONDIO "falso". Em caso afirmativo, o loop no ser executado. Caso contrrio, todos os comandos
existentes no bloco abaixo do comando so executados e a operao prevista em EXPRESSO executada. Mais
uma vez, a CONDIO analisada. Caso ela seja falsa, o loop interrompido. Caso contrrio, ela continua.
Exemplos de uso:

f o r (i n t i = 1 ; i <=10; i ++) / / O l o o p e x e c u t a d o 10 v e z e s
S y s t e m . o u t . p r i n t l n ( i +" " ); //S e r i m p r e s s a na t e l a uma c o n t a g e m de
1 at 10.

O comando while e do-while


O comando while deve ser usado sempre que no sabemos quantas vezes um loop ser executado. A sintaxe do
comando :

w h i l e (CONDIO){
COMANDO( S ) ;
}

Quando o comando "while" executado, verifica-se o valor retornado por CONDIO. Se for "verdadeiro", a
sequncia de comandos presente no bloco logo abaixo do comando executada. Ao fim, o valor de CONDIO
verificado novamente. O loop s para quando o valor retornado por CONDIO for "falso".
Comandos de iterao 32

Alm do comando "while", tambm pode ser usado o comando "do-while" que segue a seguinte sintaxe:
do{
COMANDO(S);
}w h ile (CONDIO);
Ele funciona exatamente igual ao comando "while". A diferena que a CONDIO s analisada depois que os
comandos so executados. Isso significa que o comando "do-while" sempre executa o conjunto de comandos ao
menos uma vez. Mesmo que a condio seja inicialmente falsa. Exemplos de uso:
Exemplo 1:
w h ile (t r u e ){
S ystem . o u t. p r i n t l s ("E stou p r e s o ! " ); //Como aqui CONDIO sempre
v e r d a d e ir a , e s te comando sem pre s e r e x e c u ta d o .
}
Exemplo 2:
w h ile (v a r ia v e l%435==4){
v a r ia v e l+=(v a r ia v e l*3); //O numero de v e ze s que e s t e comando
s e r ex ecu tad o depende do v a lo r i n i c i a l da v a r i v e l
}

Comandos de controle de fluxo


Existem alguns comandos que foram feitos para facilitar o uso de loops em programas. Eles permitem que voc
controle melhor o fluxo de execuo de um programa. So eles:

O comando break
O comando break um comando bastante importante no desenvolvimento da maior parte dos programas de
computador, ele usado para sair imediatamente de um lao (loop, em ingls), independente do valor de
CONDIO. Ele pode ser executado dentro de um while, for, do ... while ou switch (estes comandos sero
discutidos mais adiante neste livro), fazendo um sada imediata dessa instruo. Passando para o execuo do
prximo comando.
A sintaxe do comando bastante simples:
b re a k ;
Exemplos de uso: No exemplo abaixo temos um cdigo escrito em Java, onde em um loop for interrompido
quando a varivel inteira contador se torna igual a 5.
public class BreakTeste
{
public static void m a i n ( String args [] )
{
int contador; //Varivel de controle usada como referncia

for ( contador = 1; contador <= 10; contador++ )//Lao, ser repetido 10 vezes
{
if ( contador == 5 ) //Se o contador chegar at 5
break; //Termina o loop quando a condio do if se
Comandos de iterao 33

tornar verdadeira

System.out.printf( "%d ", contador);


}//Termino da instruo for

System.out.printf( "\nInterrompe o contador quando o contador =


%d\n",contador );
}//Fim do main
}//Fim da classe BreakTest

O comando continue
O comando continue serve para encerrar a execuo de comandos e verificar o valor de CONDIO. Caso o valor
seja "verdadeiro", a iterao continua. Caso contrrio, ela se encerra. Exemplos de uso:
f o r (i n t i = 1 ;i < =10;i ++){ //O lo o p execu ta d o 10 v e ze s
i f (i %2==0)
c o n tin u e ;
S ystem . o u t. p r i n t l n (i +" " ); / / S e r im pressa na t e l a os nmeros
m pares e n tre 1 e 10
}

for
Sintaxe
fo r ( in t i= 0; i<=10; i++) / / i++ increm entando i
{
<bloco de comando>
}

Exemplo de comando de repetio usando o FOR


A sintaxe deste comando a seguinte:
f o r ( [ e x p re ss o 1 ]; [c o n d i o ]; [e x p re ss o 2]){
[comando]
}
Veja um exemplo:
/* *
* Exemplo de comando f o r
*/
p u b lic c la s s ExemploDeFor {
p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ) {
f o r (i n t i = 0; i < 10; i ++){
S ystem . o u t. p r i n t l n (" In d ic e " + i );
}
for 34

}
}
O Resultado obtido ser:
n d ic e 0
n d ic e 1
n d ic e 2
n d ic e 3
n d ic e 4
n d ic e 5
n d ic e 6
n d ic e 7
n d ic e 8
n d ic e 9

ForEach
ForEach funciona com Array ou toda class que implementa a interface Iterable:
p u b lic in te r f a c e I t e r a b l e <T>{
p u b lic a b s tr a c t I t e r a t o r <T> i t e r a t o r ();
}
Exemplo de ForEach:
p u b lic c la s s ForEach {

p u b lic s t a t i c v o id m a in (S trin g [] a r g s ){
S trin g nom es[] = new S t r i n g [5 ];

nom es[0] = " jo o " ;


nom es[1] = "m a ria ";
nom es[2] = " jo s " ;
nom es[3] = " p a u lo " ;
nom es[4] = " p a u la " ;
f o r (S trin g n : nom es){
o u t. p r i n t l n (n );
e
ySs
t

}
}
35

Arrays (Vetores)
Vetores
Definio de vetor
Um vetor uma estrutura de dados formada por um conjunto de dados ou outros elementos de um mesmo tipo
ou uma mesma estrutura. O vetor pode ter uma dimenso ou mais. Tambm chamado de matriz quando de
duas dimenses, funciona de modo anlogo s matrizes matemticas. O acesso aos dados feito atravs de
"coordenadas" (ndices).
A programao faz um grande uso de vetores. Cada item de um vetor chamado de elemento. Cada um dos
elementos possui uma posio dentro do vetor, qual referenciamos atravs do ndice do elemento. Cada um
dos "domnios" (conjunto de posies, endereos de armazenamentos) do vetor, nos chamamos de dimenso.
J o tipo de dado (ou de elemento) corresponde ao "contradomnio" do vetor, ou seja, o conjunto de literais ou
de outro tipo de elemento que o vetor pode armazenar.
Veja um vetor de uma dimenso e dez elementos:
0 1 2 3 4 5 6 7 8 9

Ele possui 10 elementos que so acessados (referenciados) pelos ndices:


[0 ], [1 ], [2 ], [3 ], [4 ], [5 ], [6 ], [7 ], [8 ], [9 ].
Os ndices de cada elemento so escritos entre colchetes [ ].
Veja um vetor de duas dimenses e vinte e cinco elementos (5 x 5):

Ele possui 25 elementos que so acessados (referenciados) pelos ndices:


[0 ][0 ], [1 ][0 ], [2 ][0 ], [3 ][0 ], [4 ][0 ],
[0 ][1 ], [1 ][1 ], [2 ][1 ], [3 ][1 ], [4 ][1 ],
[0 ][2 ], [1 ][2 ], [2 ][2 ], [3 ][2 ], [4 ][2 ],
[0 ][3 ], [1 ][3 ], [2 ][3 ], [3 ][3 ], [4 ][3 ],
[0 ][4 ], [1 ][4 ], [2 ][4 ], [3 ][4 ], [4 ][4 ].
Cada elemento representado por dois ndices (um para cada dimenso), entre colchetes e adjacentes [ ][ ].
Veja um vetor de trs dimenses e cento e vinte e cinco elementos (5 x 5 x 5):
36

0
1
2
3
4

Ele possui 125 elementos que so acessados (referenciados) pelos ndices:


[0 0] [0 ], [1] [0] [0 ], [2] [0] [0 ], [3] [0] [0 ], [4] [0] [0 ],
[0 1] [0 ], [1] [1] [0 ], [2] [1] [0 ], [3] [1] [0 ], [4] [1] [0 ],
[0 2] [0 ], [1] [2] [0 ], [2] [2] [0 ], [3] [2] [0 ], [4] [2] [0 ],
[0 3] [0 ], [1] [3] [0 ], [2] [3] [0 ], [3] [3] [0 ], [4] [3] [0 ],
[0 4] [0 ], [1] [4] [0 ], [2] [4] [0 ], [3] [4] [0 ], [4] [4] [0 ],
[0 0] [1 ], [1] [0] [1 ], [2] [0] [1 ], [3] [0] [1 ], [4] [0] [1 ],
[0 1] [1 ], [1] [1] [1 ], [2] [1] [1 ], [3] [1] [1 ], [4] [1] [1 ],
[0 2] [1 ], [1] [2] [1 ], [2] [2] [1 ], [3] [2] [1 ], [4] [2] [1 ],
[0 3] [1 ], [1] [3] [1 ], [2] [3] [1 ], [3] [3] [1 ], [4] [3] [1 ],
[0 4] [1 ], [1] [4] [1 ], [2] [4] [1 ], [3] [4] [1 ], [4] [4] [1 ],
[0 0] [2 ], [1] [0] [2 ], [2] [0] [2 ], [3] [0] [2 ], [4] [0] [2 ],
[0 1] [2 ], [1] [1] [2 ], [2] [1] [2 ], [3] [1] [2 ], [4] [1] [2 ],
[0 2] [2 ], [1] [2] [2 ], [2] [2] [2 ], [3] [2] [2 ], [4] [2] [2 ],
[0 3] [2 ], [1] [3] [2 ], [2] [3] [2 ], [3] [3] [2 ], [4] [3] [2 ],
[0 4] [2 ], [1] [4] [2 ], [2] [4] [2 ], [3] [4] [2 ], [4] [4] [2 ],
[0 0] [3 ], [1] [0] [3 ], [2] [0] [3 ], [3] [0] [3 ], [4] [0] [3 ],
[0 1] [3 ], [1] [1] [3 ], [2] [1] [3 ], [3] [1] [3 ], [4] [1] [3 ],
[0 2] [3 ], [1] [2] [3 ], [2] [2] [3 ], [3] [2] [3 ], [4] [2] [3 ],
[0 3] [3 ], [1] [3] [3 ], [2] [3] [3 ], [3] [3] [3 ], [4] [3] [3 ],
[0 4] [3 ], [1] [4] [3 ], [2] [4] [3 ], [3] [4] [3 ], [4] [4] [3 ],
[0 0] [4 ], [1] [0] [4 ], [2] [0] [4 ], [3] [0] [4 ], [4] [0] [4 ],
[0 1] [4 ], [1] [1] [4 ], [2] [1] [4 ], [3] [1] [4 ], [4] [1] [4 ],
[0 2] [4 ], [1] [2] [4 ], [2] [2] [4 ], [3] [2] [4 ], [4] [2] [4 ],
[0 3] [4 ], [1] [3] [4 ], [2] [3] [4 ], [3] [3] [4 ], [4] [3] [4 ],
[0 4] [4 ], [1] [4] [4 ], [2] [4] [4 ], [3] [4] [4 ], [4] [4] [4 ].
Vetores 37

Declarao de um vetor
Para declarar um vetor, utiliza-se a seguinte sintaxe:
t i p o [] id e n tif i c a d o r ;
ou
tip o i d e n t i f i c a d o r [];
Onde:
tipo = tipo de dado ou de elemento;
identificador = nome do vetor.
Um vetor de duas dimenses criado do seguinte modo:
t i p o [][] id e n tif i c a d o r ;
ou
tip o i d e n t i f i c a d o r [ ] [ ] ;
Um vetor de trs dimenses criado do seguinte modo:
t i p o [ ] [ ] [ ] id e n tif i c a d o r ;
ou
tip o i d e n t i f i c a d o r [ ] [ ] [ ] ;
E assim, por diante - um vetor de quatro dimenses criado do seguinte modo:
t i p o [ ] [ ] [ ] [ ] id e n tif i c a d o r ;
ou
tip o i d e n t i f i c a d o r [ ] [ ] [ ] [ ] ;

Dados em um vetor
Os elementos dos vetores podem ser atribudos da seguinte forma (separados por vrgulas e entre chaves. Por
exemplo, em um vetor unidimensional poderamos indicar os dados de seus elementos assim:
{ x0 , x1, x 2', . . . ', x n}
onde cada um dos valores X um valor do elemento de ndice correspondente no vetor. A numerao dos ndices
comea a partir do 0 e pode ser somente nmero natural, ou seja, inteiro maior ou igual a zero.
Vetores podem ser declarados e iniciados conforme o seguinte exemplo - cada dimenso delimitada por
chaves e cada elemento separado do outro atravs de vrgulas:
i n t [] v e to r ={34, 27, 3, 2};
Outro modo de uso declarando, iniciando com o tamanho (quantidade de elementos) do vetor e depois
atribuindo os valores, como o equivalente a seguir:
i n t [] v e to r = new i n t [4 ];
v e to r ={34, 27, 3, 2};
Ou ento, atribuindo os elementos individualmente:
Vetores 38

i n t [] v e to r = new i n t [4 ];
v e t o r [0 ]=34;
v e t o r [1 ]=27;
v e t o r [2]=3;
v e t o r [3]=2;
Observao: lembre-se que o ponto utilizado para separar a parte inteira da parte fracionrio de um nmero
(notao inglesa) enquanto que a vrgula separa elementos.
Vetores de caracteres tambm so chamados de strings (cadeias de caracteres) e podem ser representados
como um conjunto de caracteres cercado por aspas. Podemos declarar e atribuir tipos no bsicos. No exemplo
a seguir, frase um vetor de objetos da classe String. Cada elemento de frase tambm um vetor de
caracteres. Por exemplo, "Bom dia" o primeiro elemento do vetor frase e tambm, por si s, um vetor de
caracteres {'B','o','m',' ','d','i','a'}.
S t r i n g [] f r a s e ={"Bom d ia " , "Boa ta r d e " , "Boa n o i t e " };

Acessando os elementos do vetor


Para representar ou acessar um nico elemento de um vetor, usa-se a sintaxe:
i d e n t i f i c a d o r [i 1 ] [2i ] [ i 3 ] . . . [ i n ]
onde:
identificador = nome do vetor;
in = a literal que representa o elemento de ndice n.
Assim, no exemplo acima, frase[0] igual a "Bom dia".
Observao: como a numerao dos ndices comea em 0, frase poder ter somente, no exemplo acima, os ndices
0, 1 ou 2.
Cada dimenso do vetor representada por um conjunto de colchetes. Assim, um vetor x de:
uma dimenso acessado:
x [ i 1]
duas dimenses acessado:
x [ i 1 ] [2i ]
trs dimenses acessado:
x [ i 1] [ i 2] [ i 3]
quatro dimenses acessado:
x [Li 1 ] [i 2 ] [ i 3 ] [ i 4 ]
e assim por diante.
Vetores 39

Comparando um vetor de duas dimenses com uma matriz algbrica


Por exemplo, podemos representar a seguinte matriz:

assim, em Java:
i n t [][] B=new i n t [2 ][4 ];
B= { { 8 ,0 ,9 ,2 } ,
{2,4 ,3 , 1}};
ou assim:
in t [][] B= {{8,0, 9 ,2 },
{2,4, 3 ,1 } } ;
ou assim:
in t [][] B=new i n t [2 ][4 ];
B [ 0][0 ] = 8;
B [ 0 ][1 ] = 0;
B [ 0][2 ] = 9;
B [ 0][3 ] = 2;
B [ 1][0 ] = 2;
B [ 1 ][1 ] = 4;
B [ 1][2 ] = 3;
B [ 1][3 ] = 1;

Declarando, iniciando e atribuindo valores a um vetor de duas ou mais


dimenses
Para se atribuir valores s vrias dimenses de vetor, separamos cada dimenso num bloco (por chaves) e seus
elementos separados por vrgulas.
Exemplo de vetor de duas dimenses (2 elementos x 3 elementos):
f l o a t [][] V= { { 1 .5 ,2 .7 ,3 .5 } , { 1 .2 ,3 .0 ,4 .5 } } ;
O exemplo acima corresponde seguinte matriz:

Ento, no caso de duas dimenses, geralmente se formata o cdigo em Java assim (para lembrar a
representao "biordenada" da matriz):
f l o a t [][ 2 .7 , 3 .5 } ,
V
={
5
1

{1.2, 3 .0 , 4 .5 } } ;
Cada dimenso est agrupada por chaves. Cada um dos elementos da dimenso so separados por vrgulas. Os
nmeros fracionrios so representados com ponto ao invs de vrgula (entre a parte inteira e a fracionria).
Exemplo de um vetor de 3 dimenses (4 elementos x 3 elementos x 2 elementos), lembre-se que cada
dimenso est agrupada entre chaves
Vetores 40

i n t [][] V2={
{{1,65}, {2,47}, {33,5}},
{{1,32}, {22,7}, {53,65}},
{{1,5}, {12,7}, {23,5}},
{{1,2}, {2,7}, {3,66}}};
Equivale sobreposio (num espao tridimensional) dessas duas matrizes (formando a terceira dimenso):
1 2 33
1 22 53
e
1 12 23
1 2 3

Exemplos de programas com vetores


Exemplo 2: Um Exemplo do Uso de Vetores
p u b lic c la s s Im p rim eV eto res{
p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ){
i n t [] v e to r ={3, 2, 5};
S ystem . o u t. p r i n t l n ("O v e to r p o ssu i os v a lo re s "+v e t o r [0 ]+ ",
"+v e t o r [1 ]+ " e "+v e t o r [2 ]);
}
}
LINHA 1: Uma nova classe chamada ImprimeVetores criada
LINHA 2: O Mtodo main iniciado. Isso indica que a funo ImprimeVetores a principal.
LINHA 3: Um vetor de inteiros que representa (3, 2, 5) criado e inicializado.
LINHA 4: impressa uma string que forma o trecho "O vetor possui os seguintes valores ". Esta string
concatenada com o inteiro que o primeiro nmero do vetor, que concatenado com a string ", " e assim por
diante. No final, o que ser impresso ser: "O vetor possui os valores 3, 2 e 5.". Logo em seguida, o programa se
encerra.
Perceba que com o conhecimento visto at agora, os programas que estamos fazendo no so nem um pouco
interativos e rodam sempre do mesmo jeito. Tambm no est sendo possvel mostrar muitos detalhes da
Programao Orientada Objetos. Nos prximos captulos veremos como fazer isso.
41

Mtodos
O que so mtodos e para que servem
Esta pgina um esboo de informtica. Ampliando-a voc ajudar a melhorar o Wikilivros.

Mtodos
Mtodos so blocos de cdigo que pertencem a uma classe e tem por finalidade realizar uma tarefa. Eles so
anlogos s funes em C e sub-rotinas em pascal. Mtodos geralmente correspondem uma ao do objeto.
Exemplo: correr, pegar, etc. Numa classe para realizar clculos matemticos poderia ser pegar somar, subtrair,
dividir, etc. Alm disso um papel fundamental dos mesmos ter de evitar reescrever cdigo para uma mesma funo
toda vez que se deseja cham-la.

O comando return
O comando " return" serve para sair do mtodo em que est executando. Exemplos de uso:
p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ){
S ystem . o u t. p r i n t l n ("B oo!");
i f (a r g s . le n g th > 0)
re tu rn ;
S ystem . o u t. p r i n t l n ("B aa!");
}

Valor de retorno
Um mtodo pode retornar o valor de uma varivel. O tipo do valor de retorno definido antes do nome do mtodo.
O mtodo deve retornar um dado desse tipo atravs do comando return.
A palavra-chave void indica a ausncia de um tipo de dado. Serve para indicar um mtodo retorna nenhum dado. Por
exemplo:
p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ) {
//
}

Um exemplo prtico
No nosso exemplo vamos fazer mtodos que realizem operaes matemticas. Suponha que vamos fazer uma classe
OperacoesMatematicas
/* O p e ra c o e sM a te m a tic a s.ja v a * /

p u b lic c la s s O p eraco esM atem aticas{

p u b lic i n t so m ar( i n t num1, i n t num2 ){


O que so mtodos e para que servem 42

r e tu r n num1 + num2;
}
p u b lic i n t s u b t r a i r ( i n t num1, i n t num2 ){
r e tu r n num1 - num2;
}
p u b lic i n t m u l t i p l i c a r ( i n t num1, i n t num2 ){
r e tu r n num1 * num2;
}
p u b lic i n t d i v i d i r ( i n t num1, i n t num2 ){
r e tu r n num1 / num2;
}

Exemplo simples de mtodo


c la s s Um Retorno{

p u b lic s t a t i c v o id m a in (S trin g [ ] a rg s ) {

S ystem . o u t. p r i n t l n ( "Mtodo chamado: " + cham adaM etodo() );

p u b lic s t a t i c S trin g chamadaMetodo () {


S trin g s = " o l " ;
r e tu r n s ;

}
43

Classes e objetos
Introduo s classes
O conhecimento sobre classes um conhecimento global,sendo que toda linguagem orientada a objetos utiliza desse
conceito para projetar seus objetos. Uma classe nada mais do que um projeto de um objeto. Ao definirmos classes
estamos modelando uma entidade que pode ser criada vrias vezes com a mesma definio. Sendo que ao
necessitarmos utilizar essa entidade temos que criar um objeto atravs do nosso modelo que a classe. Fazendo uma
analogia, uma receita de bolo seria a classe o resultado dessa receita, o bolo, seria o objeto.

Declarao de classes
Para declarar uma classe em java, utilizamos a palavra reservada class. Por exemplo:
Digamos que criamos a classe YouTube. Se quero declarar essa classe como de acesso geral utilizaria a seguinte
sintaxe:
p u b lic c la s s YouTube {
//IMPLEMENTAO DE MTODOS E ATRIBUTOS DA CLASSE
}
Se q u e res uma c la s s e de a ce sso r e s t r i t o :
p r iv a te c la s s YouTube {
}
Se q u e res uma c la s s e de a ce sso r e s t r i t o :
p r o te c te d c la s s YouTube {
}
Objetos 44

Objetos
Elementos de software que representam entidades fsicas ou abstratas, simples ou complexas, dentro de um sistema.
Possuem identidade, responsabilidades especficas, estado e um conjunto de mensagens que esto aptos a responder.
Estticos: Dependem de um agente externo ao objeto para solicitar que o objeto altere o seu estado.
Dinmicos: O objeto capaz de espontaneamente alterar o seu prprio estado.

Herana
Em java a herana realizada de maneira simples ao utilizar a palavra chave extends:
Exemplo:
package academ ico;

p u b lic a b s tr a c t c la s s P esso a {
p u b lic S trin g strN om e;
p u b lic S trin g s tr T e le f o n e ;
/ / Mtodos
p u b lic v o id getS trN om e(S trin g Nome) {
t h i s . StrNome = Nome;
}
p u b lic S trin g setS trN o m e() {
r e tu r n StrNome;
}
}
p u b lic c la s s Aluno e x te n d s P esso a {
/ / strNome e s t r T e l e f o n e , bem como seu s m etodos so herdados n e s ta
c a la s s e p o r meio da p a la v ra "ex ten d s"

}
Quando uma classe criada como sub-classe de outra classe, a palavra-chave super usada para que a sub-classe
possa acessar mtodos public ou protected (mas no private) da superclasse. super tambm usado para invocar o
constructor da superclasse, durante o constructor da subclasse.
Sintaxe:
s u p e r . <method_name>(<argum entos> );
ou
s u p e r (<argum entos> ); //Em c o n tr u to r
Outro exemplo:
p u b lic c la s s S u p erC lass
{
S u p e rC la ss(S trin g t i t l e )
{
Herana 45

S ystem . o u t. p r i n t l n ( "S uper: " + t i t l e );


}
p u b lic v o id p r in tH e l lo ()
{
S ystem . o u t. p r i n t l n ( "H ello from S u p erC lass" );
re tu rn ;
}
}
p u b lic c la s s SubC lass e x te n d s S uperC lass
{
S u b C la ss(S trin g t i t l e ) / / c o n s tr u c to r
{
s u p e r (t i t l e ); / / chama o c o n s tr u c to r de Frame
}
p u b lic v o id p r in tH e l lo ()
{
s u p e r . p r in tH e llo ();
S ystem . o u t. p r i n t l n ( "H ello from SubC lass" );
re tu rn ;
}
p u b lic s t a t i c m a in ( S t r i n g [] a rg s )
{
SubC lass obj = new S u b C la ss();
o b j. p r in tH e llo ();
}
}
46

Modificadores de acesso
Modificadores
Modificadores
Modificadores de acesso
Os modificadores de acesso so palavras-chave que modificam a forma como podem ser acessadas as classes,
mtodos e/ou variveis.

Modificador de acesso private


O modificador de acesso "private" quando aplicado a um atributo ou a um mtodo indica que os mesmos s podem
ser acessados de dentro da classe que os criou (encapsulamento). Uma classe que herde de uma superclasse com
atributos declarados como "private" s poder ter acesso a eles atravs dos mtodos pblicos da prpria superclasse,
caso contrrio, no haver acesso a estes atributos.
Exemplo
c la s s C irc u lo
{
p r iv a te f l o a t r a i o ;
C ir c u lo ()
{
s u p e r ();
s e tR a io ( 3.0 );
}
v o id s e tR a io ( f l o a t r )
{
ra io = r
}
}
c la s s Pneu e x te n d s C irc u lo
{
Pneu p = new P n eu ();
p . ra io = 1 0 .0 ; //E r r o de com pilao. O A tr ib u to r a io p r iv a d o da
c la s s e C irc u lo
p . s e tR a io (1 0 .0 ); //C o r r e to , p o is a c la s s e Pneu e s t u t i l i z a n d o os
m todos d e fin id o s na c la s s e C irc u lo p a ra fa z e r
/ / a c e s s o ao a t r i b u t o p riv a d o r a io
}
Modificadores 47

Modificador de acesso protected


A instruo protected indica que o mtodo ou a varivel assim declarada possa ser acessada somente dentro do
pacote em que est contida atravs de uma subclasse.

Modificador de acesso public


A instruo public indica que a classe, mtodo ou varivel assim declarada possa ser acessada em qualquer
lugar e a qualquer momento da execuo do programa.

Friendly
Sem modificador de acesso, o membro da classe considerado friendly. No h uma palavra-chave para esse
modificador.

Outros modificadores
Os modificadores a seguir podem ser usados em conjunto com os modificadores de acesso provendo, assim, outros
comportamentos:

Modificador de acesso static


A instruo static serve:
na declarao de uma varivel dentro de uma classe, para se criar uma varivel que poder ser acessada por
todas as instncias de objetos desta classe como um varivel comum. Ou seja, a varivel criada ser a mesma
em todas instncias e quando seu contedo modificado em uma das instncias ento ele ser modificado em
todas instncias;
na declarao de um mtodo que deve ser acessado diretamente na classe e no nas suas instncias.

Modificador abstract
A instruo abstract serve para:
declarar mtodos abstratos, ou seja, mtodos que devero ser desenvolvidos/implementados nas subclasses.
Quando a classe que contiver mtodos abstratos for herdada, os referidos mtodos devero ser implementados,
caso contrrio, a classe que extendeu dever ser declarada como abstrata.
declarar classes abstratas que se desenvolvem numa(s) subclasse(s). Classes abstratas so aquelas que no
esto totalmente implementadas/descritas. Uma classe abstrata no pode ser instanciada e amplamente usada
nas interfaces.
Uma classe considerada abstrata se contiver pelo menos um mtodo abstrato. Um mtodo abstrato tem a
seguinte caracterstica: void getName( );
Caso o mtodo tenha as chaves caractersticas {}, o mesmo no mais ser considerado abstrato, embora no
tenha cdigo dentro das chaves.
Modificadores 48

Modificador final
A instruo final indica que a classe, mtodo ou varivel assim declarada tm uma nica atribuio que se
mantm constante, ou seja, no pode ser alterada no decorrer do processamento.
Este modificador declara o que chamamos, em programao, de constante.
53

Noes bsicas de E/S (Entrada e Sada)


Fluxos de entrada e sada
A entrada e sada de dados em Java feita atravs de streams.
Uma stream uma sequncia ordenada de bytes ou caracteres de tamanho indefinido. Streams podem ser abertas e
fechadas pelo programa; algumas vezes, estas operaes so feitas de forma automtica (normalmente em caso de
erro).
Um programa que usa uma stream deve incluir a biblioteca java.io, ou seja, deve incluir logo no incio:
im p o rt j a v a .i o . * ;
ou instrues equivalentes.
Assim como em C/C++, uma stream no usada diretamente atravs do nome do arquivo; preciso abri-la como um
File para depois usar as operaes em streams.
Por exemplo, o programa abaixo pega o arquivo "teste1.txt" e copia seu contedo (bit-a-bit) para o arquivo
"teste2.txt":
im p o rt j a v a .i o . * ;

p u b lic c la s s exem plo_io {


p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ) throw s IO E xception {
F ile in p u tF ile = new F i l e (" t e s t e 1 . t x t " );
F ile o u tp u tF ile = new F i l e (" t e s t e 2 . t x t " );

F ile R e a d e r in = new F ile R e a d e r(in p u tF ile );


F ile W rite r ou t = new F ile W r ite r (o u tp u tF ile );
in t c ;

w h ile ( ( c = i n . r e a d ()) != -1)


o u t. w r i t e (c );

i n . c lo s e ();
o u t. c l o s e ();
}
}
Explicaes:
F ile in p u tF ile = new F i l e (" t e s t e 1 . t x t " )
F ile o u tp u tF ile = new F i l e (" t e s t e 2 . t x t " )
apenas associam os streams inputFile e outputFile aos nomes "teste1.txt" e "teste2.txt". Neste ponto, no foi dito que
"teste1.txt" entrada, nem que "teste2.txt" sada (obvimente, os nomes inputFile e outputFile so apenas
convenincia para o leitor do programa).
Fluxos de entrada e sada 54

F ile R e a d e r in = new F ile R e a d e r(in p u tF ile );


F ile W rite r ou t = new F ile W r ite r (o u tp u tF ile );
Neste ponto so criados os dois streams. in o stream de entrada, e out o stream de sada. Como, na declarao do
main, previmos uma exceo no I/O, caso o arquivo de entrada "teste1.txt" no exista, ser gerada uma mensagem de
erro.
in t c ;
w h ile ( ( c = i n . r e a d ()) != -1)
o u t. w r i t e (c );
c um inteiro. read, enquanto houver elementos para serem lidos, retorna nmeros naturais, e retorna -1 no final.
write escreve este nmero. Este loop (extremamente ineficiente para arquivos grandes!) faz a cpia, caracter a
caracter, do arquivo de entrada para o arquivo de sada.
i n . c lo s e ();
o u t. c l o s e ();
fecha os streams.
57

Utilizando a interface grfica


Swing
Swing uma API Java para interfaces grficas. Ela compatvel com a API AWT, mas trabalha de uma maneira
totalmente diferente. A API Swing procura renderizar\desenhar por contra prpria todos os componentes, ao invs de
delegar essa tarefa ao sistema operacional, como a maioria das outras APIs de interface grfica trabalham.
Por ser uma API de mais alto nvel, ou seja, mais abstrao, menor aproximao das APIs do sistema operacional,
ela tem bem menos performace que outras APIs grficas e consome mais memria RAM em geral. Porm, ela bem
mais completa, e os programas que usam Swing tm uma aparncia muito parecida, independente do Sistema
Operacional utilizado.
Este captulo segue a estrutura do livro Programao em GUI

ndice
Primeiro programa
Widgets
Eventos e Action listeners
58

Concluso
Autores
Os usurios citados abaixo contribuiram para o desenvolvimento deste trabalho. Estes dados foram obtidos em
16/12/2013.
Abacaxi, Albmont, Alexandref93, Alexandreqo, Algum, Daniel Souza, Dante Cardoso Pinto de Almeida, David
Stress, Devarde, Edufsousa, Ezarate, Felipe Gustavo Firmo, Fesaopilger, Guiwp, Helder.wiki, Helder.wiki.bot,
Hojerio, JackPotte, Jonas AGX, Jorge Morais, Julianocanuto, LipeFontoura, Lus Felipe Braga, Lukas23, Marco
Antonio Bidia, Marcos Antnio Nunes de Moura, Master, Maxtremus, MGFE Jnior, Mike.lifeguard, Nunesnd,
PatiBot, PatrciaR, Profvalente, Raylton P. Sousa, Ruy Pugliesi, SallesNeto BR, Scorpion, Seduardo, Sfragata,
Thiagoharry, Voz da Verdade, Wbrito, Webcentro, Wutsje.
59

Apndices
Palavras-chave ou palavras reservadas da
linguagem Java
Palavras-chave
Em programao, palavras-chave, ou palavras reservadas, so as palavras que no podem ser usadas como
identificadores, ou seja, no podem ser usadas como nome de variveis, nome de classes, etc. Estas palavras
so assim definidas ou porque j tm uso na sintaxe da linguagem ou porque sero usadas em alguns
momento, seja para manter compatibilidade com verses anteriores ou mesmo com outras linguagens. No caso
do Java temos as seguintes palavras-chave:
abstract continue for new switch
assert(3) default goto(1) package synchronized
boolean do if private this
break double implements protected throw
byte else import public throws
case enum(4) instanceof return transient
catch extends int short try
char final interface static void
class finally long strictfp(2) volatile
const(1) float native super while
null

(1) sem uso na linguagem


(2) somente a partir da verso 1.2
(3) somente a partir da verso 1.4
(4) somente a partir da verso 5.0

Notas
A palavra-chave goto no tem uso em Java. Ela foi reservada para que no seja usada como identificador dentro
dos programas, evitando assim confuses com o comanda goto que existe em outras linguagens.
Ferramentas da linguagem Java 60

Ferramentas da linguagem Java


Ferramentas da Linguagem Java
As ferramentas so os programas fornecidos no JSDK:
appletviewer
apt
extcheck
htmlconverter
keytool
jar
jarsigner
java
javac
javadoc
javah
javap
javaw
javaws
jconsole
jdb
jinfo
jmap
jps
jsadebugd
jstack
jstat
jstatd
kinit
klist
ktab
idlj
native2ascii
orbd
pack200
policytool
rmic
rmiregistry
rmid
serialver
servertool
tnameserv
unpack200
RMI 61

RMI
Introduo
A tecnologia Java RMI (Remote Method Invocation) consiste em uma biblioteca capaz de permitir que um
programa rodando em uma dada mquina efetue chamadas objetos instanciados em outra mquina. Apesar de ser
desenvolvida focando principalmente a chamada de procedimentos objetos localizados em mquinas distintas ela
tambm pode ser utilizada para efetuar a comunicao entre dois processos rodando na mesma mquina (desde que
ambos utilizem a JVM), muito embora tecnologias como XPCOM e outras possam disponibilizar performance e
integrao melhores.

Tenologias semelhantes
Existem duas outras tecnologias que se assemelham muito com a RMI: CORBA e .NET Remoting (que no .NET 3.0
foi incorporada pela WCF). A tecnologia .NET Remoting pode ser vista como a resposta Microsoft tecnologia
RMI, e possui quase as mesmas caractersticas. J a tecnologia CORBA divulgada mais tempo e possui a
vantagem de possuir bibliotecas em diversas linguagens, assim um objeto CORBA pode ser utilizado em vrios
programas escritos em linguagens diferentes (a tecnologia RMI foi feita exclusivamente para a plataforma Java).

Um exemplo rpido
Para demonstrar a facilidade da linguagem, vou criar um exemplo bem simples que ir utilizar a tecnologia RMI.
Um pequeno aplicativo para postar mensagens em um frum e listar as mesmas.
Primeiro devemos criar uma interface que ser utilizada para exibir aos usurios dos servio as operaes.
package rm iknolexam ple;
im p o rt ja v a .rm i.R e m o te E x c e p tio n ;
im p o rt ja v a .rm i.R e m o te ;
/* *
*
* @author Andre
*/
p u b lic in te r f a c e IForum
e x te n d s Remote {
p u b lic v o id p o stM essag e (S trin g a u th o r, S trin g aM essage) throw s
R em oteE xception;
p u b lic S t r i n g [] r e a d P o s ts () throw s R em oteE xception;
p u b lic S t r i n g [] r e a d P o s ts (i n t b e g in A t) throw s R em oteE xception;
}
Depois devemos criar uma classe que ir implementar a interface e disponibilizar a funcionalidade.
package rm iknolexam ple;
im p o rt ja v a .rm i.R e m o te E x c e p tio n ;
im p o rt ja v a .rm i.s e rv e r.U n ic a s tR e m o te O b je c t;
im p o rt ja v a .u t i l .V e c t o r ;
RMI 62

/* *
*
* @author Andre
*/
p u b lic c la s s ForumImpl
e x te n d s U nicastR em oteO bject
im plem ents IForum {

p r iv a te V ecto r p o s ts ;

/ / O c o n s tr u to r padro deve gera a exeo R em oteE xception


p u b lic Forum Im pl() throw s R em oteE xception {
p o s ts = new V e c to r();
}
p u b lic v o id p o stM essag e (S trin g a u th o r, S trin g aM essage) throw s
R em oteE xception {
p o s t s . a d d (a u th o r + " d is s e uma v ez: " + aM essage);
}
p u b lic S t r i n g [] r e a d P o s ts () throw s R em oteE xception {
S t r i n g [] r e s u l t = new S t r i n g [p o s t s . s i z e ( ) ] ;
p o s t s . to A rra y (r e s u l t );
r e tu r n r e s u l t ;
}
p u b lic S t r i n g [] r e a d P o s ts (i n t b e g in A t) throw s R em oteE xception {
S t r i n g [] r e s u l t s = r e a d P o s ts ();
S t r i n g [] copy = new S t r i n g [r e s u l t s . le n g th - b e g in A t];
S ystem . a rra y c o p y (r e s u l t s , b e g in A t, copy, 0, co p y . le n g th );
r e tu r n copy;
}
Feito isso vamos implementar a classe que ir disponibilizar o servio ao usurio.
package rm iknolexam ple;
im p o rt ja v a.rm i.N am in g ;
im p o rt ja v a .rm i.R e m o te E x c e p tio n ;

/* *
*
* @author Andre
*/
p u b lic c la s s F orum Service {
p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ) {
try {
RMI 63

ForumImpl forumObj = new Forum Im pl();


Naming. r e b in d ("fo ru m S e rv ic e ", forum O bj);
S ystem . e r r . p r i n t l n ("R odando");
} c a tc h (R em oteE xception e ) {
S ystem . e r r . p r i n t l n ("O correu um e rro r e la t iv o ao RMI: " +
e . g etM essag e( ) ) ;
e . p rin tS ta c k T r a c e ();
S ystem . e x i t (0 );
} c a t c h (E x cep tio n e ) {
S ystem . e r r . p r i n t l n ("O correu um e rro d esco n h ecid o : " +
e . g etM essag e( ) ) ;
e . p rin tS ta c k T r a c e ();
S ystem . e x i t (0 );
}
}
}
Na classe acima observe a linha:
Naming. r e b in d ("fo ru m S e rv ic e ", forum O bj);
Ela responsvel por associar um nome ao seu objeto. atravs deste nome que os computadores e processos
remotos iro encontrar e utilizar o seu objeto. Este nome nico para um dado host, ou seja, mesmo se duas
aplicaes criarem objetos distintos (at mesmo de classes distintas) o mesmo nome no poder ser utilizado.
Por ltimo vamos implementar a classe que ir utilizar o servio disponibilizado.
package rm iknolexam ple;
im p o rt ja v a.rm i.N am in g ;
im p o rt ja v a .rm i.R e m o te E x c e p tio n ;

/* *
*
* @author Andre
*/
p u b lic c la s s F orum C lient {
p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ) {
try {
IForum forumObj =
(IForum )Naming. lo o k u p (" rm i://lo c a lh o s t/f o r u m S e r v ic e " );
forum O bj. p o stM essag e (" a u to r " , "Java RMI m uito l e g a l " );
forum O bj. p o stM essag e (" a u to r " , "Nunca p o s te no frum sem
b u s c a r" );
S t r i n g [] p o s ts = forum O bj. r e a d P o s ts ();
i n t x = 1;
f o r (S trin g s: p o s ts )
S ystem . e r r . p r i n t l n (x++ + ": "+ s );
RMI 64

i n t o f f s e t = 1;
p o s ts = forum O bj. r e a d P o s ts (o f f s e t );
f o r (S trin g s: p o s ts )
S ystem . e r r . p r i n t l n ((x++ + o f f s e t ) + ": " + s );

} c a tc h (R em oteE xception e ) {
S ystem . e r r . p r i n t l n ("O correu um e rro r e la t iv o ao RMI: " +
e . g etM essag e( ) ) ;
e . p rin tS ta c k T r a c e ();
S ystem . e x i t (0 );
} c a t c h (E x cep tio n e ) {
S ystem . e r r . p r i n t l n ("O correu um e rro d esco n h ecid o : " +
e . g etM essag e( ) ) ;
e . p rin tS ta c k T r a c e ();
S ystem . e x i t (0 );
}
}
}
A linha:
IForum forumObj = (IForum )Naming. lo o k u p (" rm i://lo c a lh o s t/f o r u m S e r v ic e " );
Efetua uma consulta no host informado (neste caso o localhost) e solicita o objeto associado ao nome: forumService.
O resto do cdigo fala por si s, e graas ao RMI as chamadas so idnticas chamadas locais. Melhorando um
pouco o design da aplicao possvel criar um objeto local ou ento um remoto dependendo da ocasio.
Para facilitar o teste, a classe abaixo foi criada apenas para permitir rodar o servio atravs da linha de comando:
"java -jar arquivoJar.jar"
package rm iknolexam ple;
/* *
*
* @author Andre
*/
p u b lic c la s s Main {
/* *
* @param args th e command l i n e argum ents
*/
p u b lic s t a t i c v o id m a in (S t r i n g [] a r g s ) {
i f (a r g s [ 0 ] .e q u a ls (" s e r v e r " ))
F oru m S erv ice.m a in (a r g s );
e ls e i f (a r g s [ 0 ] .e q u a ls (" c l i e n t " ))
F o ru m C lie n t.m a in (a r g s );
e ls e
S ystem . e r r . p r i n t l n ("U sage: " );
}
RMI 65

}
pronto! Para executar basta compilar as classes, iniciar o aplicativo rmiregistry que o responsvel por encontrar e
disparar as chamadas aos objetos corretos e iniciar o servidor em um terminal ou prompt.
Aps isso feito abra outro terminal ou prompt e inicie a aplicao cliente.
Observao importante: neste caso o teste apenas local mas quando utiliza-se um ambiente com diversas mquinas
muito importante iniciar a aplicao servidor com a opo: -Djava.rmi.server.hostname=<nome_ou_ip_do_host>.
Caso no seja feito o objeto pode ser exportado com o host errado e a aplicao cliente pode tentar disparar o
procedimento em um endereo diferente do solicitado.
Existem diversas outras caractersticas da tecnologia RMI que no foram abordadas, como por exemplo a capacidade
de baixar o cdigo de uma determinada classe de modo transparente. Assim mesmo que o contexto local no
reconhea uma classe esta ser transferida do servidor e poder ser utilizada pela aplicao.

Fontes e referncias
Informaes sobre RMI - Sun [1]
Java RMI - Andr Luiz Alves Moraes [2]

Referncias
[1] http:/ /java. sun. com/javase/ technologies/ core/basic/rmi/ index.jsp
[2] http:/ /knol. google.com/k/ andr%C3%A9-luiz-alves-moraes/java-rmi/ n6m12v5sl0jh/1

Java 3D
Java 3D uma API desenvolvida em Java em colaborao com a Sun Microsystems onde podem ser desenvolvidas
aplicaes compiladas e interpretadas (tendo-se necessria a utilizao da JVM) podendo inclusive serem rodadas
em internet browsers

Ligaes externas
Site oficial [1]
Java 3D project [2]

Referncias
[1] http:/ /java. sun. com/javase/ technologies/ desktop/java3d/
[2] https://java3d. dev.java. net/
Fontes e Editores da Pgina 66

Fontes e Editores da Pgina


Introduo Fonte: http://pt.wikibooks.org/w/index.php?oldid=262585 Contribuidores: Abacaxi, Albmont, Dante Cardoso Pinto de Almeida, Edufsousa, Guiwp, Helder.wiki, Jorge Morais,
Marcos Antnio Nunes de Moura, Ruy Pugliesi, Scorpion, Thiagoharry, Voz da Verdade, Wbrito, 1 edies annimas
O que Java Fonte: http://pt.wikibooks.org/w/index.php?oldid=249151 Contribuidores: Abacaxi, Albmont, Dante Cardoso Pinto de Almeida, Felipe Gustavo Firmo, Helder.wiki,
Julianocanuto, Lukas23, 24 edies annimas
Caractersticas de linguagens orientadas a objetos Fonte: http://pt.wikibooks.org/w/index.php?oldid=247819 Contribuidores: Abacaxi, Albmont, Alexandreqo, Dante Cardoso Pinto de
Almeida, Felipe Gustavo Firmo, Helder.wiki, Marcos Antnio Nunes de Moura, Nunesnd, Profvalente, Raylton P. Sousa, Thiagoharry, Voz da Verdade, Wbrito, 7 edies annimas
A histria de Java Fonte: http://pt.wikibooks.org/w/index.php?oldid=269731 Contribuidores: Abacaxi, Marcos Antnio Nunes de Moura, Raylton P. Sousa, SallesNeto BR, 6 edies annimas
Onde Java est presente Fonte: http://pt.wikibooks.org/w/index.php?oldid=247813 Contribuidores: Abacaxi, LipeFontoura, SallesNeto BR, Voz da Verdade, 5 edies annimas
O porqu de se estudar Java Fonte: http://pt.wikibooks.org/w/index.php?oldid=247825 Contribuidores: Abacaxi, Profvalente, Raylton P. Sousa, SallesNeto BR, 2 edies annimas
Por onde comear Fonte: http://pt.wikibooks.org/w/index.php?oldid=247812 Contribuidores: Abacaxi, Albmont, Raylton P. Sousa, SallesNeto BR, 2 edies annimas
Pr-requisitos para acompanhar o livro Fonte: http://pt.wikibooks.org/w/index.php?oldid=250823 Contribuidores: Abacaxi, Albmont, Jorge Morais, SallesNeto BR, Voz da Verdade
Criando e executando o primeiro programa Fonte: http://pt.wikibooks.org/w/index.php?oldid=269627 Contribuidores: Abacaxi, Albmont, Ezarate, Jorge Morais, MGFE Jnior, Voz da
Verdade, Wutsje, 53 edies annimas
Como funciona o primeiro programa Fonte: http://pt.wikibooks.org/w/index.php?oldid=267185 Contribuidores: Abacaxi, Albmont, Voz da Verdade
Tipos de dados primrios Fonte: http://pt.wikibooks.org/w/index.php?oldid=267304 Contribuidores: Abacaxi, Albmont, Helder.wiki, JackPotte, Jorge Morais, Thiagoharry, Voz da Verdade,
Wbrito, Webcentro, 13 edies annimas
Literais Fonte: http://pt.wikibooks.org/w/index.php?oldid=267190 Contribuidores: Abacaxi, Thiagoharry, Voz da Verdade, Wbrito, 1 edies annimas
Variveis Fonte: http://pt.wikibooks.org/w/index.php?oldid=248190 Contribuidores: Abacaxi, Voz da Verdade
Identificadores Fonte: http://pt.wikibooks.org/w/index.php?oldid=267186 Contribuidores: Abacaxi, Jorge Morais, Voz da Verdade, 2 edies annimas
Converso de tipos Fonte: http://pt.wikibooks.org/w/index.php?oldid=250966 Contribuidores: Abacaxi, David Stress, Hojerio, 1 edies annimas
Constante Fonte: http://pt.wikibooks.org/w/index.php?oldid=267187 Contribuidores: Abacaxi, Voz da Verdade
Blocos e comentrios de programao Fonte: http://pt.wikibooks.org/w/index.php?oldid=248192 Contribuidores: Abacaxi, Albmont, JackPotte, Raylton P. Sousa, Voz da Verdade, 1 edies
annimas
Comandos de seleo Fonte: http://pt.wikibooks.org/w/index.php?oldid=267340 Contribuidores: Abacaxi, Thiagoharry, Voz da Verdade, 1 edies annimas
if Fonte: http://pt.wikibooks.org/w/index.php?oldid=267856 Contribuidores: Abacaxi, Fesaopilger, Helder.wiki, SallesNeto BR, Sfragata, 5 edies annimas
switch Fonte: http://pt.wikibooks.org/w/index.php?oldid=268030 Contribuidores: Abacaxi, Guiwp, Helder.wiki, 4 edies annimas
Comandos de iterao Fonte: http://pt.wikibooks.org/w/index.php?oldid=269501 Contribuidores: Abacaxi, Voz da Verdade, 16 edies annimas
for Fonte: http://pt.wikibooks.org/w/index.php?oldid=267861 Contribuidores: Abacaxi, 2 edies annimas
Vetores Fonte: http://pt.wikibooks.org/w/index.php?oldid=248227 Contribuidores: Abacaxi, Albmont, JackPotte, Lus Felipe Braga, Marcos Antnio Nunes de Moura, Thiagoharry, Voz da
Verdade, Wbrito, 2 edies annimas
Exemplos de programas com vetores Fonte: http://pt.wikibooks.org/w/index.php?oldid=267342 Contribuidores: Abacaxi, Albmont, Jorge Morais, Seduardo, Thiagoharry, Voz da Verdade,
Wbrito, 2 edies annimas
O que so mtodos e para que servem Fonte: http://pt.wikibooks.org/w/index.php?oldid=268202 Contribuidores: Abacaxi, Devarde, Raylton P. Sousa, SallesNeto BR, 1 edies annimas
Exemplo simples de mtodo Fonte: http://pt.wikibooks.org/w/index.php?oldid=231987 Contribuidores: David Stress, Raylton P. Sousa, 1 edies annimas
Introduo s classes Fonte: http://pt.wikibooks.org/w/index.php?oldid=262163 Contribuidores: JackPotte, 2 edies annimas
Declarao de classes Fonte: http://pt.wikibooks.org/w/index.php?oldid=182545 Contribuidores: 1 edies annimas
Objetos Fonte: http://pt.wikibooks.org/w/index.php?oldid=251765 Contribuidores: Abacaxi, Hojerio
Herana Fonte: http://pt.wikibooks.org/w/index.php?oldid=268212 Contribuidores: Abacaxi, 2 edies annimas
Modificadores Fonte: http://pt.wikibooks.org/w/index.php?oldid=267512 Contribuidores: Abacaxi, Voz da Verdade, 3 edies annimas
Fluxos de entrada e sada Fonte: http://pt.wikibooks.org/w/index.php?oldid=205111 Contribuidores: Albmont, Helder.wiki
Swing Fonte: http://pt.wikibooks.org/w/index.php?oldid=205126 Contribuidores: Albmont, 3 edies annimas
Autores Fonte: http://pt.wikibooks.org/w/index.php?oldid=267810 Contribuidores: Abacaxi, Guiwp
Palavras-chave ou palavras reservadas da linguagem Java Fonte: http://pt.wikibooks.org/w/index.php?oldid=268200 Contribuidores: Abacaxi, Albmont, Edufsousa, Voz da Verdade
Ferramentas da linguagem Java Fonte: http://pt.wikibooks.org/w/index.php?oldid=267454 Contribuidores: Abacaxi, Voz da Verdade
RMI Fonte: http://pt.wikibooks.org/w/index.php?oldid=262111 Contribuidores: Daniel Souza, Guiwp, Raylton P. Sousa
Java 3D Fonte: http://pt.wikibooks.org/w/index.php?oldid=262118 Contribuidores: Algum, Guiwp, MGFE Jnior, Master, Maxtremus
Fontes, Licenas e Editores da Imagem 67

Fontes, Licenas e Editores da Imagem


Image:Merge-arrows.svg Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Merge-arrows.svg Licena: Public Domain Contribuidores: User:Erin Silversmith, User:Lifeisunfair,
User:Rei-artur
Image:Array1.svg Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Array1.svg Licena: Public Domain Contribuidores: User:Jarkko Piiroinen
Image:Array2.svg Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Array2.svg Licena: Public Domain Contribuidores: User:Jarkko Piiroinen
Image:Vetor3d01.svg Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Vetor3d01.svg Licena: GNU Free Documentation License Contribuidores: Voz da Verdade
Image:Nuvola apps konsole.png Fonte: http://pt.wikibooks.org/w/index.php?title=Ficheiro:Nuvola_apps_konsole.png Licena: GNU Lesser General Public License Contribuidores: Alno,
Alphax