Buscar

APOSTILA - TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Autores: Prof. José Cassiano Grassi Gunji
 Prof. Salatiel Luz Marinho
 Prof. Luciano Soares de Souza
 
Tópicos Especiais de 
Programação Orientada a 
Objetos
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Professores conteudistas: José Cassiano Grassi Gunji / Salatiel Luz Marinho / 
Luciano Soares de Souza
© Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida por qualquer forma e/ou 
quaisquer meios (eletrônico, incluindo fotocópia e gravação) ou arquivada em qualquer sistema ou banco de dados sem 
permissão escrita da Universidade Paulista.
Dados Internacionais de Catalogação na Publicação (CIP)
G975t Gunji, José Cassiano Grassi. 
Tópicos especiais de programação orientada a objetos. / José 
Cassiano Grassi Gunji, Salatiel Luz Marinho, Luciano Soares de Souza. 
– São Paulo: Editora Sol, 2015.
128 p., il.
Nota: este volume está publicado nos Cadernos de Estudos e 
Pesquisas da UNIP, Série Didática, ano XXI, n. 2-167/15, ISSN 1517-9230.
11. Interfaces gráficas. 2. Linguagem JAVA. 3. Programação 
ANDROID. I. Marinho, Salatiel Luz. II. Souza, Luciano Soares de. II.Título.
CDU 681.3.062
José Cassiano Grassi Gunji
É mestre em Tecnologia da Informação Aplicada pelo 
Centro Estadual de Educação Tecnológica Paula Souza e 
bacharel em Sistemas de Informação pela Universidade 
Presbiteriana Mackenzie.
Atua como docente em cursos de graduação em 
Tecnologia da Informação, lecionando em disciplinas como 
Programação Orientada a Objetos em Diversas Linguagens, 
Análise de Sistemas, Lógica de Programação entre outras.
Salatiel Luz Marinho
Pós-graduado em Gestão de Projetos pelo Instituto 
Brasileiro de Tecnologia Avançada (IBTA) e formado em 
Engenharia da Computação pela Universidade Paulista 
(UNIP), trabalha há mais de dez anos no desenvolvimento de 
aplicações desktop e web, tendo prestado serviços a instituições 
financeiras, de varejo e de seguros e a instituições acadêmicas.
Leciona há mais de oito anos as disciplinas de 
programação orientada a objetos na UNIP.
Luciano Soares de Souza
Mestre em Engenharia de Produção pela Universidade 
Paulista (UNIP) e bacharel em Ciência da Computação pela 
mesma universidade.
É coordenador do Curso Superior de Tecnologia em 
Análise e Desenvolvimento de Sistemas da UNIP, nas 
modalidades presencial e EaD, leciona no curso as disciplinas 
Engenharia de Software, Projeto de Interface com o Usuário, 
Princípios de Sistemas de Informação entre outras, e orienta 
o Projeto Integrado Multidisciplinar – PIM.
Na Universidade Paulista também atua como Gerente 
de Integração de Sistemas. Possui mais de 20 anos de 
experiência com Tecnologia da Informação, atuando nas 
áreas de desenvolvimento de sistemas, engenharia de 
software, interação humano-computador e automação 
industrial. Como professor e coordenador possui mais de 
oito anos de experiência.
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Prof. Dr. João Carlos Di Genio
Reitor
Prof. Fábio Romeu de Carvalho
Vice-Reitor de Planejamento, Administração e Finanças
Profa. Melânia Dalla Torre
Vice-Reitora de Unidades Universitárias
Prof. Dr. Yugo Okida
Vice-Reitor de Pós-Graduação e Pesquisa
Profa. Dra. Marília Ancona-Lopez
Vice-Reitora de Graduação
Unip Interativa – EaD
Profa. Elisabete Brihy 
Prof. Marcelo Souza
Prof. Dr. Luiz Felipe Scabar
Prof. Ivan Daliberto Frugoli
 Material Didático – EaD
 Comissão editorial: 
 Dra. Angélica L. Carlini (UNIP)
 Dra. Divane Alves da Silva (UNIP)
 Dr. Ivan Dias da Motta (CESUMAR)
 Dra. Kátia Mosorov Alonso (UFMT)
 Dra. Valéria de Carvalho (UNIP)
 Apoio:
 Profa. Cláudia Regina Baptista – EaD
 Profa. Betisa Malaman – Comissão de Qualificação e Avaliação de Cursos
 Projeto gráfico:
 Prof. Alexandre Ponzetto
 Revisão:
 Marcilia Brito
 Rose Castilho
 Virgínia Bilatto
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Sumário
Tópicos Especiais de Programação 
Orientada a Objetos
APRESENTAÇÃO ......................................................................................................................................................9
INTRODUÇÃO ...........................................................................................................................................................9
Unidade I
1 INTRODUÇÃO AO JAVA ................................................................................................................................. 11
1.1 Um breve histórico .............................................................................................................................. 11
1.2 Arquitetura de um programa em Java ........................................................................................ 12
1.3 Características da linguagem Java ................................................................................................ 14
1.3.1 Simplicidade .............................................................................................................................................. 14
1.3.2 Orientação a objetos ............................................................................................................................. 14
1.3.3 Multithread ............................................................................................................................................... 14
1.3.4 Robustez ..................................................................................................................................................... 14
1.3.5 Segurança .................................................................................................................................................. 15
1.4 O que é necessário para se programar em Java ...................................................................... 15
1.4.1 Instalando o JDK Java SE ..................................................................................................................... 17
1.4.2 Instalando o Eclipse ............................................................................................................................... 18
2 A LINGUAGEM JAVA ...................................................................................................................................... 18
2.1 Entrada e saída de dados usando JOptionPane ....................................................................... 25
2.2 Recomendações de estilo .................................................................................................................. 29
2.3 Tipos primitivos ..................................................................................................................................... 30
2.4 Conversão de tipos .............................................................................................................................. 31
2.5 Classes wrapper (invólucro) ............................................................................................................. 34
2.6 Introdução a classes e objetos ........................................................................................................ 37
2.7 Instruções de controle ........................................................................................................................ 40
2.8 Arrays ........................................................................................................................................................ 47
2.9 Coleções ................................................................................................................................................... 49
2.10 Tratamento de exceções .................................................................................................................. 50
Unidade II
3 PROGRAMAÇÃO ORIENTADA A OBJETOS ..............................................................................................56
3.1 Sobrecarga .............................................................................................................................................. 56
3.2 Herança .................................................................................................................................................... 58
3.3 Sobrescrita ............................................................................................................................................... 59
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
3.4 Polimorfismo .......................................................................................................................................... 60
3.5 Modificadores de acesso ................................................................................................................... 62
3.6 Escopo ....................................................................................................................................................... 63
3.7 Classes abstratas e interfaces .......................................................................................................... 65
4 INTERFACES GRÁFICAS ................................................................................................................................. 70
Unidade III
5 INTRODUÇÃO AO ANDROID ........................................................................................................................ 79
5.1 Fundamentos e paradigmas de programação para dispositivos móveis ....................... 79
5.1.1 Dispositivos móveis ................................................................................................................................ 80
5.1.2 Desafios técnicos para dispositivos móveis ................................................................................. 80
5.1.3 Usabilidade e os dispositivos móveis .............................................................................................. 80
5.1.4 Aplicações móveis .................................................................................................................................. 81
5.2 Android ..................................................................................................................................................... 82
5.3 Open Handset Alliance ....................................................................................................................... 83
5.4 Versões do Android .............................................................................................................................. 84
5.5 Arquitetura do Android ...................................................................................................................... 85
5.5.1 Linux Kernel ............................................................................................................................................... 86
5.5.2 Libraries e Android Runtime ............................................................................................................... 87
5.5.3 Application Framework ........................................................................................................................ 88
5.5.4 Applications .............................................................................................................................................. 89
6 CONCEITOS FUNDAMENTAIS ...................................................................................................................... 89
6.1 Construindo o ambiente de desenvolvimento ......................................................................... 89
6.2 Instalando o Android Development Kit (Android SDK) ......................................................... 89
6.3 Instalando o Android Development Tools (ADT) ...................................................................... 90
Unidade IV
7 PROGRAMAÇÃO ANDROID ......................................................................................................................... 94
7.1 Criando um projeto do Android ..................................................................................................... 94
7.2 Executar o projeto ................................................................................................................................ 95
7.3 O arquivo AndroidManifest.xml ..................................................................................................... 98
7.4 Efetuando debug no aplicativo ....................................................................................................100
7.5 Activities.................................................................................................................................................100
7.6 Views........................................................................................................................................................101
7.7 Método setContentView() ...............................................................................................................101
7.8 Criar uma Activity ..............................................................................................................................101
8 INTERFACES GRÁFICAS ...............................................................................................................................104
8.1 TextView .................................................................................................................................................106
8.2 EditText ...................................................................................................................................................107
8.3 CheckBox ...............................................................................................................................................108
8.4 RadioButton .........................................................................................................................................110
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
8.5 ImageView .............................................................................................................................................110
8.6 Button .....................................................................................................................................................111
8.7 DatePicker .............................................................................................................................................112
8.8 TimePicker .............................................................................................................................................113
8.9 Layouts ...................................................................................................................................................114
8.9.1 Linear layout ...........................................................................................................................................114
8.9.2 Table layout .............................................................................................................................................115
8.10 Intent ....................................................................................................................................................116
8.11 Broadcast Receivers .........................................................................................................................117
8.12 Services ................................................................................................................................................117
8.13 Persistência de dados .....................................................................................................................119
9
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gram
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
APRESENTAÇÃO
Este livro tem como finalidade apresentar um roteiro de estudos com exemplos práticos, visando 
preparar o aluno para desenvolver programas de computador utilizando a tecnologia Java.
Todo o conteúdo desta obra foi desenvolvido de maneira a permitir que o aluno construa seu 
conhecimento a respeito da tecnologia Java de maneira gradativa. Por isso, para se entender as 
últimas partes do livro, o aluno deve ter passado por todas as partes anteriores, de modo a acumular 
conhecimento suficiente para compreender os assuntos desenvolvidos.
Não é necessário conhecimento anterior de Java para acompanhar essa obra. Entretanto, assume-se 
que o aluno já esteja familiarizado com os conceitos de Lógica de Programação, assim como de Análise 
de Sistemas Orientados a Objetos.
Inicialmente, veremos os conceitos relacionados à tecnologia de programação Java e como essa 
tecnologia se situa com relação às demais tecnologias em uso atualmente. Um pouco da história do 
desenvolvimento do Java também será apresentada.
Abordaremos de maneira prática a programação usando a linguagem Java. Faremos breves revisões 
sobre os conceitos da Lógica de Programação e Orientação a Objetos aplicadas ao Java.
Também serão apresentados os recursos do Java para o desenvolvimento de interfaces gráficas com 
o usuário.
Em seguida, serão apresentados os conceitos relacionados à computação móvel e ao ambiente de 
programação para dispositivos móveis que utilizam o sistema operacional Android.
Bons estudos!
INTRODUÇÃO
O conhecimento tecnológico dos homens propiciou a criação de diversos mecanismos capazes de 
realizar tarefas. Há séculos existem aparelhos mecânicos capazes de realizar tarefas dos mais diversos 
níveis de complexidade. Por exemplo, existiram teares capazes de tecer padrões complexos em tecidos 
de maneira automática, máquinas capazes de realizar cálculos matemáticos e até mesmo codificar e 
decodificar mensagens de rádio. A tecnologia desses mecanismos podia ser mecânica, elétrica e, mais 
recentemente, eletrônica. Algo que estes dispositivos tinham em comum era algum método pelo qual 
eles poderiam ser programados.
Com o desenvolvimento da tecnologia e com o surgimento dos computadores digitais, foram 
desenvolvidas linguagens de programação que poderiam ser interpretadas diretamente por esses 
computadores: as linguagens de máquina. Entretanto, linguagens de máquina são de difícil entendimento 
para pessoas e, por isso, logo começaram a ser desenvolvidas linguagens de alto nível.
10
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Uma linguagem de alto nível é um código com o qual se pode expressar algoritmos usando um 
vocabulário e uma sintaxe semelhante ao vocabulário e sintaxe da linguagem humana (quase sempre 
em inglês). Esse código escrito em linguagem de alto nível pode ser, então, traduzido (compilado) para 
a linguagem de máquina do computador em que ele será executado.
É nesse contexto que surge a linguagem de programação Java. Seus desenvolvedores estipularam 
uma meta arrojada: criar uma linguagem de programação multiplataforma. Isso significa que um código 
de computador escrito em Java, depois de compilado, poderia ser executado por qualquer computador, 
executando qualquer sistema operacional que oferecesse suporte ao Java, sem a necessidade de 
recompilar o código-fonte. Como o Java realiza esta tarefa é o que veremos neste livro-texto. Também 
veremos como desenvolver aplicativos usando Java, tanto para computadores desktop quanto para 
dispositivos móveis que executem o sistema operacional Android.
11
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Unidade I
1 INTRODUÇÃO AO JAVA
Os computadores modernos, independentemente da arquitetura ou fabricante, apenas conseguem 
executar programas escritos em sua própria linguagem de máquina. Uma linguagem de máquina é uma 
sequência de números escritos na base 16, também conhecida como números hexadecimais. Um trecho 
de um programa em linguagem de máquina apresenta a aparência da figura a seguir.
CD 20 FF 9F 00 9A F0 FE-1D F0 4F 03 F0 07 8A 03
F0 07 17 03 F0 07 DF 07-01 01 01 00 02 FF FF FF
FF FF FF FF FF FF FF FF-FF FF FF FF BD 0D 4C 01
D0 0C 14 00 18 00 3D 0E-FF FF FF FF 00 00 00 00
05 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
CD 21 CB 00 00 00 00 00-00 00 00 00 00 20 20 20
20 20 20 20 20 20 20 20-00 00 00 00 00 20 20 20
20 20 20 20 20 20 20 20-00 00 00 00 00 00 00 00
00 0D 76 2E 65 78 65 0D-44 4F 57 53 5C 73 79 73
74 65 6D 33 32 5C 64 6F-73 78 0D 0D 64 61 20 72
65 64 65 20 28 63 61 72-72 65 67 61 72 20 61 6E
74 65 73 20 64 6F 20 64-6F 73 78 2E 65 78 65 29
Figura 1 – Exemplo de um código de computador em hexadecimal
Por razões óbvias, é muito difícil para um programador escrever um programa usando linguagem 
de máquina. Para resolver este problema, logo começaram a ser desenvolvidas diversas linguagens de 
computador de alto nível, ou seja, linguagens que permitem que se escreva algoritmos usando palavras 
com um vocabulário e uma sintaxe semelhante ao vocabulário e sintaxe da linguagem humana, sendo 
que quase todas usam a língua inglesa.
Muitas linguagens nunca atingiram grande aceitação. Outras chegaram a ser usadas com frequência, 
mas acabaram caindo em desuso. Hoje em dia há um punhado de linguagens que permanecem bastante 
populares. Alguns exemplos são o COBOL, o C++ e o C# (DEITEL; DEITEL, 2005; 2010). As linguagens de 
sucesso sempre apresentam algo que as diferencia das demais, trazendo alguma vantagem com relação 
às outras. O Java é um desses casos de sucesso. Vejamos a seguir como se deu o desenvolvimento do Java.
1.1 Um breve histórico
A história da criação do Java é descrita por diversos autores, como Horstmann e Cornell (2010), 
Deitel e Deitel (2005; 2010), Jorge (2004), entre outros.
12
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
A Sun Microsystems, em 1991, financiou um projeto de pesquisa corporativa interna com o codinome 
Green, que resultou no desenvolvimento de uma linguagem baseada em C++ que seu criador, James 
Gosling, chamou de Oak. Descobriu-se mais tarde que já havia uma linguagem de programação com 
este nome. Uma equipe da Sun, em uma visita a uma cafeteria local, que servia café cuja origem era da 
ilha de Java na Indonésia, sugeriu esse nome e ele acabou pegando.
O projeto passou por dificuldades e quase foi cancelado. Mas em 1993 a World Wide Web explodiu 
em popularidade e a equipe da Sun viu um grande potencial para utilizar o Java para adicionar conteúdo 
dinâmico, como interatividade e animações, às páginas da Web, o que deu nova vida ao projeto.
O Java foi anunciado formalmente em 1995, ganhando muito interesse da comunidade do World 
Wide Web. Atualmente, o Java é popular no desenvolvimento de software para diversos aplicativos, 
como aplicativos corporativos de grande porte, aplicativos governamentais, no aprimoramento da 
funcionalidade de servidores Web, assim como aplicativos para o consumo popular em microcomputadores 
pessoais e dispositivos móveis.
 Saiba mais
Está disponível (em inglês) uma linha do tempo detalhada do 
desenvolvimento do Java desde sua concepção até o momento atual:
<http://oracle.com.edgesuite.net/timeline/java/>.
1.2 Arquitetura de um programa em Java
Um dos aspectos mais marcantes do Java e que esteve presente desde sua concepção é o fato 
de essa linguagem ser multiplataforma. Plataforma é o conjunto formado por um computador e o 
sistema operacional instalado nesse computador. Podemos, então, ter as seguintes plataformas:
• Computador padrão PC-Intel executando Windows.
• Computador padrão PC-Intel executando Linux.
• Computador padrão iMac executando Mac OS.
• Computador padrão workstation executando Solaris.
Dizer que o Java é multiplataforma significadizer que um programa feito em Java e compilado em 
uma determinada plataforma poderá ser executado nessa plataforma e também em todas as demais 
plataformas que dão suporte ao Java.
13
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
 Observação
Diversas linguagens, como o C++, por exemplo, estão disponíveis para 
diversas plataformas. Entretanto, um código escrito em C++ que seja 
compilado em uma determinada plataforma só poderá ser executado nesta 
mesma plataforma. Para que o código seja executado em outra plataforma, 
ele deverá ser compilado novamente, mas, dessa vez, na plataforma em que 
se deseja executar o código.
Como é possível que um programa compilado em Java em uma determinada plataforma possa ser 
executado em outras plataformas?
 Lembrete
Um computador só consegue executar programas que estejam escritos 
em linguagem de máquina. Quando um programa é escrito em uma 
linguagem de alto nível, o código deste programa deve ser compilado 
(traduzido) para a linguagem de máquina da plataforma que irá executar 
o programa.
O Java realiza esta façanha porque ele não é compilado diretamente para a linguagem de máquina 
de uma plataforma específica. Em vez disso, ele é compilado para uma linguagem de máquina de 
um computador fictício, uma máquina virtual. Para que o programa possa ser, então, executado, um 
computador deve utilizar um emulador desse computador fictício, que interpreta o código compilado 
Java. Em outras palavras: um programa em Java é semicompilado, o que significa que o código-fonte é 
compilado para uma linguagem intermediária, conhecida como bytecode. O bytecode é um código de 
computador escrito em linguagem de máquina da Máquina Virtual Java (Java Virtual Machine – JVM). 
A Máquina Virtual Java, então, interpreta o bytecode e executa o programa.
Código-fonte Compilador 
Java
Bytecode Máquina 
Virtual Java
Programa em 
execução
Figura 2 – Processo de compilação e execução de um programa em Java
Com esta estrutura, um programa compilado em Java pode ser executado diretamente em qualquer 
sistema que possua uma Máquina Virtual Java.
14
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
1.3 Características da linguagem Java
Mendes (2009) sumariza algumas das principais características do Java, características estas que 
justificam a grande penetração da tecnologia no mercado. Resumidamente temos:
1.3.1 Simplicidade
A linguagem Java é considerada simples porque permite que o programador crie sistemas para 
diferentes plataformas sem se preocupar com a arquitetura do hardware particular de cada uma delas.
O Java também não tenta “reinventar a roda”, criando uma nova sintaxe. Ele utiliza a sintaxe já bem 
estabelecida da linguagem C. Além disso, o Java não implementa alguns aspectos menos utilizados da 
orientação a objetos, como a herança múltipla, a sobrecarga de operadores, os ponteiros e as operações 
aritméticas sobre os ponteiros.
1.3.2 Orientação a objetos
O paradigma orientado a objetos de análise de sistemas (e de programação) traz uma nova maneira 
de se pensar o desenvolvimento de sistemas. Essa nova maneira de se criar programas utiliza os conceitos 
de herança, polimorfismo e encapsulamento. Tais conceitos incentivam boas práticas de programação, 
como o reuso de código e a padronização, o que torna sistemas orientados a objetos mais fáceis de 
serem desenvolvidos, reutilizados, e faz com que apresentem manutenção mais rápida e barata.
1.3.3 Multithread
O Java é uma linguagem que permite o multiprocessamento (multithreading). Isso significa 
que partes de um mesmo programa podem ser executadas simultaneamente. Essa técnica permite 
o total aproveitamento de sistemas dotados de múltiplos processadores. Deve-se ressaltar que o 
multiprocessamento traz benefícios também para programas executados em sistemas com apenas um 
núcleo de processamento.
1.3.4 Robustez
A linguagem Java e sua arquitetura de compilação para um código intermediário (bytecode) otimizado 
garantem que uma grande quantidade de erros comuns em outras linguagens não ocorra em Java, por 
exemplo, código não alcançável e vazamentos de memória. Esse segundo tipo de erro, muito comum 
em programas feitos em C++, ocorre quando o programador reserva um espaço de memória de trabalho 
para seu programa e esquece de liberá-lo após seu uso. Com o tempo, estes espaços não liberados vão 
se acumulando, tornando o sistema cada vez menos estável, até que ele não possa mais ser utilizado. 
Em Java, este tipo de erro é extremamente improvável, pois um mecanismo automatizado chamado de 
garbage collector (coletor de lixo) garante que espaços de memória reservados pelo programa e que 
não estão mais em uso sejam automaticamente liberados.
15
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
1.3.5 Segurança
A linguagem Java está preparada para ser utilizada em aplicações corporativas de grande porte, com 
arquitetura distribuída, situação em que a segurança é de extrema importância.
 Saiba mais
Vários livros que abordam a programação em Java apresentam a 
história do desenvolvimento da linguagem, assim como suas principais 
características, dos quais destacamos:
MENDES, D. R. Programação Java com ênfase em orientação a objetos. 
São Paulo: Novatec, 2009.
1.4 O que é necessário para se programar em Java
O Java é disponibilizado por seu atual desenvolvedor, a Oracle, em diversas distribuições. Algumas delas são:
• Java Standard Edition (Java SE).
• Java Enterprise Edition (Java EE).
• Java Micro Edition (Java ME).
• Java Card.
• Java TV.
A mais importante distribuição é a Java SE (Java Edição Padrão). É nessa distribuição que estão as 
bibliotecas básicas do Java e as principais ferramentas de desenvolvimento, como o compilador Java.
As demais distribuições são complementos ao Java SE que disponibilizam outras capacidades à 
linguagem. Por exemplo, o Java EE (Java Edição Corporativa) inclui bibliotecas e servidores capazes de 
permitir a criação e operação de sistemas corporativos distribuídos, o uso de persistência automatizada 
e a criação de páginas dinâmicas de internet entre outras funcionalidades. O Java ME (Java Edição Micro) 
oferece a base para a programação de dispositivos móveis, como celulares, PDAs, receptores de TV, TVs 
inteligentes etc. No caso de dispositivos como TVs, DVDs e Blu-Rays, há uma distribuição específica, o 
Java TV, que é uma especialização do Java ME para estas aplicações particulares.
Tendo o SDK Java SE (também conhecido como JDK – Java Development Kit) instalado, já é possível 
escrever programas usando algum editor de arquivos de texto e usando o compilador Java por meio de 
linha de comando.
16
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
 Saiba mais
Você pode obter uma visão geral a respeito do Java, assim como 
adquiri-lo, na página de seu desenvolvedor:
<http://www.oracle.com/technetwork/java/javase/overview/index.html>.
É perfeitamente possível criar sistemas complexos utilizando apenas editores de arquivos texto e o 
compilador por linha de comando. Entretanto, essa não é a nossa proposta.
Apesar do SDK Java SE ser suficiente para se programar em Java, a maioria dos estudantes e 
programadores admitem que o uso de um Ambiente Integrado de Desenvolvimento (IDE – Integrated 
Development Environment) torna o trabalho do desenvolvedor mais fácil. Um IDE é um sistema que 
reúne em um único pacote diversas ferramentas como:
• Editor de código-fonte.
• Gerenciador de arquivos.
• Corretor de sintaxe.
• Ferramenta de automação de compilação.
• Ferramenta de automação de depuração.
Assim, mesmo sendo opcional, vamos adotar uma IDE para desenvolver os exemplos deste livro-texto. 
Existem diversas IDEsdisponíveis, tanto de código aberto quanto de código proprietário. Várias delas podem 
ser utilizadas, mas, para não gastarmos tempo discutindo as diferenças entre elas, vamos utilizar o Eclipse.
 Observação
O Eclipse é um IDE de código aberto de grande popularidade. Outro 
IDE bastante conhecido é o NetBeans, mantido principalmente pela Oracle, 
mesmo desenvolvedor do Java. Há algumas diferenças entre ambos, mas 
não é possível dizer se um é melhor do que o outro. O que pode ser dito é 
que ambos são equivalentes, ou seja, tudo o que é feito com um pode ser 
feito com o outro.
Todos os códigos-fonte inseridos neste livro-texto podem ser executados 
tanto na IDE Eclipse como na NetBeans.
17
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
 Saiba mais
O Eclipse pode ser obtido da página de seu desenvolvedor:
<http://www.eclipse.org>.
O NetBeans pode ser obtido da página:
<https://netbeans.org>.
1.4.1 Instalando o JDK Java SE
Vá até o site de download do Java <http://www.oracle.com/technetwork/java/javase/downloads/index.
html>. Clique no link Java Platform (JDK). Marque sua aceitação do contrato de licença e escolha o JDK 
apropriado para a plataforma que você deseja utilizar para desenvolver os seus programas. O download do 
arquivo de instalação do JDK deve iniciar. Inicie o arquivo de instalação e siga as instruções na tela.
Figura 3 – Assistente de instalação do SDK Java SE
 Lembrete
Para se desenvolver em qualquer tecnologia Java, a única distribuição 
obrigatória é o Java SE. Este kit de desenvolvimento (SDK – Software 
Development Kit) é a única distribuição que contém o compilador Java. 
Qualquer outra distribuição é um acessório que deve ser instalado junto ao 
SDK Java SE.
18
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
1.4.2 Instalando o Eclipse
Vá até o site de download do Eclipse <http://www.eclipse.org/downloads/>. Selecione o download 
para Eclipse IDE for Java Developers na versão correta para seu sistema operacional. Escolha um 
site espelho para realizar o download (se estiver disponível). Quando o download estiver completo, 
descompacte o conteúdo do arquivo em alguma pasta fácil de lembrar. O Eclipse não possui arquivo de 
instalação. Você deve iniciá-lo diretamente do local onde foi extraído.
Figura 4 – O Eclipse deve ser iniciado a partir do local onde ele foi extraído
2 A LINGUAGEM JAVA
Vamos criar nosso primeiro programa, o famoso Olá mundo! Comece iniciando o Eclipse. Caso nunca 
o tenha iniciado antes, ele deve apresentar uma página de boas-vindas semelhante à seguinte figura:
Figura 5 – Seleção do workspace (pasta de trabalho)
19
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Esta janela pede para que você indique qual é a pasta que deseja utilizar para guardar os seus 
projetos Java. Utilize o local padrão ou indique o local que deseja utilizar. Se marcar a check box, o 
Eclipse não irá mais fazer esta pergunta ao iniciá-lo.
A seguir, o Eclipse inicia. Novamente, caso seja a primeira vez que o esteja executando, ele deve 
apresentar uma tela de boas-vindas como na figura a seguir.
Figura 6 – Página de boas-vindas do Eclipse
Clique no ícone Workbench para exibir a área de trabalho.
Figura 7 – Área de trabalho do Eclipse
20
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Vamos criar um projeto. Clique no menu File → New → Java Project. O seguinte assistente surge:
Figura 8 – Assistente de criação de projeto
Na caixa de texto Project name digite o nome do seu projeto, “Ola mundo”. Certifique-se de que na 
área JRE você esteja usando alguma máquina virtual Java SE. Se por algum motivo a JRE padrão em seu 
computador não for um Java SE, selecione o primeiro botão de rádio e escolha uma versão J2SE ou Java 
SE (qualquer versão dessas deve ser suficiente).
 Observação
Em qualquer linguagem de programação, sempre é recomendado não 
utilizar caracteres acentuados ou especiais. Ainda é possível (mesmo que 
incomum) que haja problemas tanto na compilação quanto na execução de 
códigos que utilizem tais símbolos. A única exceção é quando escrevemos 
algum texto em um String, por exemplo. Se desejamos escrever a mensagem 
“Olá mundo!” na tela, podemos usar acentos e caracteres especiais.
21
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 9 – Seleção de uma máquina virtual específica
As demais opções não precisam ser modificadas. Você já pode clicar no botão Finish. Nesse momento, 
o Eclipse cria uma pasta chamada “Ola mundo” no local que você indicou como pasta de trabalho. 
Dentro dela serão armazenados seus códigos-fonte, classes compiladas, arquivos de configuração, entre 
outros. Note que no Package Explorer (Explorador de Pacotes) agora há o seu projeto “Ola mundo”. 
Clique no sinal à esquerda do projeto para expandir sua estrutura interna.
22
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 10 – Projeto com sua estrutura expandida
Agora vamos criar o arquivo onde será escrito o código-fonte do programa. Note que dentro do 
projeto “Ola mundo” há uma pasta chamada src. Ela é uma abreviação de source (fonte) e é nela que 
iremos colocar todos os códigos-fonte de um projeto. Com o botão direito do mouse, clique na pasta src 
e selecione new → package. Package (pacote) é um conceito da orientação a objetos que permite que 
o desenvolvedor agrupe suas classes em pacotes.
Figura 11 – Criação do pacote
23
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Na caixa para definir o nome do pacote, digite “primeiroPrograma”. Note que, em Java, nomes devem 
ser compostos de apenas uma palavra. Clique em Finish.
Em linguagens que derivam do C, como o C++, C# e Java, os nomes de classes, variáveis, métodos, 
atributos e demais elementos devem ter como nome um termo composto de uma única palavra.
Recomenda-se que os nomes sejam sempre mnemônicos, ou seja, o próprio nome deve indicar 
qual é a natureza ou finalidade do elemento que ele batiza. Por exemplo, uma variável não mnemônica 
chamada “xpto12” não dá nenhuma indicação ao programador de sua finalidade. Já, se ela for chamada 
de “contadorDeIterações”, sua finalidade se torna evidente.
Quando se utiliza mais de uma palavra como nome, recomenda-se que a primeira letra de cada palavra, 
a partir da segunda palavra, seja escrita em maiúscula. Esta notação é conhecida como camel case.
Dentro do pacote “primeiroPrograma” vamos criar a classe “OlaMundo”. Clique com o botão direito 
no pacote e selecione new → Class.
Figura 12 – Criação da classe “OlaMundo”
24
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Na caixa para definir o nome da classe, digite o nome “OlaMundo”. Clique em Finish. Neste momento, 
o Eclipse cria o arquivo OlaMundo.java e o exibe no editor. Já se pode notar um pouco de código escrito 
no arquivo, a declaração do pacote e da classe. A seguir, basta escrever o código do método principal 
main() como demonstrado a seguir:
Figura 13 – Código do programa “OlaMundo”
A seguir, para compilar e executar seu programa, clique no botão indicado pela primeira seta (ou 
selecione o menu run → run). O Eclipse irá executar o compilador Java sobre seu código e executar o 
programa compilado. A saída do console é exibida na aba destacada pela segunda seta.
 Observação
Caso a janela para o seu código esteja pequena demais, você pode dar um 
duplo clique na aba da janela, o que faz com que ela sejamaximizada. Para 
voltar à visualização anterior, basta dar um duplo clique na aba novamente.
As abas também podem ser fechadas definitivamente, clicando no 
símbolo “X”. Caso você tenha fechado acidentalmente uma aba e não saiba 
como fazer para que ela seja reapresentada, você pode pedir ao Eclipse para 
restaurar a configuração padrão das janelas. Para tanto, chame o menu 
Window → Perspective → Reset Perspective... e responda Yes quando lhe for 
perguntado se quer realmente as janelas retornem à configuração padrão.
25
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
2.1 Entrada e saída de dados usando JOptionPane
No exemplo anterior, utilizamos um método para criar uma saída de texto no console. Também é 
possível receber dados do usuário pelo console. No entanto, deixaremos de lado esta forma de interação 
homem-máquina e priorizaremos, neste material, o uso de interfaces gráficas.
 Saiba mais
A Interação Homem-Máquina (IHC) é uma disciplina extensa que trata de 
diversos aspectos da interação entre pessoas e equipamentos tecnológicos. 
Para aprofundar seus conhecimentos a respeito desse assunto, leia:
ROGERS, Y.; SHARP, H.; PREECE, J. Design de interação: além da interação 
humano-computador. 3. ed. Porto Alegre: Bookman, 2013.
BENYON, D. Interação humano-computador. 2. ed. São Paulo: Pearson 
Prentice Hall, 2011.
O Java nos oferece uma ferramenta pronta para criar caixas de diálogo que são um tipo especial 
de janela em ambiente gráfico. Elas servem para apresentar informações e também para receber dados 
do usuário. Essas funcionalidades estão disponíveis na classe JOptionPane que está definida no pacote 
javax.swing, como ilustrado na figura a seguir:
Figura 14 – A classe JOptionPane dentro do pacote javax.swing
Na figura anterior, a classe JOptionPane é representada em um diagrama de classes, tendo seus 
atributos omitidos e apenas dois de seus métodos representados. A classe está definida no pacote swing, 
que por sua vez está definido no pacote javax.
26
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
 Saiba mais
O uso do console como mecanismo de interação é abordado 
extensivamente pela maioria dos livros sobre Java. Alguns deles são:
HORSTMANN, C. S.; CORNELL, G. Core Java. 8. ed. São Paulo: Pearson 
Prentice Hall, 2010.
JORGE, M. Java: passo a passo Lite. São Paulo: Pearson Education do 
Brasil, 2004.
 Observação
A UML (Unified Modeling Language – Linguagem Unificada de 
Modelagem) define diversos diagramas úteis para a documentação, 
modelagem, análise e projeto de sistemas orientados a objetos. O diagrama 
de classes, um dos mais importantes da UML, representa as classes de um 
sistema em um retângulo dividido em três partes. Na primeira, é anotado 
o nome da classe, na segunda, seus atributos e na terceira seus métodos.
O método showMessageDialog() permite a exibição de uma caixa de diálogo onde uma informação 
é exibida para o usuário. A sobrecarga mais simples desse método é:
Figura 15 – Declaração do método showMessageDialog()
Este método requer dois parâmetros: o primeiro, chamado pai, recebe um objeto que representa o 
elemento gráfico pai da caixa de mensagem. Esse elemento gráfico costuma ser uma janela do aplicativo. 
Entretanto, ainda não sabemos como criar qualquer elemento gráfico, por isso, vamos utilizar a palavra 
reservada null para indicar que a caixa de diálogo não irá possuir qualquer componente gráfico como 
pai. Isso também fará com que a caixa de diálogo seja apresentada centralizada na tela. A palavra 
reservada null indica um objeto que não foi instanciado, um objeto nulo. O segundo parâmetro é a 
mensagem que será apresentada dentro da caixa de diálogo.
Assim, em um programa, poderíamos utilizar o método showMessageDialog() da seguinte forma e 
obter o resultado exibido a seguir:
27
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 16 – Exemplo de uso do método showMessageDialog()
O método showInputDialog() permite criar uma caixa de diálogo que apresenta uma pergunta e 
exibe um espaço para que o usuário digite sua resposta. Quando o método é encerrado, ele retorna um 
String contendo o texto digitado pelo usuário. A declaração de sua sobrecarga mais simples é:
Figura 17 – Declaração do método showInputDialog()
Note que o método showInputDialog() não requer a indicação de um componente pai. Entretanto, 
se você desejar, pode indicar um, mesmo que seja null. O trecho de código a seguir mostra como podemos 
usar esse método para receber um texto do usuário. O texto digitado pelo usuário é armazenado na 
variável resposta:
Figura 18 – Exemplo de uso do método showInputDialog()
No exemplo a seguir, mostraremos um programa inteiro que utiliza a classe JOptionPane para 
realizar entrada e saída de dados usando as caixas de diálogo. Note que, para se utilizar esta classe, é 
necessário importar a classe para que o programa possa utilizá-la. Isto é feito com a palavra reservada 
import, que deve ser inserida logo abaixo da palavra package.
28
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 19 – Um programa que realiza entrada e saída de dados por meio de caixas de diálogo
Assumindo-se que, ao executar o programa demonstrado anteriormente, o usuário digite o nome 
Maria, ele irá obter as seguintes mensagens:
Figura 20 – Saída gerada pelo programa OlaMundoGrafico
 Observação
O programa apresentado na figura 19 deve ser criado em um pacote 
chamado unidadeUm. É recomendado também que ele seja criado em um 
novo projeto. A razão para isso é que cada projeto deve ter apenas um 
método main(). Quando um projeto apresenta mais de um método main(), 
pode ser necessário indicar ao Eclipse qual é o método main() ativo no 
projeto. A maneira de se fazer isso varia dependendo da versão do Eclipse.
29
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
2.2 Recomendações de estilo
Podemos dar nomes a diversos elementos de nossos programas, como variáveis, atributos, métodos, 
parâmetros etc.
 Lembrete
Em Java e em linguagens orientadas a objeto, em geral, recomenda-se 
o uso de nomes mnemônicos, ou seja, nomes que já indicam qual é a 
finalidade do elemento que ele batiza. Por exemplo, pode ser difícil saber 
qual é a finalidade de uma variável chamada xpto12. Por outro lado, se 
a mesma variável receber o nome contadorDeIteracoes, sua finalidade 
torna-se bastante clara.
Para que se criem nomes mnemônicos, muitas vezes, desejamos usar mais de uma palavra. Mas um 
nome deve ser uma única palavra, sem espaços. A recomendação, neste caso, é escrever todas as palavras 
juntas, sem espaço. Para se marcar a separação entre as palavras, a partir da segunda palavra, a primeira 
letra deve ser grafada com letra maiúscula. Esta notação é conhecida como camel case. Exemplo:
• contadorDeIteracoes.
• respostaDoUsuario.
• mediaFinal.
O Java recomenda que a primeira letra do nome seja maiúscula caso o nome seja de uma classe ou 
de uma interface. Exemplos:
• OlaMundo.
• ProgramaPrincipal.
• String.
 Observação
Não confunda interface com interface gráfica. A interface gráfica é 
um recurso de entrada e saída de dados utilizando elementos gráficos e 
dispositivos de interação humana, como mouse e teclado. Já a interface 
é um conceito de orientação a objetos que será abordado mais adiante. 
Uma interface pode ser entendida, resumidamente, como uma classe 
sem atributos e que apenas declara as assinaturas dos métodos, sem 
implementar qualquer um deles.
30
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
A exceção ao camel caseestá na declaração de nomes de constantes. Constantes são atributos 
cujo valor não pode ser alterado. O Java recomenda que constantes sejam escritas com todas as letras 
maiúsculas, separando as palavras pelo símbolo do sublinhado. Exemplos:
• NOTA_MINIMA.
• TAMANHO_PADRAO.
• PI.
• CONSTANTE_GRAVITACIONAL.
2.3 Tipos primitivos
Tipos são a natureza dos dados que podem ser armazenados em uma variável, um atributo, que 
podem ser transferidos por um parâmetro ou retorno de método. Tipo primitivo é o tipo de dado que 
está definido na própria linguagem Java. Por isso, esses tipos têm um excelente desempenho tanto em 
economia de memória quanto em desempenho de processamento. Estes tipos são:
Quadro 1 – Tipos primitivos em Java
Tipo Tamanho em bits Natureza Valores
boolean Depende da JVM de cada plataforma Booleanos true ou false
char 16 Caractere alfanumérico ‘\u0000’ a ‘\uffff’ (0 a 65535)
byte 8
Número inteiro
-128 a 127
short 16 -32.768 a 32.767
int 32 -2.147.483.648 a 2.147.483.647
long 64 -9223372036854775808 a 9223372036854775807
float 32
Número em ponto 
flutuante
Intervalo negativo:
-3,4028234663852886E+38 a -1,40129846432481707e-45
Intervalo positivo:
1,40129846432481707e-45 a 3,4028234663852886E+38
double 64
Intervalo negativo:
-1,7976931348623157E+308 a -4,94065645841246544e-324
Intervalo positivo:
4,94065645841246544e-324 a 1,7976931348623157E+308
Adaptado de: Deitel (2005).
Na figura a seguir, criamos algumas variáveis e atribuímos a elas valores definidos por literais, ou 
seja, valores definidos no próprio código-fonte:
31
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 21 – Exemplos de declaração de variáveis de tipos primitivos
Quando se define um literal numérico inteiro, ele é tratado como sendo um inteiro. Já quando se 
define um literal numérico com um ponto decimal, ele é tratado como um double. Para se definir um 
literal caractere, ele deve ser circundado por aspas simples. Um literal booleano só pode assumir os 
valores representados pelas palavras reservadas true ou false.
Quando se deseja definir um literal inteiro maior do que a capacidade de representação do int, 
deve-se indicar que o literal é um long, adicionando-se o sufixo L ou l. Analogamente, ao se representar 
um literal como um float, deve-se adicionar o sufixo F ou f:
Figura 22 – Literais de tipo long e float
2.4 Conversão de tipos
Quando se trabalha com mais de um tipo primitivo, podemos atribuir o valor armazenado em uma 
variável de tipo de menor capacidade em uma variável de maior capacidade. De certa forma, podemos 
entender que um tipo menor “cabe” dentro de um tipo maior.
byte short int long float double
Figura 23 – Relação de capacidade entre tipos primitivos numéricos
Desta forma, o seguinte método, se executado, irá gerar a mensagem representada na figura 25.
32
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 24 – Atribuições de variáveis a tipos de capacidade crescentes
Na linha 10 é declarado o método atribuicoesSemCast(), o qual realiza o exemplo. Na linha 11 é 
declarada a variável b do tipo byte com o valor 8. Da linha 12 até a linha 16, o valor da variável b é 
transferido sucessivamente para variáveis de maior capacidade. Na linha 18 é declarada uma variável do 
tipo String chamada valores. A esta variável é atribuído o retorno do método format() da classe String. 
O método format() recebe pelo menos dois parâmetros.
O primeiro é um String de formatação. Este String é composto de caracteres que são simplesmente 
retornados, como “b = “ e parâmetros de formatação que são compostos de um sinal % e uma letra. 
Esta letra indica se o parâmetro será substituído por um número decimal (d) ou um número de ponto 
flutuante (f). A seguir, o método format() recebe os valores que serão inseridos nos parâmetros do String 
de formatação. As sequências “\n” indicam que será inserido no String uma quebra de linha. Por fim, 
para que o código não fique demasiadamente largo, pode-se quebrar uma linha no meio do String. 
Para tanto, ele deve ser encerrado na primeira linha fechando as aspas e, na linha seguinte, deve ser 
concatenado com o segundo String usando o operador +.
 Observação
A saída formatada utilizada no exemplo anterior é uma ferramenta 
poderosa que foi criada originalmente na linguagem C e está disponível no 
Java nos métodos String.format() e System.out.printf().
33
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 25 – Saída do método atribuicoesSemCast()
Já para se fazer as atribuições na direção oposta, é necessário realizar um cast, ou conversão de 
tipo. Um cast é representado pelo tipo de destino entre parênteses antes do valor a ser convertido. O 
programa apresentado na figura 24 foi alterado para realizar atribuições de variáveis de maior capacidade 
a variáveis de menor capacidade.
Figura 26 – Atribuições de variáveis de maior capacidade a variáveis de menor capacidade
Na figura anterior está representado o mesmo programa Atribuicoes. Repare que na linha 11 há um 
sinal + e a próxima linha é a 24. Este sinal indica que a implementação do método atribuicoesSemCast() 
foi ocultada. Este recurso está disponível no Eclipse (e em praticamente qualquer IDE moderna). Para 
se exibir novamente o código oculto, basta clicar no sinal +. Para se ocultar um trecho de código, 
clica-se no sinal –. A outra modificação está no método main(), que agora chama também o método 
atribuicoesComCast().
34
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Na linha 26 é declarada uma variável double com um valor em ponto flutuante. Nas linhas 27 a 31, 
este valor é convertido sucessivamente em tipos cada vez de menor capacidade. O resultado pode ser 
visto na figura a seguir.
Figura 27 - Saída do método atribuicoesComCast()
Note como os valores, ao serem convertidos para tipos de menor capacidade, foram perdendo 
precisão, como se estivessem sendo corrompidos. Isto ocorre porque o cast não faz arredondamento, 
ele faz truncamento em binário. Isso significa que, quando um número é convertido para um tipo de 
capacidade menor em bits, apenas os bits menos significativos são mantidos. Os bits excedentes do 
número são desprezados, o que causa a perda de informação.
 Observação
A partir de agora, os exemplos apresentados neste livro-texto não 
serão mais programas inteiros. Para poupar espaço, os exemplos serão 
apresentados como métodos que podem simplesmente ser inseridos em 
um programa qualquer que você já tenha criado. Basta chamar o método a 
partir do seu método main().
2.5 Classes wrapper (invólucro)
Cada tipo primitivo possui uma classe wrapper associada. Uma classe wrapper pode ser utilizada para 
instanciar um objeto que armazena um valor do tipo primitivo associado a ela. Além disso, estas classes 
apresentam diversos métodos para fazer a conversão de e para diversos tipos. As classes wrapper são:
Quadro 2 – Tipos primitivos e suas classes wrapper associadas
Tipo primitivo Classe wrapper
boolean Boolean
char Character
byte Byte
35
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
short Short
int Integer
long Long
float Float
double Double
Essas classes podem ser utilizadas para se instanciar objetos com um valor do tipo primitivo associado 
a elas:
Figura 28 – Instanciação de objetos de classes wrapper
A partir do Java 5 (Java versão 1.5), o valor de uma variável de tipo primitivo pode ser atribuído 
diretamente a um objeto de sua classe wrapper associada e vice-versa. Este recurso é chamado de 
autoboxing:
Figura 29 – Exemplo de autoboxing
As classes wrapper oferecem métodosparse que são úteis para se converter um String em um valor 
de tipo primitivo associado. Cada classe wrapper possui um método parse:
Figura 30 – Exemplos de conversão de String para tipos primitivos
As classes wrapper numéricas (todas exceto boolean e character) possuem métodos value para 
converter o valor armazenado no objeto para outros tipos primitivos numéricos. Dessa vez, a conversão 
é feita com arredondamento, não mais com truncamento, como o que ocorre quando se utiliza um 
cast. O exemplo a seguir utiliza os métodos value para converter de um objeto Integer para diversos 
outros tipos, mas o mesmo pode ser feito com qualquer outro wrapper numérico.
36
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 31 – Exemplo de uso de um objeto wrapper para se converter um inteiro para diversos outros tipos
Repare que na primeira linha foi usado um construtor da classe Integer que recebe um String e não 
um int. Todas as classes wrapper possuem um construtor que recebe um String. Este construtor faz a 
conversão apropriada (usando um método parse adequado) antes de terminar a instanciação do objeto.
 Saiba mais
Como em qualquer recurso do Java, é possível aprender bastante 
estudando a documentação da linguagem.
Para saber do que mais são capazes as classes wrapper, consulte:
<https://docs.oracle.com/javase/tutorial/java/data/index.html>.
Veja o programa a seguir que utiliza uma classe wrapper para receber dois números do usuário e, a 
seguir, realizar um cálculo matemático:
Figura 32 – Um programa que recebe números do usuário e realiza um cálculo matemático com eles
37
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Observe a seguir as saídas do programa da figura anterior:
Figura 33
2.6 Introdução a classes e objetos
Uma das diferenças mais óbvias entre uma linguagem estruturada e uma linguagem orientada a 
objetos são justamente as classes e objetos. Pode-se entender, de maneira bastante simplificada, que 
uma classe é um trecho de código de computador que modela algum conceito útil para o sistema que se 
está desenvolvendo. Este conceito pode ser algo tangível, como um cliente, um funcionário, um produto, 
uma venda, mas também pode ser um conceito mais abstrato, como um conjunto de ferramentas de 
cálculo ou um conjunto de funcionalidades de acesso a banco de dados.
Quando se faz a análise de um sistema, deve-se modelar classes que encapsulem, isolem, coloquem 
uma “cápsula” em torno deste conceito. Para tanto, é preciso ter em mente as seguintes regras para um 
bom projeto de classe:
• Uma classe deve modelar apenas um conceito.
• Uma classe não deve modelar qualquer aspecto de outro conceito.
• Não deve haver em nenhuma outra parte do sistema qualquer aspecto do conceito modelado pela classe.
38
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
 Saiba mais
As tarefas relacionadas à criação da estrutura de classes de um sistema 
podem ser estudadas nos seguintes livros:
MEDEIROS, E. S. de. Desenvolvendo software com UML 2.0: definitivo. 
São Paulo: Pearson Makron Books, 2004.
PAGE-JONES, M. Fundamentos do desenho orientado a objeto com 
UML. São Paulo: Makron Books, 2001.
Uma classe modela um determinado conceito reunindo, em um único elemento, os dados 
que definem esse conceito e os comportamentos que esse conceito pode apresentar. Uma boa 
maneira de se representar classes é usando o Diagrama de Classes da UML (Linguagem Unificada de 
Modelagem em inglês). Neste diagrama, uma classe é representada com um retângulo dividido em 
três partes. Na primeira parte é registrado o nome da classe. Na segunda, os atributos da classe, 
que armazenam os dados da classe. Na terceira parte, os métodos da classe, que implementam 
os comportamentos da classe.
Figura 34 – Diagrama de classes da classe Pessoa
A figura registra uma classe em UML. Esta classe tem o nome Pessoa e possui dois atributos: nome 
e telefone. O primeiro atributo armazena dados do tipo String, enquanto que o segundo armazena 
dados do tipo int. A classe também apresenta o método apresente(), que será usado para exibir as 
informações armazenadas nos atributos. Este método não recebe parâmetros, pois não há nenhum 
parâmetro representado entre os parênteses. Ele também não devolve nenhum valor, pois seu tipo de 
retorno é void. Esta classe pode ser codificada em Java da seguinte maneira:
39
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 35 – A classe Pessoa codificada em Java
Nas linhas 7 e 8 estão declarados os atributos nome e telefone. Eles são declarados como se 
fossem variáveis, mas são atributos por não estarem dentro de qualquer método. Suas declarações são 
precedidas pela palavra reservada public, representada pelo sinal + no diagrama UML da figura 34. Esta 
palavra reservada indica que esses atributos podem ser acessados por qualquer parte do sistema que 
tenha acesso à classe Pessoa. Na linha 10 é declarado o método apresente(), que imprime em uma caixa 
de diálogo os dados armazenados nos atributos.
 Observação
Os modificadores de acesso serão abordados mais adiante neste 
livro-texto.
Uma classe é uma definição de um conceito, como o simples cadastro de uma pessoa apresentado 
no exemplo mencionado anteriormente. No entanto, um programa não pode utilizar esta definição 
diretamente, ele precisa instanciar esta classe em um objeto. Imagine que uma classe seja uma receita 
de bolo. Com esta receita, pode-se preparar vários bolos e todos acabarão sendo mais ou menos parecidos. 
Da mesma forma, uma classe é usada para se instanciar vários objetos. É o objeto que realmente possui 
os dados e os comportamentos modelados. O programa a seguir instancia um objeto da classe Pessoa, 
atribui valores aos seus atributos e chama o método apresente(). O resultado de sua execução também 
é apresentado:
40
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 36 – Programa TestaPessoa e o resultado de sua execução
Na linha 7 é criada uma variável chamada p, cujo tipo é Pessoa. Nesta variável é armazenado um 
objeto da classe Pessoa. O objeto é instanciado com o uso da palavra reservada new seguida do “nome 
da classe”. Na verdade, o termo Pessoa() que segue a palavra new não é o nome da classe, mas um 
método construtor. Métodos construtores serão apresentados logo a seguir.
Nas linhas 9 e 10 os atributos nome e telefone de p têm seus valores atribuídos. Note que o objeto 
p têm seus próprios atributos nome e telefone. Caso um outro objeto fosse instanciado, ele poderia ter 
valores diferentes em seus atributos nome e telefone.
Na linha 12 é chamado o método apresente() de p, que faz ser exibida a caixa de mensagem com as 
informações armazenadas no objeto p.
2.7 Instruções de controle
Note que, da maneira que a classe Pessoa no item anterior foi escrita, qualquer valor pode ser 
atribuído aos atributos da classe, mesmo que eles sejam inválidos. Há uma maneira de se evitar que isso 
aconteça: nós podemos encapsular os atributos, ou seja, torna-los privados, e oferecer acesso a eles por 
métodos acessores (getters, em inglês), que fazem a validação dos dados de forma que apenas dados 
válidos sejam armazenados. A seguir, modificamos a classe Pessoa para que só possam ser armazenados 
telefones com pelo menos oito dígitos. Vamos também encapsular o atributo nome, mesmo que 
nenhuma validação seja feita:
41
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 37 – A classe Pessoa com atributos encapsulados
Nas linhas 7 e 8, os atributos nome e telefone foram alterados para privados,o que significa que 
agora eles só podem ser acessados de dentro da própria classe Pessoa. Para permitir que eles tenham seus 
valores lidos, foram criados os métodos getters, nas linhas 10 e 18. Estes métodos, quando executados, 
retornam o valor armazenado no atributo correspondente.
Na linha 14 é criado o método setNome(), que recebe como parâmetro um nome e o atribui ao 
atributo nome. Como tanto o parâmetro quanto o atributo possuem o mesmo nome, o programa 
não teria como saber qual é o atributo e qual é o parâmetro. Para resolver este problema, utiliza-se a 
referência this na linha 15. Desta forma, pode-se ler a linha 15 como sendo “o nome deste objeto recebe 
o valor de nome”. Assim, this.nome é o atributo do objeto enquanto que nome é o parâmetro.
Já no método setTelefone() na linha 22, só é feita a atribuição se o valor do parâmetro telefone tiver 
ao menos oito dígitos. Esta verificação é feita com o desvio condicional if. Sua sintaxe completa é:
42
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 38 – Sintaxe do desvio condicional if
A condição pode ser qualquer expressão que tenha como valor final um booleano. Isso significa que 
a condição pode ser uma simples variável booleana ou uma expressão booleana, que é o resultado de 
alguma operação lógica. As operações lógicas são:
Quadro 3 – Operadores lógicos
== Igual a
!= Diferente de
< Menor que
> Maior que
<= Menor ou igual a
>= Maior ou igual a
! Não (inverte o resultado de uma expressão booleana)
Quando se deseja realizar vários testes, pode-se encadear outro if dentro do conjunto de instruções 
da cláusula else. Mas também pode-se utilizar a estrutura switch-case, que tem a sintaxe a seguir:
Figura 39 – Sintaxe da estrutura switch-case
43
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
A estrutura switch-case usa como cláusula de teste uma variável que pode ser dos tipos primitivos 
char, int, short ou byte. Cada cláusula case define um conjunto de instruções que será executado caso 
seu valor corresponda ao valor da variável de teste. A cláusula default, que é opcional, é executada se 
nenhuma outra cláusula case foi executada.
 Saiba mais
A sintaxe completa das estruturas if, if-else e switch-case pode ser 
encontrada na bibliografia e também nos documentos de apoio do Java, 
disponíveis na internet:
ORACLE. The if-then and if-then-else statements. The Java Tutorials. 
2015b. Disponível em: <https://docs.oracle.com/javase/tutorial/java/
nutsandbolts/if.html>. Acesso em: 15 out. 2015.
ORACLE. The switch statement. The Java Tutorials. 2015d. Disponível 
em: <https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.
html>. Acesso em: 15 out. 2015.
A classe Pessoa ainda não teve um método construtor definido explicitamente. Método construtor é 
um método que é executado sempre que um objeto é instanciado. Esse método deve possuir exatamente 
o mesmo nome da classe e não deve apresentar nenhum tipo de retorno, nem mesmo void. Quando não 
criamos um construtor em uma classe, o próprio compilador cria um para nós, é o construtor padrão. 
O método construtor padrão é um construtor sem parâmetros e que não executa nenhuma ação em 
sua implementação. Quando escrevemos “Pessoa p = new Pessoa();”, o termo Pessoa(), na verdade, é o 
construtor padrão da classe. Nós podemos criar os nossos próprios construtores. Uma vez que a classe 
tenha um construtor qualquer, o compilador não irá criar o construtor padrão. Caso queiramos um 
construtor sem parâmetros, devemos declará-lo explicitamente, como do exemplo a seguir:
44
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 40 – A classe Pessoa com métodos construtores
Na linha 28 é declarado o método construtor sem parâmetros. Note que o método deve ter 
exatamente o mesmo nome da classe e não deve apresentar nenhum tipo de retorno. Na linha 32 é 
criado um segundo método construtor, desta vez ele recebe como parâmetros o nome e o telefone da 
pessoa. Em sua implementação, ele faz a atribuição dos valores utilizando a validação de dados por meio 
dos métodos acessores que já foram criados na classe.
A classe TestaPessoa pode ser modificada da seguinte maneira para refletir as mudanças feitas na 
classe Pessoa:
45
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
Figura 41 – Programa TestePessoa corrigido
Na linha 7, é instanciado o objeto p1 utilizando o construtor sem parâmetros. Nas linhas 8 e 9, 
os valores dos atributos agora precisam ser definidos utilizando os métodos acessores. Já não é mais 
possível acessar os atributos diretamente, pois eles foram definidos como privados.
Na linha 12, um outro objeto, p2, é instanciado, desta vez utilizando o construtor que recebe como 
parâmetros os valores do nome e do telefone. Durante a instanciação, os valores são armazenados nos 
atributos e o objeto já está pronto para exibir suas informações.
Agora, digamos que queiramos que o programa leia e exiba os dados de dez pessoas. Nós poderíamos 
simplesmente repetir a lógica do programa anterior dez vezes, mas esta não é a melhor escolha.
 Observação
O computador existe para realizar o trabalho árduo para nós. Sempre 
que nos pegamos pensando algo como “vou ter que fazer a mesma coisa de 
46
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
novo”, muito provavelmente há algo errado em nosso algoritmo. Sempre há 
alguma maneira de fazer como que o programa realize a tarefa repetitiva 
para nós.
A seguir, vamos modificar o programa TestePessoa para repetir dez vezes a rotina de receber e exibir 
os dados de dez pessoas:
Figura 42 – O programa que recebe e exibe os dados de dez pessoas
O método recebePessoa() entre as linhas 7 e 19 recebe do usuário os dados de uma pessoa, instancia 
um objeto da classe Pessoa com estes dados e o retorna.
O método main() entre as linhas 21 e 30 utiliza o método recebePessoa() para receber os dados de 
dez pessoas. Na linha 25 é iniciado um laço de repetição for para repetir dez vezes a rotina definida nas 
linhas 26 e 27. O laço for tem três parâmetros: o primeiro é uma definição de uma variável contadora; 
o segundo é a condição que, se verdadeira, permitirá que o laço seja repetido mais uma vez; o terceiro 
é a lógica de incremento (ou decremento) da variável contadora.
47
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
O Java ainda define os laços while e do-while, que possuem a seguinte sintaxe:
Figura 43 – Sintaxe dos laços while e do-while
O laço while inicia testando a condição de parada. Se ela for verdadeira, ele irá executar o conjunto 
de instruções de repetição. Em algum momento durante a execução, a condição de parada deve ser 
alterada para falsa, de modo a fazer com que o laço encerre.
O laço do-while inicia executando uma vez o conjunto de instruções de repetição. A seguir ele 
verifica a condição de parada. Se ela estiver verdadeira, o loop reinicia. Novamente, em algum momento 
a condição de parada deve ser alterada para falsa para que o laço termine.
 Saiba mais
Consulte a documentação do Java para conhecer mais detalhes dos 
laços for, while e do-while:
ORACLE. The for statement. The Java Tutorials. 2015c. Disponível em 
<https://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html>. 
Acesso em: 15 out. 2015.
ORACLE. The while and do-while statements. The Java Tutorials. 2015e. 
Disponível em: <https://docs.oracle.com/javase/tutorial/java/nutsandbolts/
while.html>. Acesso em: 15 out. 2015.
2.8 Arrays
O programa do exemplo anterior conseguia ler e exibir os dados de dez pessoas,mas não era capaz 
de armazená-los. Para tanto, deveríamos ter criado dez variáveis. Entretanto, criando dez variáveis, seria 
muito difícil continuar utilizando o laço for para automatizar o processo. Para resolver este problema, 
podemos utilizar um array (vetor). Um array é um conjunto de variáveis de mesmo tipo. Vejamos como 
o programa pode ser modificado para utilizar um array de Pessoa:
48
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Figura 44 – Programa que recebe e armazena Pessoa em um array
Na linha 22 é declarada a variável p, que desta vez é um array de objetos da classe Pessoa. Isso é 
indicado pelo símbolo []. Um array deve ser instanciado como se fosse um objeto, o que é feito na linha 
23 com o operador new, seguido do tipo de dado de cada elemento do vetor (Pessoa) e da quantidade 
de elementos do vetor ([10]).
Na linha 25 é declarada a variável contadora que será usada nos dois laços for a seguir.
Na linha 27 é iniciado o laço de leitura das dez pessoas. Na linha 28, cada pessoa é lida pelo método 
recebePessoa() e é armazenada no elemento de ordem i do vetor p (p[i]). Note que os índices de vetores 
em Java iniciam com o valor 0.
Na linha 31 é iniciado o laço de apresentação das dez pessoas. Cada elemento do vetor p é um objeto 
da classe Pessoa e, por isso, possui o método apresente(). Assim, na linha 32, cada elemento do vetor tem 
o seu método apresente() chamado.
49
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
 Saiba mais
Consulte a documentação do Java sobre a declaração e uso de arrays:
ORACLE. Arrays. The Java Tutorials. 2015a. Disponível em: <https://docs.oracle.
com/javase/tutorial/java/nutsandbolts/arrays.html>. Acesso em: 15 out. 2015.
2.9 Coleções
O uso de arrays foi útil para armazenar uma quantidade definida de objetos da classe Pessoa. 
Entretanto, para utilizar arrays, deve-se saber de antemão quantos elementos serão necessários para 
se criar o vetor. Quando não se sabe quantos elementos serão necessários, podemos utilizar estruturas 
dinâmicas de armazenamento de dados. O Java nos oferece um conjunto de estruturas deste tipo, as 
coleções. Uma coleção é um conjunto de variáveis semelhante a um array, mas que pode ter o seu 
tamanho modificado conforme a necessidade.
Vamos modificar o programa TestaPessoa para receber uma quantidade indefinida de pessoas. Este 
programa irá armazenar objetos da classe Pessoa enquanto o usuário desejar:
Figura 45 – Um programa que recebe uma quantidade indefinida de pessoas
50
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
Na linha 24 é declarada a estrutura dinâmica de armazenamento de dados pessoas, que é um ArrayList 
que irá armazenar elementos da classe Pessoa. Na mesma linha, a estrutura pessoas é instanciada. Por 
enquanto, a estrutura já existe, mas ainda não possui nenhum elemento dentro dela.
Nas linhas 27 a 32 é feita a leitura de uma quantidade não conhecida de pessoas. Na linha 27 
é declarada a variável que irá conter a resposta do usuário quando lhe for perguntado se ele deseja 
continuar cadastrando pessoas. Sua resposta será na forma de um número inteiro, como será visto 
adiante. Na linha 28 é iniciado o laço do-while, o que significa que o laço será executado ao menos uma 
vez. Na linha 29, o método recebePessoa() é executado para ler os dados de uma pessoa. Ele devolve 
um objeto da classe Pessoa, que é, então, passado como parâmetro para o método add() do ArrayList 
pessoas. Esse método adiciona seu parâmetro como um novo elemento do vetor dinâmico pessoas. Na 
linha 30 é usado o método showConfirmDialog da classe JOptionPane. Esse método exibe uma caixa de 
diálogo onde o usuário pode dar sua resposta por meio de botões. A versão do método utilizada pede 
quatro parâmetros: o primeiro é a janela pai (continuamos usando nenhuma); o segundo é a pergunta 
que será exibida para o usuário; o terceiro é o título da caixa de diálogo; o quarto define quais são os 
botões exibidos. As opções são YES_NO_CANCEL_OPTION e YES_NO_OPTION. Na linha 32, a resposta do 
usuário é verificada. Para que não tenhamos que decorar qual é o valor de cada resposta, utilizamos uma 
das constantes disponíveis para a resposta: YES-OPTION, NO_OPTION ou CANCEL_OPTION.
Nas linhas 35 a 37 um novo laço é feito, desta vez para exibir os dados de todas as pessoas cadastradas. 
A linha 35 utiliza uma forma alternativa do laço for. Esta forma recebe dois parâmetros separados por dois 
pontos (em vez de ponto e vírgula): o primeiro é uma definição de cada elemento da estrutura definida 
pelo segundo parâmetro. Essa linha pode ser lida como “para cada Pessoa p em pessoas”. O segundo 
parâmetro pode ser uma coleção ou um vetor. Esse laço, então, irá percorrer todos os elementos dentro de 
pessoas, irá chamar cada um de p e irá executar a linha 36, em que é chamado o método apresenta() de p.
 Saiba mais
Consulte a documentação disponível para coleções:
<https://docs.oracle.com/javase/tutorial/collections/index.html>.
Veja também a classe JOptionPane:
CLASS JOptionPane. Oracle.com, 2014. Disponível em: <https://docs.oracle.
com/javase/7/docs/api/javax/swing/JOptionPane.html>. Acesso em: 19 out. 2015.
2.10 Tratamento de exceções
Se você esteve testando os programas discutidos até aqui, deve ter encontrando algumas situações 
em que o programa parou abruptamente devido a alguma situação inesperada. Por exemplo, em qualquer 
um dos programas que cadastra o telefone de uma pessoa, se o usuário digitar uma letra (ou nada) no 
51
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
TÓPICOS ESPECIAIS DE PROGRAMAÇÃO ORIENTADA A OBJETOS
lugar de um número inteiro quando lhe é pedido para digitar o número de um telefone, o programa é 
encerrado informando uma mensagem de erro. Experimente fazer isso agora e observe a mensagem de 
erro que é apresentada na janela do Console. Na primeira linha da mensagem de erro é dito que ocorreu 
uma exceção do tipo NumberFormatException (em inglês). Isso indica que foi tentada a conversão para 
inteiro de um String que não representava um número inteiro.
Nós podemos modificar o programa para que ele perceba esta exceção e peça ao usuário para 
inserir novamente o número de telefone até que um número válido seja inserido. Isso é feito com o 
tratamento de exceções, que é composto de blocos try-catch ou try-catch-finally.
No bloco try é implementado o código que pode provocar uma exceção. No bloco catch é implementado 
o código que será executado caso uma exceção ocorra. No bloco opcional finally é implementado o código 
que deve ser executado tendo ocorrido uma exceção ou não. Ele é útil para fechar recursos que estavam 
sendo usados no bloco try, como arquivos, conexões com bancos de dados, conexões de rede etc.
Vamos modificar o método recebePessoa() da classe TestaPessoa para que ele se recupere de uma 
entrada de dados errada no número do telefone.
Figura 46 – Programa que trata exceções
52
Re
vi
sã
o:
 M
ac
ili
a/
Ro
se
 -
 D
ia
gr
am
aç
ão
: J
ef
fe
rs
on
 -
 2
1/
10
/1
5
Unidade I
O trecho que recebe o número de telefone de uma pessoa agora está entre as linhas 19 e 29. Na 
linha 19 é definida uma variável booleana que é verdadeira quando o usuário precisa inserir um número 
de telefone válido. Na linha 20 é iniciado o laço que será repetido quando o usuário insere caracteres 
inválidos para um número de telefone. Na linha 21 é iniciado o bloco try, que é o trecho de código 
que pode causar uma exceção. A exceção de formatação numérica pode ocorrer na linha 22, quando 
o método parseInt() tenta converter um String inválido para um número inteiro. Se a conversão for 
bem-sucedida, a linha 24 é executada e armazena o valor false na variável repete. Caso uma exceção 
de formatação

Outros materiais