Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

details

Libere esse material sem enrolação!

Craque NetoCraque Neto

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Lab
o
rató
rio
 d
e
 Pro
g
ram
ação
 I
W
ag
n
e
r M
e
n
d
e
s V
o
ltz
Código Logístico
59595
Fundação Biblioteca Nacional
ISBN 978-85-387-6690-2
9 7 8 8 5 3 8 7 6 6 9 0 2
Laboratório de 
Programação I
Wagner Mendes Voltz
IESDE BRASIL
2020
© 2020 – IESDE BRASIL S/A. 
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do 
detentor dos direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: Shemul/ENVATO ELEMENTS
Todos os direitos reservados.
IESDE BRASIL S/A. 
Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200 
Batel – Curitiba – PR 
0800 708 88 88 – www.iesde.com.br
CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO 
SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
V899L
Voltz, Wagner Mendes
Laboratório de Programação I / Wagner Mendes Voltz. - 1. ed. - Curi-
tiba [PR] : IESDE, 2020. 
106 p. : il.
Inclui bibliografia
ISBN 978-85-387-6690-2
1. Linguagem de programação de computador. 2. Java (Linguagem de 
programação de computador). I. Título.
20-65422 CDD: 005.13
CDU: 004.43
Wagner Mendes Voltz
Vídeo
Especialista em Administração com ênfase em 
Gestão da Tecnologia da Informação pela Faculdade 
de Administração e Economia (FAE). Graduado 
em Tecnologia em Informática pela Universidade 
Federal do Paraná (UFPR). Atua como professor 
desde 2012 e como analista de sistemas desde 2005. 
Tem experiência na área de ciência da computação, 
especialmente em metodologia e técnicas da 
computação. Ministra as disciplinas de Programação 
orientada a objetos, Desenvolvimento em Java com 
testes unitários, Desenvolvimento em Java Web, 
Padrões de projeto, Desenvolvimento em Android, 
Qualidade de código-fonte, Metodologias ágeis, Gestão 
da qualidade em projetos e Sistemas Operacionais.
SUMÁRIO
Agora é possível acessar os vídeos do livro por 
meio de QR codes (códigos de barras) presentes 
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando 
a câmera fotográ�ca de seu smartphone ou tablet 
para o QR code.
Em alguns dispositivos é necessário ter instalado 
um leitor de QR code, que pode ser adquirido 
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
SUMÁRIO
Agora é possível acessar os vídeos do livro por 
meio de QR codes (códigos de barras) presentes 
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando 
a câmera fotográ�ca de seu smartphone ou tablet 
para o QR code.
Em alguns dispositivos é necessário ter instalado 
um leitor de QR code, que pode ser adquirido 
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
1 Introdução à programação de computadores 9
1.1 Princípios de desenvolvimento de algoritmo 9
1.2 Histórico das linguagens de programação 13
1.3 Paradigma estruturado e paradigma orientado a objetos 21
2 Java: introdução e conceitos básicos 25
2.1 História da linguagem Java 25
2.2 Diferenças entre JVM, JRE e JDK 28
2.3 Bytecode, compilação e interpretação 31
2.4 Conhecendo a IDE 34
2.5 Criando e executando um código em Java 40
2.6 Convenções da linguagem Java 46
3 Notação condicional e estruturas de repetições no Java 54
3.1 Tipos, variáveis e operadores lógicos 54
3.2 Notação condicional em Java 65
3.3 Estruturas de repetição com Java 67
3.4 Palavras reservadas 70
4 Recursos da linguagem Java e a qualidade do código 73
4.1 Classe String 73
4.2 Conjunto de valores (matriz – arrays) 76
4.3 Classe Date 81
4.4 Testes unitários 83
5 Aplicando orientação a objetos 87
5.1 Definição e criação de classes, métodos e atributos 87
5.2 Abstração 89
5.3 Encapsulamento 91
5.4 Herança 92
5.5 Classes abstratas e métodos abstratos 95
 Gabarito 102
 REFERÊNCIAS 106
Esta obra foi elaborada visando gerar uma experiência prática por meio da 
construção de um software na linguagem de programação Java. Para que esta 
jornada seja a mais completa possível, vamos relembrar alguns conteúdos 
básicos de programação e aplicá-los na linguagem Java. Todos os conceitos 
terão um bloco de código-fonte, o qual será seu aliado durante toda a leitura 
deste livro. 
Em nossa primeira etapa desta jornada, vamos relembrar os conceitos 
fundamentais de programação e de algoritmos e entender um pouco 
mais sobre a evolução das linguagens de programação até o surgimento 
do paradigma orientado a objetos. Essa fundamentação é extremamente 
importante, pois é um alicerce para entendermos e aplicarmos corretamente 
os conceitos da linguagem Java.
Na sequência, iremos mergulhar na linguagem de programação Java e, por 
meio dos exercícios de programação propostos no decorrer de cada capítulo, 
vamos nos aprofundar nessa linguagem. A partir do Capítulo 2 é aconselhável 
que você esteja com seu material de estudos sempre acessível e com uma IDE 
(software para programar em Java) já iniciada.
Não tenha receio de copiar os códigos-fonte inseridos no livro, mas tente 
entender o que cada bloco ou palavra reservada faz. Se você copiar o código-
-fonte sem entendê-lo, isso pode ser prejudicial à sua capacidade cognitiva de 
interpretá-lo e tratá-lo com qualidade. 
O resultado esperado após a leitura deste livro é que você consiga criar 
programas simples em Java, mas com potencial para serem usados em 
diversos lugares. E aí, animado para esta aventura?
Bons estudos!
APRESENTAÇÃO
Introdução à programação de computadores 9
1
Introdução à programação 
de computadores
Antes de mergulharmos na criação de softwares utilizando a 
linguagem de programação Java, precisamos conhecer o contexto 
que nos trouxe até a escolha dessa linguagem como apoio na dis-
ciplina de Laboratório de Programação I. Esta é a proposta deste 
capítulo: trazer para você o conhecimento de fundamentos que re-
gem a criação de programas para computadores. Esperamos que 
você, leitor, esteja animado para entender mais sobre algoritmos, 
linguagens de programação e paradigmas. Vamos lá!
1.1 Princípios de desenvolvimento de algoritmo
Vídeo Você já parou um momento para pensar como seria o nosso mundo 
atual sem os computadores? E sem os smartphones? Pois é, seria no míni-
mo estranho. Alguns dispositivos eletrônicos fazem tanta parte do nosso 
dia a dia que, ao sair de casa, podemos esquecer objetos importantes, 
como a carteira e a chave da porta, mas não esquecemos nossos celulares.
Os computadores, de fato, estão presentes no nosso cotidiano, nos 
ambientes familiar, profissional, escolar e outros, muitas vezes em dis-
positivos que cabem na palma da mão (como os smartphones). Mas o 
que seria desses computadores sem os programas? 
Os programas, também chamados de aplicativos, são classificados 
como softwares. Eles permitem que o computador, composto por di-
versas peças denominadas hardware, seja utilizado para diversos fins.
Como será que um software é criado? Antes de responder a essa 
pergunta, vamos estudar um pouco mais sobre as funções de um 
computador.
10 Laboratório de Programação I
O computador é uma máquina eletrônica criada para resolver pro-
blemas, que podem ser cálculos complexos ou armazenamento de al-
gum dado (de modo temporário ou permanente). Todo computador 
possui a característica de processar dados por meio de uma entrada 
específica e, ao concluir esse processamento, apresentar esses dados 
em um dispositivo de saída.
Figura 1
Característica básica de um computador
Entrada Processamento Saída
Fonte: Elaborada pelo autor.
Como exemplos de dispositivos de entrada de dados, temos o tecla-
do e o mouse. Já a impressora e os monitores são considerados dispo-
sitivos de saída de dados. Processador e memória compõem a etapa 
de processamento.
Para orquestrar esse fluxo, há um software específico e de vital im-
portância para os computadores, chamado de sistema operacional. Ele 
faz um duro trabalho de mediação entre a comunicação do mundo real 
e dos aplicativos com o hardware. Como exemplos de sistemas opera-
cionais temos Microsoft Windows, Linux, macOS, Android e iOS, sendo 
os três primeirospara computadores pessoais e os últimos dois para 
dispositivos móveis.
Figura 2
Comunicação entre software e hardware em um computador
Fonte: Tanenbaum e Bos, 2010, p. 1.
Navegador web Leitor de e-mail Reprodutor de música
Modo núcleo
Modo usuário
Programa de interface com o usuário
Sistema operacional
Software
Hardware
Conheça mais sobre os 
sistemas operacionais 
para computadores 
pessoais assistindo ao 
vídeo Windows, macOs ou 
Linux, qual o melhor e o 
mais seguro?, publicado 
por CanalJMS Tech, que 
analisa as características 
de cada um deles.
Disponível em: https://www.youtube.
com/watch?v=d_pxmng2M90. 
Acesso em: 19 out. 2020.
Vídeo
https://www.youtube.com/watch?v=d_pxmng2M90
https://www.youtube.com/watch?v=d_pxmng2M90
Introdução à programação de computadores 11
Quando unimos a arquitetura dos computadores (hardware) com o 
sistema operacional, temos uma máquina que pode operar qualquer 
trabalho complexo, contudo para cada tipo de trabalho é necessário 
um software específico. Por exemplo, para digitar um texto, utilizamos 
o bloco de notas ou o Microsoft Word. Para acessar a internet, recor-
remos aos navegadores Mozilla Firefox ou Google Chrome. Sem esses 
softwares específicos, o computador não seria essa ferramenta tão útil 
para os dias atuais. Mas como esses aplicativos são criados? Qualquer 
pessoa pode criar um programa de computador?
Sim, qualquer pessoa pode fazê-lo. Cada software é desenvolvido res-
peitando uma sequência finita de passos e instruções. Essa sequência 
finita de instruções para resolver um problema é chamada de algoritmo.
É errado pensarmos que algoritmos são itens exclusivos da compu-
tação. Quando seguimos uma receita de bolo, por exemplo, ou quando 
precisamos montar um móvel e lemos o manual de instruções com os 
passos de montagem, estamos interpretando um algoritmo.
À medida que encontramos uma sequência de instruções e perce-
bemos que ela é finita, podemos então mecanizá-la ou digitá-la em uma 
linguagem que o computador possa transformar em um programa. Esse 
ato de digitar instruções para o computador denomina-se programar, e 
toda programação precisa utilizar uma linguagem específica, chamada 
linguagem de programação. Como exemplos de linguagens de progra-
mação temos Java, Python, C e diversas outras. O algoritmo é sempre o 
mesmo, o que muda é a implementação dele em cada linguagem.
Quando finalizamos a programação de algoritmo em uma linguagem 
de programação, temos o código-fonte do software que estamos crian-
do. Agora, precisamos executar um passo para que o sistema operacio-
nal consiga transformar o código-fonte em software utilizável por outros 
usuários. Esse processo pode se chamar compilação ou interpretação, 
algo que dependerá das características da linguagem de programação.
Para linguagens de programação que são compiladas, o sistema 
operacional gera um arquivo executável (semelhante aos programas 
com extensão .exe no Microsoft Windows) ao final do processamento. 
As linguagens de programação C, Pascal, Java e Objective-C são exem-
plos desse tipo de linguagem.
Você talvez nem tenha 
percebido, mas muitos 
trabalhos manuais 
que existiam antes se 
tornaram automatizados 
graças aos algoritmos. 
Sugerimos assistir ao 
vídeo O que é e como 
funcionam os algoritmos?, 
publicado pelo canal Pes-
quisa Fapesp, no qual os 
pesquisadores Roberto 
Cesar Junior e Sérgio 
Silveira explicam como 
e por que os algoritmos 
têm impacto crescente 
no cotidiano.
Disponível em: https://www.
youtube.com/watch?v=Xo1V_
JL1yAg. Acesso em: 19 out. 2020
Vídeo
https://www.youtube.com/watch?v=Xo1V_JL1yAg
https://www.youtube.com/watch?v=Xo1V_JL1yAg
https://www.youtube.com/watch?v=Xo1V_JL1yAg
12 Laboratório de Programação I
Figura 3
Processo de compilação
Código-fonte
Programa
Analisador 
léxico
Código-objeto
Analisador 
sintático
Otimizador 
de código
Analisador 
semântico
Código 
intermediário
Fonte: Elaborada pelo autor.
Esse processo de compilação depende de dois fatores: a arquitetura 
computacional e o sistema operacional em que o software será utiliza-
do. Programas que serão utilizados no Microsoft Windows, versão 64 
bits, devem ser compilados para a versão específica do sistema opera-
cional. Um software compilado em 64 bits não consegue operar em um 
sistema operacional de 32 bits, mas um software compilado em 32 bits 
é executado em um sistema operacional de 64 bits.
Pensando nessa situação, algumas linguagens de programação uti-
lizam máquinas virtuais que resolvem esse problema, permitindo que 
o programa compilado seja utilizado em qualquer sistema operacional. 
Java e C# são exemplos de linguagens de programação que utilizam 
máquinas virtuais (JVM e .NET runtime, respectivamente), conforme o 
quadro a seguir esclarece.
Quadro 1
Camadas de compiladores acima dos sistemas operacionais
Software compilado em Java Software compilado em C#
Máquina virtual Java (JVM) .NET runtime
Sistema operacional
Hardware
Fonte: Elaborado pelo autor.
Introdução à programação de computadores 13
Já as linguagens de programação interpretadas não geram esse ar-
quivo executável ao final do processamento. Toda vez que o software é 
iniciado, o código é interpretado e, após essa etapa, o software é exe-
cutado. As linguagens de programação Python, PHP, Lua, JavaScript e 
Ruby são exemplos desse tipo de linguagem.
Figura 4
Processo de interpretação
Código-fonte Interpretador Programa
Fonte: Elaborada pelo autor.
Conhecer esses conceitos de interpretação e compilação, assim 
como identificar quais linguagens de programação se enquadram nes-
sas características, são atribuições esperadas de um profissional que 
realizará programações em computadores por meio da transcrição de 
algoritmos. Dominar esses conceitos favorece a fundamentação corre-
ta na construção de códigos-fonte de qualidade e com performance.
1.2 Histórico das linguagens de programação 
Vídeo Como vimos na seção anterior, as linguagens de programação são 
instruções escritas que, após um processo de compilação ou interpre-
tação, geram um software utilizado por outros usuários. Elas podem 
ser classificadas em linguagem de máquina, linguagem de baixo nível e 
linguagem de alto nível.
A linguagem de máquina é formada por 0 e 1 (binários) e por hexa-
decimais, que é uma maneira representativa de otimizar a quantidade 
de 0 e 1 em um conjunto de dados. Esse conjunto reduzido de dados 
permite que o computador processe rapidamente diversas operações. 
Mas programar utilizando essa linguagem é um pouco complexo, por 
isso costumamos utilizar linguagens de baixo e alto níveis para criar 
softwares. As linguagens de máquina fazem parte da primeira gera-
ção de linguagens de programação. Veremos, a seguir, um exemplo de 
programa que exibirá a frase “Olá Mundo” para o sistema operacional 
MS-DOS, da Microsoft:
14 Laboratório de Programação I
<code>
B4 03 CD 10 B0 01 B3 0A B9 0B 00 BD 13 01 B4 13
CD 10 C3 4F 69 20 6D 75 6E 64 6F 21 0D 0A
</code>
Na linguagem de baixo nível, também chamada de assembly, em-
bora se aproxime da linguagem de máquina, não precisamos trabalhar 
somente com valores binários e hexadecimais. Para transformar um 
código-fonte de baixo nível em linguagem de máquina, utilizamos mon-
tadores, também chamados de assemblers. Essa linguagem faz parte da 
segunda geração das linguagens de programação. A seguir, vemos um 
exemplo da frase “Olá Mundo” feito para arquitetura x8086:
<code>
lea TEXTO, string
call printf
hlt
string TEXTO “Ola mundo!”, 0
printf PROC
 mov AL, [TEXTO].
 cmp AL, 0
 je pfend
 mov AH, 0Eh
 int 10h
 inc TEXTO
 jmp printf .
 pfend:
 ret
printf ENDP
</code>
As linguagens de programação de alto nível se aproximam da 
forma como naturalmente nos comunicamos. Os comandos são se-
Introdução à programação de computadores 15
melhantes a palavras ou a verbos comumente usados no nosso voca-
bulário. Além disso, é possível criar nomes representativos e de fácil 
interpretação para as variáveis do código-fonte.Nessa categoria, utili-
zamos compiladores e interpretadores para transformar o código-fonte 
em programa utilizável por outros usuários. Vejamos um exemplo de 
código-fonte de uma linguagem de alto nível:
<code>
COMPUTE DOBRO = NUMERO_DIGITADO * 2
</code>
Além dessa divisão, podemos classificar as linguagens de programa-
ção pelo cenário na qual são utilizadas. Sebesta (2018), por exemplo, 
classifica os cenários como linguagens de aplicações científicas e apli-
cações empresariais.
As linguagens de aplicação científica surgiram na década de 1940, 
junto com os computadores digitais. Basicamente, os softwares desen-
volvidos para esse cenário realizavam cálculos matemáticos complexos. 
A partir dos anos 1950, as linguagens de programação começaram a 
ser utilizadas em cenários empresariais. No início, os softwares em-
presariais eram desenvolvidos numa linguagem de programação pró-
pria, até a criação das linguagens COBOL e ALGOL 60 em meados de 
1960. Ambas as linguagens de programação tiveram êxito. Na época, 
o sucesso do COBOL foi tão grande que, atualmente, ainda existem 
oportunidades para trabalhar como programador dessa linguagem, 
realizando manutenção em softwares que rodam em computadores 
do tipo mainframe.
Na figura a seguir, conferimos graficamente o surgimento das 
principais linguagens de programação utilizadas em cenário empre-
sarial. Podemos perceber que a linguagem COBOL é filha da lingua-
gem FLOW-MATIC, e a linguagem ALGOL 60 tem como antecessoras 
ALGOL 58 e Fortran I. Tanto FLOW-MATIC como Fortran I são datadas 
de 1957. Entender a figura apresentada, portanto, é relevante para a 
sequência dos nossos estudos.
mainframe: computador 
de grande porte dedicado ao 
processamento de grandes 
volumes de informações. Esse 
tipo de computador, além de 
geralmente não possuir interface 
gráfica, costuma utilizar lingua-
gem de programação COBOL.
Glossário
16 Laboratório de Programação I
Figura 5
Genealogia das linguagens de programação
1957
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
Fortran I
Fortran II ALGOL 58
ALGOL 60 APL
FLOW-MATIC
COBOL
ALGOL W
ALGOL 68
Pascal
MODULA-2
SIMULA 67
SIMULA I
BASIC PL/I
CPL
LISP
SNOBOL
Fortran IV
Prolog
Fortran 77
Fortran 90
MODULA-3 Obero n
Ada 83
Eiffel
Per I
QuickBASIC
COMMON LISP
Miranda
ICON
Haskell
ANSI C (C89)
Python
C9 9
C#
Java 5.0
Python 2.0
Python 3.0
C# 2.0
C# 3.0
C# 4.0
C# 5.0
Java 6.0
Java 7.0
Java 8.0
awk
BCPL
B
C
Scheme
ML
Smalltalk 80
C++
Visual BASIC
Lua
Ada 95
PH P
Javascript
Ruby
Java
Ruby 1.8
Ruby 1.9
Visual Basic.NE T
Ada 2005
Fortran 95
Fortran 2003
Fortran 2008
Fonte: Sebesta, 2018, p. 35.
Introdução à programação de computadores 17
A linguagem ALGOL 60 influenciou muitas das linguagens de pro-
gramação atuais, podendo ser considerada como o elemento central 
no estudo de qualquer histórico da área. Nessa linguagem foram intro-
duzidos os conceitos de estrutura de blocos e passagem de parâme-
tros para subprogramas por valor e por nome. As estruturas de blocos 
permitem que o programador faça pequenos trechos de códigos-fonte, 
mantendo, assim, a coesão e organização do algoritmo. A passagem de 
parâmetro permitiu que esses pequenos blocos tivessem ligação um 
com o outro, de modo que se pode passar informações entre eles. Es-
sas novidades, até hoje, fazem parte das linguagens de programação 
de alto nível.
Em 1970 e 1971, houve o surgimento das linguagens de programação 
C e Pascal, respectivamente. Ambas são descendentes do ALGOL 60.
Após seu lançamento, rapidamente, Pascal se tornou a linguagem 
preferida no meio acadêmico para ensinar programação, substituindo 
o Fortran. Pascal foi projetada para ser uma linguagem de ensino, 
priorizando a simplicidade. O sucesso de Pascal começou a entrar em 
declínio a partir dos anos 1990, devido ao surgimento de diversas ou-
tras linguagens que tinham foco comercial. A seguir, apresentamos um 
exemplo de código em Pascal:
<code>
Uses Crt;
var A, B: Integer;
begin
 Writeln (‘Digite dois Números:’); {Mostra na tela a 
mensagem}
 Readln (A, B); {Lê os dois números}
 If (A > B) Then {Condição – se A for maior que B}
 Writeln (‘A é Maior que B, e seu valor é = ‘, A);
end.
</code>
Os ancestrais da linguagem de programação C são ALGOL 60 princi-
palmente, CPL, BCPL e B. Nos anos 1980, a linguagem C teve uma grande 
adesão, pois apresentava flexibilidade e seu compilador fazia parte do 
sistema operacional UNIX. Convém lembrar que o sistema operacional 
Microsoft Windows surgiu em meados de 1985, ou seja, o sistema ope-
racional mais utilizado era o UNIX no início dos anos 1980. A seguir, po-
demos ver um exemplo de código C que, ao ser executado, apresentará 
18 Laboratório de Programação I
uma mensagem no monitor e aguardará que o usuário digite algo. Após 
esse procedimento, o programa exibirá o que foi digitado:
<code>
#include <stdio.h>
main(){
 char msg;
 printf(“Digite um caractere e ENTER\n”); // mostrar na tela
 scanf(“%c”, &msg); // %c para ler ou mostrar char 1
 printf(“Caractere digitado e’ %c\n”, msg);
}
</code>
Todas as linguagens de programação citadas até o momento são do 
tipo imperativa, ou seja, seus comandos expressam uma ordem para 
que o computador execute algo. Costumamos falar que a sequência de 
passos codificados obedece ao paradigma estruturado de programa-
ção. Na figura a seguir, percebemos o detalhamento de quais lingua-
gens são consideradas assertivas imperativas, assertivas orientadas a 
objetos e declarativas.
Figura 6
Categorias das linguagens de programação
Fonte: Saugo, 2020, p. 19.
Linguagens de programação
Assertivas
Imperativas
C
Pascal
Fortran
C++
Java
C#
Lisp
Miranda
Haskell
Prolog
Gödel
Mozart/OZ
Alice
Orientadas a 
objetos
Funcionais Declarativas Satisfação de restrições
Declarativas
Introdução à programação de computadores 19
Em 1980, surgiu a linguagem de programação Smalltalk, a primeira 
que ofereceu suporte completo ao paradigma da orientação a objetos, 
representando uma grande evolução. Além disso, Smalltalk ofereceu 
interfaces gráficas para o usuário, o que representava um grande avan-
ço para a época e facilitava o uso dos softwares pelos usuários.
Em 1984, originou-se a linguagem C++, implementando tanto o 
paradigma estruturado como o paradigma orientado a objetos. Essa 
linguagem rapidamente se tornou amplamente utilizada, devido a 
sua compatibilidade com C. Programas criados em C eram facilmente 
adaptados e compilados em C++, podendo-se utilizar os recursos da 
orientação a objetos. Convém considerar que, nesse contexto, as ca-
racterísticas dos compiladores C++ estavam também disponíveis em 
larga escala e de maneira barata nos sistemas operacionais UNIX. O 
ponto fraco da linguagem C++ é a sua complexidade. A seguir, apre-
sentamos um exemplo de seu código envolvendo uma classe chamada 
Carro e uma classe filha chamada Fusca. Ambas possuem o método 
MostraNome() e, dependendo de qual classe o usuário utilizar, apre-
sentarão um texto específico:
<code>
# include <iostream>
class Carro {
 public: virtual void MostraNome() {
 std::cout << “um carro”;
 }
 virtual ~Carro() {}
};
class Fusca: public Carro { // Fusca é um carro
 public: void MostraNome() {
 std::cout << “um fusca”; // sobrecarrega a função 
virtual
 }
};
int main() {
 Carro* carro = new Fusca;
Existem diversas lingua-
gens de programação, e 
cada uma atende a um 
fim específico. Cons-
tantemente, o ranking 
das linguagens mais 
utilizadas sofre mudan-
ças, por isso sugerimos 
assistir ao vídeo Most 
Popular Programming 
Languages 1965-2019, 
publicado pelo canal 
Data Is Beautiful, no qual 
podemos visualizar as 
mudanças nesse ranking 
entre ao longo dos anos.
Disponível em: https://
www.youtube.com/
watch?v=Og847HVwRSI. Acesso 
em: 19 out. 2020.
Vídeo
(Continua)
https://www.youtube.com/watch?v=Og847HVwRSIhttps://www.youtube.com/watch?v=Og847HVwRSI
https://www.youtube.com/watch?v=Og847HVwRSI
20 Laboratório de Programação I
 carro->MostraNome(); // exibe na tela “um fusca”, e não 
“um carro”
 delete carro;
}
</code>
Pensando em reduzir a complexidade do C++, um grupo de enge-
nheiros de software da Sun Microsystems projetou uma nova lingua-
gem de programação chamada Java. Essa linguagem oferece mais 
poder e flexibilidade que o C++ e resolve os problemas de segurança 
das suas linguagens ancestrais (C e C++). O surgimento dessa lingua-
gem é datado de 1995.
O uso de Java aumentou rapidamente, permitindo que aplicativos 
fossem criados para computadores pessoais e 
web. Em 2008, a Oracle Corporation, empresa 
especializada em soluções de banco de dados, 
adquiriu a Sun Microsystems e, consequente-
mente, comprou os direitos da linguagem Java, 
no entanto praticamente todo o seu código-fonte 
está disponível sob a licença GNU General Public 
License (GPL). Esse processo de disponibilização 
foi finalizado em 2007, antes da aquisição da Sun 
Microsystems pela Oracle Corporation.
Um fator de destaque na década de 1990, além do 
surgimento do Java, foi o crescimento da rede internet e a necessidade 
de linguagens de programação com foco na web, tais como JavaScript, 
PHP, Python e Ruby. Todas essas linguagens de programação perma-
necem sendo utilizadas e são do tipo interpretadas.
É difícil saber qual é a melhor linguagem de programação, pois cada 
uma foi criada para um contexto específico. Sugerimos sempre enten-
der qual é o problema a ser resolvido para, então, buscar a linguagem 
de programação mais adequada.
Cash1994/Shutterstock
GNU General Public License (GPL) 
é uma licença que identifica o 
software como livre para uso e 
alteração. Para saber mais sobre 
essa licença, sugerimos a leitura 
disponível em: https://www.
gnu.org/licenses/licenses.pt-br.
html. Acesso em: 19 out. 2020.
Leitura
Alguns sites especializados man-
tém um ranking das linguagens 
de programação mais utilizadas. 
Você pode conferir o ranking 
criado pelo Tiobe (https://www.
tiobe.com/tiobe-index/), atua-
lizado mensalmente. Além dele, 
sugerimos verificar o relatório 
anual do Stackoverflow (https://
insights.stackoverflow.com/).
Acesso em: 19 out. 2020.
Saiba mais
https://www.gnu.org/licenses/licenses.pt-br.html
https://www.gnu.org/licenses/licenses.pt-br.html
https://www.gnu.org/licenses/licenses.pt-br.html
https://www.tiobe.com/tiobe-index/
https://www.tiobe.com/tiobe-index/
https://insights.stackoverflow.com/
https://insights.stackoverflow.com/
Introdução à programação de computadores 21
1.3 Paradigma estruturado e 
paradigma orientado a objetos Vídeo
O paradigma de programação estruturado é regido por uma 
sequência de comandos previamente determinados e organizados. 
Ao utilizar esses comandos de modo sequencial, ou seja, criando 
algoritmos, é possível resolver problemas. O paradigma estrutu-
rado tem sua origem na arquitetura de computa-
dores, a qual trabalha com sequências ordenadas 
de instruções de máquina. Essa arquitetura é co-
nhecida como arquitetura de Von Neumann e foi 
aplicada no computador ENIAC 1 , utilizado pelos 
norte-americanos durante o final da Segunda 
Guerra Mundial.
Figura 7
Arquitetura de Von Neumann
UC – unidade de controle
Memória
ULA – unidade lógica e aritmética
Entrada
Saída
Fonte: Elaborada pelo autor.
No paradigma estruturado, buscamos quebrar um problema em 
partes menores, com a técnica dividir para conquistar. Ao trabalhar com 
o conjunto dessas partes menores, é possível solucionar problemas 
complexos. Saugo (2020) apresenta a resolução desses problemas ba-
seando-se em três conceitos:
 • Comandos: ordens que controlam ações e instruções de execu-
ção do programa.
 • Estados: refletem o resultado de operações lógicas e cálculos du-
rante a execução do programa.
1
O Electronic Numerical Integrator 
and Computer (ENIAC), que, 
em tradução livre, significa 
“computador integrador numé-
rico eletrônico”, foi o primeiro 
computador digital eletrônico de 
grande escala já registrado.
22 Laboratório de Programação I
 • Variáveis: recursos utilizados para armazenar temporariamente 
um dado, sendo processado durante a execução do programa.
Esse paradigma costuma ser mais facilmente entendido por pes-
soas que estão começando a criar programas. Durante muitos anos, 
inclusive, foi o principal paradigma utilizado por empresas e universi-
dades, uma vez que era implementado desde o ALGOL 60.
O paradigma estruturado é muito poderoso, mas apresenta algu-
mas deficiências que foram supridas pelo paradigma orientado a ob-
jetos. Dentre as deficiências podemos citar a dificuldade em relacionar 
diversos elementos do código-fonte para resolver problemas e repre-
sentar algo próximo ao cotidiano do ser humano.
O paradigma orientado a objetos, por sua vez, busca aproximar a 
forma de programação dos modelos da vida real por meio de conjuntos 
de dados, também chamados de objetos. Esses objetos são definidos 
com base na observação da vida real. A observação compõe o princípio 
da abstração, sendo considerada a base da orientação a objetos.
Além dos conjuntos de dados, o paradigma orientado a objetos im-
plementa as ações dos objetos e as interações entre eles. Por se apro-
ximar fielmente da vida real, permite o desenvolvimento de softwares 
mais complexos, de modo que as linguagens de programação que im-
plementam esse paradigma tiveram maior adesão nos últimos anos.
A orientação a objetos possui quatro pilares derivados do princípio 
da abstração, apresentados na figura a seguir.
Figura 8
Pilares da orientação a objetos
Fonte: Elaborada pelo autor.
En
ca
ps
ul
am
en
to
H
er
an
ça
Co
m
po
si
çã
o
Po
lim
or
fis
m
o
Orientação a objetos
Abstração
Introdução à programação de computadores 23
O encapsulamento pode ser entendido como uma cápsula de re-
médio. Assim como a cápsula protege o medicamento, o encapsula-
mento esconde partes de um código-fonte e expõe somente o que é 
necessário. Isso permite focar a produção de partes pequenas reuti-
lizáveis. No encapsulamento, não precisamos saber como uma deter-
minada parte de um código foi programada, simplesmente invocamos 
o nome daquele trecho de código em qualquer parte do projeto e ele 
funciona, pois está encapsulado.
A herança permite que objetos sejam referenciados como pai e 
filhos, em que os objetos filhos herdam todas as características do 
objeto pai, mas o objeto pai nada herda do filho. Isso reduz a dupli-
cação de código-fonte. Por sua vez, a composição busca representar 
as relações que os objetos devem ter, baseando-se nas relações que 
existem na vida real. Isso faz com que os objetos sejam reaproveita-
dos, evitando duplicidade e mantendo a simplicidade. Ao evitar du-
plicidade, nos tornamos mais produtivos e priorizamos a criação de 
código-fonte de qualidade.
Por fim, temos o polimorfismo, com o qual podemos transformar 
objetos diferentes em objetos que conseguem trocar mensagem por 
meio da generalização de suas características. Por exemplo: os objetos 
avião, barco e automóvel são diferentes, mas todos precisam se deslo-
car. A ação de deslocar é polimórfica. Quando essa ação é acionada, o 
avião consegue voar; o barco, navegar; o automóvel, sair de um ponto 
a outro com a aceleração.
Devido a essas características, as linguagens que implementam o 
paradigma de orientação a objetos conseguem se aproximar da vida 
real e resolver problemas complexos.
Vídeos
O paradigma estruturado e o paradigma orientado a objeto não são os únicos existen-
tes na programação. Temos o paradigma procedural, o paradigma funcional e outros. 
Para conhecer mais sobre esse tema e o histórico dos paradigmas, assista ao conteúdo 
do canal Código Fonte TV. Recomendamos alguns vídeos específicos:
• Paradigmas de programação: https://www.youtube.com/watch?v=EefVmQ2wPlM.
• Programação funcional // Dicionário do programador: https://youtu.be/BxbHGPivjdc.
• Programação orientada a objetos(POO) // Dicionário do programador: https://youtu.be/
QY0Kdg83orY.
Acesso em: 19 out. 2020.
https://www.youtube.com/watch?v=EefVmQ2wPlM
https://youtu.be/BxbHGPivjdc
https://youtu.be/QY0Kdg83orY
https://youtu.be/QY0Kdg83orY
24 Laboratório de Programação I
CONSIDERAÇÕES FINAIS
Quando compramos um novo aparelho eletrônico, costumamos rece-
ber um manual de especificação e uso. Com ele, entendemos o potencial 
que o aparelho pode ter, suas referências e como utilizá-lo. Esse é um 
bom exemplo de algoritmo da vida real.
À medida que trazemos os algoritmos para o mundo computacional, 
por meio dos paradigmas de programação, temos mais e mais softwares 
disponíveis para serem usados em computadores. As linguagens de pro-
gramação são o meio para realizar essa codificação computacional. Este 
capítulo visou fundamentar seu conhecimento nesses temas, com uma 
breve contextualização e história da programação.
ATIVIDADES
1. Um computador é formado por hardware e software. Os sistemas 
operacionais são um tipo de software com uma função específica. Qual é 
a importância do sistema operacional para os computadores? Cite o nome 
de pelo menos dois sistemas operacionais para computadores pessoais.
2. A partir dos anos 1990, tivemos o crescimento da internet e diversas 
linguagens de programação foram criadas para o desenvolvimento 
de páginas na web. Cite os nomes dessas linguagens criadas 
essencialmente para atuar com internet.
3. Faça uma pesquisa e identifique em qual modelo ou geração de 
computador a arquitetura de Von Neumann foi usada pela primeira vez.
Java: introdução e conceitos básicos 25
2
Java: introdução e 
conceitos básicos
Após aprendermos sobre algoritmos, paradigmas de desen-
volvimento de software e conhecer, de maneira básica, diversas 
linguagens de programação, podemos começar a aprofundar os 
nossos estudos sobre a linguagem Java. Neste capítulo, vamos en-
tender a história do Java, diferenciais e especialidades dessa lin-
guagem e, por fim, fazer nosso primeiro programa em Java. E aí, 
animado para entender mais sobre essa linguagem?
2.1 História da linguagem Java
Vídeo O dia 23 de maio marca diversos acontecimentos mundiais que im-
pactaram nações e vidas. Nesta data, Portugal foi reconhecido como 
reino independente em 1179. A Holanda declarou independência da 
Espanha em 1568. Já em 1846, o presidente do México declarou guerra 
contra os Estados Unidos. Em 1915, a Itália mudou de lado, na Primeira 
Guerra Mundial, e passou a integrar o bloco dos aliados.
Talvez você esteja imaginando que, nesta data, só aconteceram con-
flitos e revoluções entre países, mas há outros eventos importantes 
associados a ela. Neste dia também foi inaugurada a Biblioteca Pública 
de Nova Iorque em 1911, e houve a ratificação do protocolo de Quioto 
em 2005, que oficializou metas para a redução da emissão de gases po-
luentes pelos países. E foi nesta data também que tivemos a primeira 
versão da linguagem Java, no ano de 1995.
Java é uma linguagem de programação criada pela empresa Sun Mi-
crosystems. Os mentores dessa linguagem foram James Gosling, Mike 
Sheridan e Patrick Naughton, sendo o primeiro nome geralmente o 
mais conhecido por estar publicamente em eventos de promoção do 
Java e da Sun Microsystems. James também participou do desenvolvi-
mento do sistema operacional Android pela empresa Google.
26 Laboratório de Programação I
 No ano de 1991, James, Mike e Patrick 
perceberam o consumo de dispositivos 
eletrônicos inteligentes por consumido-
res finais como uma oportunidade de 
negócio. Era a chance de aproximar os 
computadores pessoais dos eletroeletrô-
nicos já presentes na casa das pessoas, 
como os televisores. Essa oportunidade 
foi chamada de Green Project.
Treze pessoas trabalharam por 18 me-
ses na criação de um controle remoto, 
chamado Star7 (lê-se Star Seven), que tra-
zia como inovação a opção touchscreen 
(semelhante aos smartphones atuais). Esse controle utilizava uma lin-
guagem de programação própria para interação entre hardware e soft-
ware da interface touchscreen. Essa linguagem, baseada em C e C++, 
foi chamada de Oak, que, em tradução livre para o português, significa 
carvalho, uma árvore sempre visualizada pela equipe através da janela 
do escritório.
A proposta do Star7 era muito boa e disruptiva, já que, além do con-
trole remoto touchscreen, o aparelho tinha a proposta de vídeo sob 
demanda (semelhante ao que temos com provedores globais de filmes 
e séries televisivas via streaming nos dias atuais). Infelizmente, a pro-
posta estava muito à frente do seu tempo e as empresas de TV a cabo 
não se interessaram pelo produto, o que colocou o Green Project em 
dificuldades e sem expectativas promissoras.
Com o rápido crescimento da World Wide Web (WWW, ou internet) 
em 1993, a Sun Microsystems percebeu potencial para a linguagem 
de programação Oak. James Gosling ficou responsável pela adaptação 
dessa linguagem para a internet. Além das alterações de estrutura para 
suportar a internet, foi decidida a mudança de nome para Java, que era 
a cidade de origem de um tipo de café muito apreciado pela equipe da 
Sun Microsystems. Em 23 de maio de 1995 foi lançada a primeira ver-
são pública do Java e, em pouco tempo, a base de pessoas utilizando 
essa linguagem cresceu, já que ela permitiu o uso de softwares den-
tro dos navegadores, pela internet, por meio da tecnologia Java Applet 
(DEITEL, P.; DEITEL, H., 2016).
RE
DP
IX
EL
.P
L/
Sh
ut
te
rs
to
ck
Sugerimos assistir à de-
monstração do Star7 rea-
lizada por James Gosling. 
O vídeo intitulado Star7 
Demo foi publicado pelo 
canal JamesAGosling.
Disponível em: https://www.youtube.
com/watch?v=1CsTH9S79qI. Acesso 
em: 19 out. 2020.
Vídeo
https://www.youtube.com/watch?v=1CsTH9S79qI
https://www.youtube.com/watch?v=1CsTH9S79qI
Se comparada às outras linguagens, Java é a linguagem de progra-
mação que teve a maior adoção. Em 2003 foi ultrapassada a marca de 
3 milhões de pessoas desenvolvedoras na linguagem Java. Atualmente, 
Java está entre as linguagens mais utilizadas, ao lado de C e Python, 
segundo a Tiobe Index 1 (2020).
Em 2006, no dia 13 de novembro, a Sun Microsystems começou a 
liberar partes do código-fonte do Java, alterando a forma de licencia-
mento dessas partes para o modelo GNU General Public License (GPL). 
A liberação completa do código-fonte ocorreu em maio de 2007, doze 
anos após sua criação. O que mudou com essa decisão? Basicamente, 
o que era de propriedade da Sun Microsystems passou a ser de código 
livre, evitando que alguma empresa cobre dos desenvolvedores que 
utilizem Java.
GNU General Public License (GPL) é uma 
licença de software comumente utilizada em 
projetos de software livre e de código aberto. 
A GPL permite que os programas sejam distri-
buídos e reaproveitados, mantendo, porém, os 
direitos do autor de modo a não permitir que 
essa informação seja usada de uma maneira 
que limite as liberdades originais. ESB Professional/Shutterstock
Em 2008, a Oracle Corporation, 
empresa especializada em soluções de banco de dados, adquiriu a Sun 
Microsystems visando ampliar sua carteira de soluções para seus clien-
tes e apropriar-se do conhecimento tecnológico dos profissionais que 
ali atuavam. Como o Java está na licença GPL, não é possível cobrar 
pelo uso dessa linguagem, mas a Oracle cobra por suporte a versões 
antigas e ferramentas específicas basea-
das em Java. 
Agora que conhecemos a história do 
Java, vamos mergulhar nas característi-
cas dessa linguagem e em conceitos im-
portantes para podermos usá-la.
Site especializado que mantém 
um ranking das linguagens de 
programação mais utilizadas. 
Disponível em: https://www.
tiobe.com/tiobe-index/. Acesso 
em: 19 out. 2020.
1
Vc
ha
l/S
hu
tte
rs
to
ck
2727Java: introdução e conceitos básicosJava: introdução e conceitos básicos
https://www.tiobe.com/tiobe-index/
https://www.tiobe.com/tiobe-index/
28 Laboratório de Programação I
2.2 Diferenças entre JVM, JRE e JDK
Vídeo A linguagem de programaçãoJava tem um conjunto de caracte-
rísticas que a diferencia das demais linguagens. Horstmann e Cornell 
(2010) destacam onze dessas características:
Simples 
A sintaxe do Java é uma versão limpa da sintaxe do C++.
Compatibilidade com redes 
Java tem uma extensa biblioteca de rotinas para lidar 
com os protocolos de rede. Os aplicativos Java podem 
abrir e acessar objetos pela internet, a partir de um 
endereço válido na web, com a mesma facilidade que 
acessam um sistema de arquivos local.
Portável 
Java é portável, ou seja, independe de sistema 
operacional para funcionar, graças ao uso de uma 
máquina virtual própria, que você conhecerá a seguir. 
Java segue o conceito de “escreva uma vez, execute em 
qualquer lugar” (“write once, run anywhere”).
Alto desempenho 
Os bytecodes Java podem ser convertidos 
instantaneamente (em tempo de execução) em código 
de máquina, para que o processador realize a execução.
Dinâmico 
Java é mais dinâmico que C ou C++ e consegue se 
adaptar a um ambiente evolutivo, o que mantém a 
linguagem competitiva e aderente às necessidades dos 
dias atuais.
Seguro 
Por ser utilizado num ambiente distribuído, como a internet, 
Java traz a proposta de ser livre de vírus e adulterações. Infe-
lizmente, não está livre de eventuais falhas que podem expor 
a segurança, mas percebemos rapidez na solução desses 
problemas quando identificados. Isso torna o Java extrema-
mente seguro, se comparado com outras linguagens.
Orientado a objetos 
Para as linguagens modernas, é inconcebível não 
suportar esse paradigma.
Robustez 
Java coloca ênfase na verificação preliminar de 
possíveis problemas por meio da verificação dinâmica, 
buscando identificar e eliminar situações propensas 
a erros.
Interpretado 
Java possui um interpretador que pode executar 
bytecodes Java em qualquer máquina que possui o 
interpretador instalado.
Múltiplas threads 
Uma thread é uma atividade a ser executada. Java 
oferece suporte à execução de mais de uma thread ao 
mesmo tempo e com mais simplicidade, se comparado 
com outras linguagens.
Arquitetura neutra 
O compilador Java foi projetado para gerar um formato 
de arquivo neutro em relação a processadores. Com 
isso, qualquer máquina consegue interpretar Java e 
converter em código de máquina nativo.
Essas características são diferenciais possíveis graças ao projeto ar-
quitetural da linguagem Java, que evolui desde a sua criação. Nesse 
contexto arquitetural, há três softwares importantes que implemen-
tam tais diferenciais:
Java: introdução e conceitos básicos 29
 • JDK – Java development kit;
 • JRE – Java runtime environment;
 • JVM – Java virtual machine.
Java virtual machine (JVM) é um aplicativo de software que simula 
um computador, mas oculta o sistema operacional e o hardware subja-
centes dos programas que interagem com ele (DEITEL, P.; DEITEL, H., 
2016). Com isso, um programa Java pode ser utilizado em qualquer sis-
tema operacional, pois é executado na JVM, e não no sistema operacio-
nal instalado.
Somente Java development kit (JDK) e Java runti-
me environment (JRE) são softwares que podemos 
instalar em qualquer sistema operacional. Não exis-
te um instalador da JVM, pois ela está dentro do JRE. 
Além disso, todo JDK possui um JRE, ou seja, dentro 
do JDK há uma JVM. Para facilitar o entendimento, a 
imagem ao lado mostra a JVM como um item central 
(ou nuclear), o JRE contendo a JVM e o JDK contendo 
o JRE.
A diferença entre JDK e JRE consiste no perfil da 
pessoa que utiliza o computador. Caso ela deseje 
criar um programa em Java, precisará de um JDK. 
Caso ela queira usar um software criado em Java, 
precisará de uma versão do JRE. À medida que ela 
tente usar um software ou acessar uma página web feita em Java, os 
sistemas operacionais e os navegadores web conseguem identificar 
que não há um JRE instalado no computador.
Para a instalação de um JDK, é necessário fazer o download da ver-
são mais atualizada desse software. Pode-se escolher entre dois forne-
cedores de JDK: uma versão proprietária da Oracle, chamada Java SE, 
ou uma versão de código aberto, chamada OpenJDK.
Para o usuário do Linux, é comum instalar a versão OpenJDK, mes-
mo se ele não for desenvolvedor em Java, ou seja, se precisasse so-
mente de um JRE. Além da versão OpenJDK, é possível instalar outras 
versões do JDK no Linux. Dentre as opções, podemos citar a da empre-
sa RedHat ou a versão da própria Oracle (SANTOS, 2003). A sugestão 
é sempre utilizar a versão OpenJDK, pois ela está sob a licença GPL, 
evitando possíveis cobranças pelo uso de um JDK proprietário. Para o 
Figura 1
Modelo arquitetural do Java
Fonte: Elaborada pelo autor.
JDK – Java development kit
JRE – Java runtime 
environment
JVM – Java 
virtual machine
Java SE e OpenJDK são gratuitos. 
Com o passar do tempo, no 
entanto, a versão da Oracle 
poderá cobrar à medida que o 
usuário recorrer ao suporte. O 
download dessas versões está 
disponível em:
Oracle: https://www.oracle.
com/technetwork/pt/java/
javase/
OpenJDK: https://openjdk.
java.net/
A seguir, a instalação do JRE para 
usuários do Microsoft Windows, 
que pode ser baixada no site da 
Oracle: https://www.java.com/
pt_BR/download/.
Acesso em: 19 out. 2020.
Curiosidade
https://www.oracle.com/technetwork/pt/java/javase/
https://www.oracle.com/technetwork/pt/java/javase/
https://www.oracle.com/technetwork/pt/java/javase/
https://openjdk.java.net/
https://openjdk.java.net/
https://www.java.com/pt_BR/download/
https://www.java.com/pt_BR/download/
30 Laboratório de Programação I
usuário do Microsoft Windows, é comum instalar um JRE se ele não for 
desenvolvedor em Java.
Listamos a seguir um histórico das versões do Java e algumas ver-
sões futuras, que serão disponibilizadas nos próximos anos.
Quadro 1
Versões do Java
Versão Data de publicação
DK Beta Maio de 1995
JDK 1.0 Janeiro de 1996
JDK 1.1 Fevereiro de 1997
J2SE 1.2 Dezembro de 1998
J2SE 1.3 Maio de 2000
J2SE 1.4 Fevereiro de 2002
J2SE 5.0 Setembro de 2004
Java SE 6 Dezembro de 2006
Java SE 7 Julho de 2011
Java SE 8 Março de 2014
Java SE 9 Setembro de 2017
Java SE 10 Março de 2018
Java SE 11 Setembro de 2018
Java SE 12 Março de 2019
Java SE 13 Setembro de 2019
Java SE 14 Março de 2020
Java SE 15 Setembro de 2020
Java SE 16 Março de 2021
Java SE 17 Setembro de 2021
Fonte: Elaborado pelo autor.
Para saber qual é a versão do Java instalada no seu computador, 
abra um terminal de comando e digite "java -version" 2 . Caso exista um 
JDK instalado, aparecerão as seguintes mensagens:
 • No Windows:
No Windows, clique no botão 
INICIAR → EXECUTAR → e 
digite "cmd". Com isso, você 
chegará ao terminal de comando 
para digitar "java -version". 
No Linux, pressione as teclas 
CTRL + ALT + T para acessar o 
terminal de comando e digite 
"java -version".
2
Java: introdução e conceitos básicos 31
 • No Linux
Caso não apareçam mensagens semelhantes, feche o terminal 
de comando, faça o download do JDK mais atual, realize a instalação 
e, após a conclusão, abra uma nova janela de comando para digitar 
"java -version".
No vídeo Instalando o 
JDK no seu Computador - 
Gustavo Guanabara, publi-
cado pelo canal Curso 
em Vídeo, você poderá 
conhecer mais sobre 
como instalar o JDK.
Disponível em: https://www.
youtube.com/watch?v=yWU5bm_
pZzY. Acesso em: 19 out. 2020.
Vídeo
2.3 Bytecode, compilação e interpretação
Vídeo Antes de começar a programar em Java, precisamos entender o 
processo que a linguagem faz para transformar o código-fonte em um 
programa executável pelos usuários. Java possui um processo específi-
co, que o torna diferente das demais linguagens: utiliza compilação, in-
terpretação e bytecodes. Paul Deitel e Harvey Deitel (2016) categorizam 
esse processo em cinco fases:
11 22 33 44 55Edição do código Java Compilação do código Carregamento Verificação Execução
Na Fase 1, o programador utiliza um editor de código-fonte em Java, 
conhecido como interface de desenvolvimento (IDE). Nesse programa são 
criados arquivos com aextensão .java, que são salvos nos discos rígidos.
Fonte: Elaborada pelo autor.
Figura 2
Fase 1 – Edição do código Java
Arquivo com 
extensão .java
Editor Java (IDE) Disco
Na Fase 2, o compilador Java é acionado e faz a conversão do código 
.java em bytecode com extensão .class. O bytecode é um arquivo inter-
mediário que será utilizado nas demais fases e interpretado pela JVM. 
https://www.youtube.com/watch?v=yWU5bm_pZzY
https://www.youtube.com/watch?v=yWU5bm_pZzY
https://www.youtube.com/watch?v=yWU5bm_pZzY
32 Laboratório de Programação I
Para existir a compilação, é necessário ter o JDK instalado. O JRE não 
possui o compilador Java, também chamado de javac. O compilador 
pode ser acionado por linha de comando, mas os programas de edição 
de código Java (IDE) costumam compilar o código-fonte Java de manei-
ra contínua e, em alguns casos, compilam a cada salvamento de um 
arquivo .java. O bytecode ficará armazenado no disco, em uma pasta 
chamada bin, na raiz do projeto.
Fonte: Elaborada pelo autor.
Figura 3
Fase 2 – Compilação do código
Arquivo com 
extensão .class
Compilador 
Java (javac) Disco
Na Fase 3, a JVM armazena o programa na memória para executá-lo 
(DEITEL, P.; DEITEL, H., 2016). Esse processo é conhecido como carrega-
mento e são utilizados os bytecodes .class, criados na Fase 2, que estão 
armazenados no disco.
Fonte: Elaborada pelo autor.
Figura 4
Fase 3 – Carregamento
Arquivo com 
extensão .class
Carregador de 
classes
Memória 
principal
Disco
Na Fase 4, enquanto as classes são carregadas, o verificador de 
bytecodes assegura que eles são válidos e não violam restrições de se-
gurança do Java (DEITEL, P.; DEITEL, H., 2016).
Java: introdução e conceitos básicos 33
Fonte: Elaborada pelo autor.
Figura 5
Fase 4 – Verificação
Verificador de 
bytecodes
Memória 
principal
Na última fase, acontece a interpretação do bytecode pela JVM. Du-
rante essa etapa, chamada de execução, a memória principal é utilizada 
para o armazenamento de dados enquanto o programa é executado.
Fonte: Elaborada pelo autor.
Figura 6
Fase 5 – Execução
Interpretador
Memória 
principal
Nas versões mais atuais do Java, essa última fase executa tanto a 
interpretação do bytecode como a compilação em tempo de execução 
(just-in-time – JIT). Essa mudança fez com que os programas Java se tor-
nassem mais rápidos no processo de conversão de bytecode para có-
digo de máquina.
As cinco fases acontecem em poucos segundos e de maneira contí-
nua, num trabalho conjunto entre IDE, JDK e JVM.
Relembre o processo de 
compilação executada 
pelo JDK e JVM assistindo 
ao vídeo Código Fonte 
Java, Bytecodes, JDK, JVM e 
IDE, publicado pelo canal 
High Tech Cursos Fábrica 
de Programador.
Disponível em: https://www.
youtube.com/watch?v=d5JY-
GyaPgE&ab&ab. Acesso em: 19 
out. 2020.
Vídeo
 https://www.youtube.com/watch?v=d5JY-GyaPgE&ab&ab
 https://www.youtube.com/watch?v=d5JY-GyaPgE&ab&ab
 https://www.youtube.com/watch?v=d5JY-GyaPgE&ab&ab
34 Laboratório de Programação I
2.4 Conhecendo a IDE
Vídeo Na seção anterior, vimos as cinco fases para a compilação e inter-
pretação do código Java. Na primeira fase é aconselhável utilizar um 
programa específico para a escrita de código Java. Costumamos cha-
mar de interface de desenvolvimento (IDE) o programa utilizado para a 
escrita de código-fonte.
Na linguagem Java, temos diversas IDEs que trabalham em conjunto 
com o JDK para realizar as cinco fases de compilação e interpretação do 
Java. Além disso, as IDEs costumam ter as funcionalidades de linkers, 
debuggers e testes automatizados, o que torna o trabalho do profissio-
nal desenvolvedor mais fácil. A seguir, apresentamos as versões mais 
populares de IDEs para Java.
Quadro 2
Versões de IDEs para programação em Java
Nome Custo
Suporte ao 
desenvol-
vimento 
corporativo
Suporte ao 
desenvolvi-
mento web
Link para down-
load
Apache 
NetBeans
Gratuito Sim Sim
https://netbeans.
apache.org/
download/
IntelliJ IDEA 
Ultimate
Pago Sim Sim
https://www.
jetbrains.com/pt-
br/idea/download/
IntelliJ IDEA 
Community
Gratuito Não Não
https://www.
jetbrains.com/pt-
br/idea/download/
Eclipse IDE for 
Java Developers
Gratuito Não Não
https://www.
eclipse.org/
downloads/
packages/
Eclipse IDE for 
Enterprise Java 
Developers
Gratuito Sim Sim
https://www.
eclipse.org/
downloads/
packages/
Fonte: Elaborado pelo autor.
Para nossas explanações, vamos utilizar o Eclipse IDE for Enterprise 
Java Developers por apresentar o melhor custo-benefício, já que atende 
desde a codificação básica até a mais avançada, sem a necessidade da 
aquisição de uma licença para uso. Além disso, o Eclipse pode ser instalado 
nos principais sistemas operacionais (Microsoft Windows, Linux e macOS).
linkers: são programas dentro 
da IDE que ligam o código-fonte 
produzido aos diversos arquivos 
necessários para que a compila-
ção seja completa. Por exemplo: 
um código-fonte em Java usa 
uma biblioteca específica; para 
compilar corretamente, o linker 
envia de modo simultâneo 
o código-fonte criado e a 
biblioteca específica para serem 
compilados pela JDK.
Glossário
debugger: é uma funcio-
nalidade presente nas IDEs 
que permite ao programador 
acompanhar, em tempo real, a 
sequência lógica de uma funcio-
nalidade e verificar quais são os 
valores das variáveis utilizados 
por aquele trecho de código. 
Com o debugger, o programador 
consegue validar se o código 
apresenta o comportamento 
esperado.
Glossário
Java: introdução e conceitos básicos 35
Para instalar o Eclipse, acesse o site https://www.eclipse.org/down-
loads/ e opte por “Download 64 bits”. Nos sistemas operacionais Linux 
e macOS será feito o download de um arquivo compactado com ex-
tensão .tar.gz. Descompacte-o em uma pasta e clique duas vezes no 
arquivo eclipse-inst, então aguarde o carregamento da próxima tela. 
No sistema operacional Microsoft Windows, por sua vez, será feito o 
download de um arquivo executável com extensão .exe, geralmente 
chamado de eclipse-inst-win64.exe. Clique duas vezes nesse arquivo e 
aguarde o carregamento da próxima tela.
Após o carregamento do instalador do Eclipse, selecione a opção 
"Eclipse IDE for Enterprise Java Developers".
Figura 7
Seleção da opção "Eclipse IDE for Enterprise Java Developers"
Fonte: Elaborada pelo autor.
Na sequência será apresentada a tela para você configurar três itens:
 • Qual versão do Eclipse deseja instalar (campo "Product Version").
 • Localização do JDK (campo "Java 1.8+ VM").
 • Endereço no disco onde ficará o Eclipse (campo "Installation Folder").
Para esse tutorial, usamos a versão 2020-06 do Eclipse e uma versão 
igual ou superior ao JDK 8. Uma dica importante é criar uma pasta chama-
da java (em minúsculo) num diretório bem acessível. No Linux, sugerimos 
36 Laboratório de Programação I
criar no /home/java. No Windows, costumamos criar o C:/java/. A seguir, 
apresentamos as configurações para ambos os sistemas operacionais.
Figura 8
Configurações para Linux utilizando JDK 11
Fonte: Elaborada pelo autor.
Figura 9
Configurações para Windows utilizando JDK 8
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 37
Ao clicar em “INSTALL”, será realizado o procedimento de instalação 
na pasta definida no campo “Installation Folder”. Ao finalizar a instala-
ção, clique no ícone do Eclipse que foi adicionado na área de trabalho. 
Após o carregamento, será apresentada a tela a seguir para você sina-
lizar onde deseja salvar os dados do workspace 3 :
Figura 10
Elegendo o workspace no Linux
Fonte: Elaborada pelo autor.
Figura 11
Elegendo o workspace no Windows
Fonte: Elaborada pelo autor.
Após a definição do local do workspace, clique no botão “Launch” e 
será apresentada a seguinte tela:
Representa um espaço de traba-
lho no qual ficarão armazenadas 
as configurações dos projetos de-
senvolvidos na IDE. Você pode ter 
vários workspaces numa mesma 
IDE e um workspace pode ter um 
ou muitos projetos Java.
3
38 Laboratório de Programação I
Figura12
Tela de boas-vindas do Eclipse
Fonte: Elaborada pelo autor.
O Eclipse possui a funcionalidade de perspectivas que permite uma 
visão particular para um propósito específico. Por exemplo, caso o in-
teresse seja desenvolver um código para a internet, é possível ter uma 
perspectiva web. Caso seja acessar o banco de dados pelo Eclipse, é 
possível usar uma perspectiva específica.
Por padrão, o Eclipse IDE for Enterprise Java Developers sugere o 
uso da perspectiva Java EE, mas, para esse tutorial, utilizaremos algo 
mais leve, por isso mudaremos para a perspectiva Java. Acesse o menu 
superior "Window" → "Perspective" → "Open Perspective" → "Java":
Para que essa tela de apresen-
tação do Eclipse não seja mais 
exibida, clique no X presente na 
aba “Welcome”.
Curiosidade
Java: introdução e conceitos básicos 39
Figura 13
Mudando a perspectiva
Fonte: Elaborada pelo autor.
Dada essa mudança, novos espaços na IDE serão apresentados. 
Nesse momento, não precisaremos das opções “Task List” e “Outline”. 
Clique no X dessas abas para que sejam fechadas.
A aparência do seu Eclipse deve ter ficado semelhante à imagem a 
seguir:
Figura 14
 IDE Eclipse para ser utilizada
Fonte: Elaborada pelo autor.
40 Laboratório de Programação I
Fizemos essas alterações para que você consiga ter mais espaço 
para ler o código-fonte Java que será desenvolvido e ter acesso direto 
às abas mais utilizadas. Agora com a IDE configurada, começaremos a 
criar nossos programas em Java a partir da próxima seção.
2.5 Criando e executando um código em Java
Vídeo Com a IDE configurada, é chegado o momento de criarmos o nosso 
primeiro código-fonte em Java e, consequentemente, termos o nosso 
primeiro programa Java. Para isso, acesse o menu "File" → "New" → 
"Java Project": 
Figura 15
Criando um projeto Java
Fonte: Elaborada pelo autor.
No campo “Project name”, digite "PrimeiroProjeto". Não insira espa-
ço em branco ou acentos e tente digitar conforme sugerido neste livro 
(com as letras P em maiúsculo). As demais opções da tela não precisam 
ser alteradas. Confira na imagem a seguir como devem ficar as confi-
gurações do projeto:
Java: introdução e conceitos básicos 41
Figura 16
Iniciando um projeto Java
Fonte: Elaborada pelo autor.
Clique no botão “Finish” para que o projeto seja criado. Caso você 
esteja utilizando um JDK superior ao 8, os valores do agrupamento JRE 
estarão diferentes, mas não são necessárias alterações manuais. Siga 
com os valores sugeridos pelo próprio Eclipse.
Para criar o seu primeiro arquivo Java, clique com o botão direito na 
pasta src, que está localizada na lateral esquerda do Eclipse:
Figura 17
Pasta src
Fonte: Elaborada pelo autor.
Selecione, então, a opção "New" → "Class", conforme a seguir:
42 Laboratório de Programação I
Figura 18
Criando um novo arquivo
Fonte: Elaborada pelo autor.
Na tela que foi aberta, no campo “Name”, escreva "PrimeiraClasse" 
(não digite espaços em branco ou acentos e tente digitar conforme su-
gerido neste livro, com as letras P e C maiúsculas). As demais proprie-
dades não precisam ser alteradas e você pode clicar no botão “Finish”.
Java: introdução e conceitos básicos 43
Figura 19
Detalhes do novo arquivo
Fonte: Elaborada pelo autor.
Você deve ter percebido que um arquivo chamado PrimeiraClasse.
java foi criado dentro da pasta src, na lateral esquerda do Eclipse, e ele 
também foi aberto automaticamente em um espaço específico para a 
inserção e alteração de código-fonte. Dentro do arquivo "PrimeiraClas-
se.java", digite a palavra main.
Figura 20
Programando em Java (a)
Fonte: Elaborada pelo autor.
44 Laboratório de Programação I
Perceba que o texto digitado ficou com um grifado em vermelho, 
ou seja, ele possui um erro. Fique tranquilo, ainda não terminamos 
de programar.
Coloque o cursor no final da palavra main e pressione CTRL + BARRA 
DE ESPAÇO. Então, será apresentada a seguinte caixa de sugestão:
Figura 21
Programando em Java (b)
Fonte: Elaborada pelo autor.
Selecione a opção “main” na caixa de seleção e a IDE irá sugerir um 
novo código-fonte:
Figura 22
O método main
Fonte: Elaborada pelo autor.
Adicione o texto "System.out.println(“Primeiro Programa”);" dentro 
do método main que você acabou de criar. O código-fonte deve ficar 
conforme a seguir.
Figura 23
Escrevendo algo na tela
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 45
Estamos próximos de executar todas as fases do nosso primeiro 
programa Java, ou seja, de compilá-lo e enviá-lo como bytecode para 
que a JVM o interprete. Antes, no entanto, perceba que existe um sinal 
de asterisco (*) na aba "PrimeiraClasse.java":
Figura 24
Salvando a classe PrimeiraClasse.java
Fonte: Elaborada pelo autor.
Esse asterisco sinaliza que o arquivo Java ainda não foi salvo em 
disco (Fase 1). Para realizar o salvamento, pressione as teclas CTRL + S 
ou clique no ícone representado por um disquete ( ).
Agora é o momento de percorrermos as Fases 2 a 5, vendo o nos-
so programa Java funcionando. Para isso, clique no botão de execução 
( ) de cor verde disponível no topo da IDE. Outra alternativa é clicar 
no menu superior "Run" → "Run As" → "Java Application":
Figura 25
Botão de executar
Fonte: Elaborada pelo autor.
Se estiver tudo certo, será exibida uma nova aba no canto inferior 
do Eclipse chamada Console. Nessa aba será apresentada a frase “Pri-
meiro Programa”.
Figura 26
Resultado da execução do programa Java
Fonte: Elaborada pelo autor.
46 Laboratório de Programação I
Pois bem, esse é o seu primeiro programa em Java. Você utilizou 
uma classe chamada PrimeiraClasse.java e criou um método chamado 
main. Esse método é especial no Java, pois o código sempre é executa-
do a partir dele. Dentro desse método, adicionamos um comando do 
Java que escreve um texto (System.out.println). Ao salvarmos o arquivo 
e o executarmos, realizamos todas as fases mencionadas na seção an-
terior. Para verificar o que aconteceu, acesse o gerenciador de arquivos 
do seu sistema operacional e localize o workspace que você informou 
ao Eclipse quando iniciou esse programa.
Figura 27
Estrutura de pastas de um projeto Java
Fonte: Elaborada pelo autor.
A Figura 27 representa a visualização do sistema operacional Win-
dows. Perceba que existem as pastas src e bin. A pasta src contém o ar-
quivo .java (Fase 1) e a pasta bin contém os arquivos bytecodes (.class) 
gerados na Fase 2.
2.6 Convenções da linguagem Java
Vídeo A linguagem Java possui uma convenção mundial que deve ser se-
guida. Esse padrão faz com que um código-fonte possa ser entendido 
facilmente por qualquer outro programador Java no mundo. Por isso, 
nunca use acentos, caracteres especiais e espaços em branco em nome 
de projetos e arquivos. Vamos ver na prática as convenções do Java. 
Crie um projeto clicando no menu "File" → "New" → "Java project". No 
campo “Project Name”, adicione a palavra Convencoes, sem acentos e 
com a primeira letra maiúscula (C).
Java: introdução e conceitos básicos 47
Figura 28
Novo projeto em Java
Fonte: Elaborada pelo autor.
Java segue a convenção denominada CamelCase. Nela, as palavras 
são iniciadas com letras maiúsculas, unidas sem espaços e sem acen-
tos, por exemplo: NomeDoProjeto, NomeParaUmaClasse, NotaFiscal-
DeServico. Utilizamos CamelCase para o nome do nosso novo projeto 
Java (Convencoes) e devemos usar esse padrão para os nomes de pro-
jetos e classes. Devemos utilizar CamelCase também no nome dos 
métodos, mas com uma pequena alteração: deixar a primeira letra mi-
núscula. Vamos ver essa diferença na sequência.
Dentro do Java, temos uma funcionalidade de agrupamento de 
classes chamado package (pacote, em tradução livre). Ele serve para 
separar os arquivos .java por contextos e deixá-los organizados para 
facilitar a manutenção futura do código-fonte. Os pacotes devem ser 
sempre nomeados em minúsculo e separados por pontos. Nunca use 
acentos ou underline (_).
Quando criados, os pacotes devem seguir a regra de leitura contrá-
ria dowebsite da empresa. Se o site da empresa dona do código-fonte 
for www.meusite.com.br, o nome do pacote deve ficar br.com.meusite. 
Para validar o entendimento, vejamos outros exemplos:
48 Laboratório de Programação I
 • www.brasil.gov.br → o nome do pacote deve ficar br.gov.brasil.
 • www.canal.tv.br → o nome do pacote deve ficar br.tv.canal.
 • www.universidade.br → o nome do pacote deve ficar 
br.universidade.
 • www.site.com → o nome do pacote deve ficar com.site.
Para criar um pacote, clique com o botão direito na pasta src e sele-
cione a opção "New" → "Package", conforme apresentado a seguir.
Figura 29
Criando pacotes
Fonte: Elaborada pelo autor.
Na nova tela (Figura 30), clique no campo “Name” e digite o nome do 
pacote "br.com.meusite", seguindo a convenção já apresentada neste 
tutorial. As demais opções não precisam ser alteradas. Clique no botão 
“Finish” para encerrar a criação de pacotes.
Figura 30
Criando pacote "br.com.meusite"
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 49
Agora com o pacote "br.com.meusite" criado, clique com o botão 
direito nele e selecione a opção "New" → "Class".
Figura 31
Criando uma nova classe (a)
Fonte: Elaborada pelo autor.
Vamos criar um arquivo chamado MinhaPrimeiraClasse. Preste aten-
ção na convenção CamelCase.
Figura 32
Criando uma nova classe (b)
Fonte: Elaborada pelo autor.
50 Laboratório de Programação I
Clique no botão “Finish” e adicione o código-fonte a seguir dentro 
dessa classe:
public void meuPrimeiroMetodo() {
}
O resultado dessas alterações deve ser um código-fonte semelhan-
te ao da figura a seguir:
Figura 33
Classe MinhaPrimeiraClasse
Fonte: Elaborada pelo autor.
Outra convenção importante é separar o código-fonte funcional do 
código-fonte de testes, que são códigos que validam o correto funcio-
namento do algoritmo desenvolvido.
No nosso projeto, já existe uma pasta chamada src. Todo projeto Java 
precisa ter essa pasta, na qual devem ficar os arquivos contendo o códi-
go-fonte com a solução de um problema. É aconselhável ter uma nova 
pasta de códigos chamada test. Para criá-la, clique com o botão direito 
no projeto "Convencoes" e selecione a opção "New" → "Source Folder".
Figura 34
Criando um source folder
Fonte: Elaborada pelo autor.
Java: introdução e conceitos básicos 51
Na nova tela, no campo “Folder name”, digite “test” (minúsculo e em 
inglês, ou seja, sem a letra E no final).
Figura 35
Criando o source folder test
Fonte: Elaborada pelo autor.
Clique em “Finish”. A sua estrutura do projeto deverá ficar seme-
lhante à Figura 36:
Figura 36
Estrutura de pastas do projeto Java
Fonte: Elaborada pelo autor.
Dentro do novo source folder, você terá a mesma estrutura de paco-
tes que existe no src. Por isso, crie o pacote "br.com.meusite" no source 
folder "test".
52 Laboratório de Programação I
Após a criação do pacote, adicione uma classe nele. O nome des-
sa classe deve ser semelhante à existente no source folder "src", 
mas com a inclusão da palavra “Test” no final do nome da classe 
(MinhaPrimeiraClasseTest).
Agora, adicione o código-fonte a seguir dentro dessa classe de teste:
public void meuPrimeiroMetodoTest() {
}
O resultado dessas alterações deve ser a classe MinhaPrimeira-
ClasseTest.java, conforme a figura a seguir:
Figura 37
Classe MinhaPrimeiraClasseTest
Fonte: Elaborada pelo autor.
A estrutura de arquivos deve ser semelhante à Figura 38:
Figura 38
Estrutura de pastas e arquivos do projeto "Convencoes"
Fonte: Elaborada pelo autor.
Essas convenções deverão ser seguidas em todos os projetos de-
senvolvidos na linguagem Java. Seguir as convenções demonstra pro-
fissionalismo e reduz a complexidade de entendimento do projeto por 
um novo desenvolvedor que nele atue.
Java: introdução e conceitos básicos 53
CONSIDERAÇÕES FINAIS
Estamos acostumados a utilizar diversos aparelhos e objetos no nosso 
dia a dia sem, de fato, entendermos a fundo como funcionam. É assim 
com os carros e smartphones. Como criaremos programas em Java, preci-
saremos nos aprofundar nos conceitos, nas siglas e convenções mundiais 
dessa linguagem. Neste capítulo, conhecemos a história do Java, a dife-
rença entre JDK, JVM e JRE, as principais IDEs e criamos o nosso primeiro 
programa. Entender esses temas ajudará em um maior aproveitamento 
da linguagem Java.
ATIVIDADES
1. Descreva o que foi o Green Project.
2. É correto afirmar que todo Java development kit (JDK) possui um Java 
runtime environment (JRE)? Justifique sua resposta.
3. O Eclipse é única opção gratuita entre as IDEs utilizadas para programar 
Java? Justifique sua resposta.
54 Laboratório de Programação I
3
Notação condicional 
e estruturas de 
repetições no Java
Após aprender sobre a história da linguagem de programação 
Java e sobre a IDE Eclipse, vamos criar o nosso projeto, que consis-
te na criação de diversos algoritmos para cálculos matemáticos e 
conversões numéricas.
Este projeto poderá parecer simples, mas com os aprendizados 
que teremos neste capítulo, ele servirá como um excelente labora-
tório para a prática da programação Java. Animado para aprofun-
dar o conhecimento em Java?
3.1 Tipos, variáveis e operadores lógicos
Vídeo Nesse projeto, não utilizaremos uma interface gráfica refinada; va-
mos focar a interação com o usuário com base em um console para 
inserção de dados, presente na IDE Eclipse ou via MS-DOS (caso utilize 
Microsoft Windows) ou terminal de comando (caso utilize Linux).
Para avançar nos tópicos deste capítulo, é preciso criar primeiro um 
novo projeto Java juntamente com a classe que será utilizada para a 
execução do projeto. Para isso, realize os seguintes passos:
1. Inicie a IDE Eclipse (caso esteja com esse software fechado).
2. Clique no menu “File” e escolha a opção “New” → “Java Project”.
3. Crie um projeto chamado CalculosEConversoes.
4. Pressione o botão “Finish” para finalizar a criação do projeto.
Com o projeto criado, faça a organização interna realizando os se-
guintes passos:
Notação condicional e estruturas de repetições no Java 55
1. Crie um source folder chamado test. Para isso, clique com o botão 
direito do mouse no nome do projeto e selecione a opção “New” 
→ “Source Folder”.
2. Digite “test” no campo “Folder name”. É importante que esse 
nome seja em minúsculo e sem o acréscimo da letra E no final da 
palavra, ou seja, não é teste e sim test.
Seguindo com a organização do projeto, a próxima etapa é a criação 
dos pacotes. Deixá-los mapeados irá ajudar o andamento da produção 
do programa. Serão três pacotes dentro do source folder src e dois pa-
cotes dentro do source folder test. Para a criação deles, siga a sequência 
de passos a seguir:
1. Clique com o botão direito no source folder src e selecione a 
opção “New” → “Package”.
2. Digite o nome do pacote “br.com.projeto.principal”.
3. Clique no botão “Finish” para criar efetivamente o pacote.
4. Crie um novo pacote, mas com o nome “br.com.projeto.calculos”.
5. Crie um novo pacote, mas com o nome “br.com.projeto.conversoes”.
6. Agora é o momento de criar os pacotes do source folder test. 
Clique com o botão direito no source folder test e selecione a 
opção “New” → “Package”.
7. Digite o nome do pacote “br.com.projeto.calculos”.
8. Clique no botão “Finish” para criar efetivamente o pacote.
9. Crie um novo pacote no source folder test, mas com o nome 
“br.com.projeto.conversoes”.
A figura a seguir mostra como deve ficar a estrutura interna do projeto:
Figura 1
Estrutura interna do projeto “CalculosEConversoes”
Fonte: Elaborada pelo autor.
56 Laboratório de Programação I
Para finalizar a configuração inicial, é preciso criar um arquivo que 
terá o método de execução da chamada, ou seja, o método main. Para 
isso, realize a sequência de passos a seguir:
1. Clique com o botão direito do mouse no pacote “br.com.projeto.
principal”, que está presente no source folder src.
2. Selecione a opção “New” → “Class”.
3. No campo “Name”, digite “Executadora”.
4. Clique nobotão “Finish” para concluir a criação do arquivo. 
Automaticamente será aberto o arquivo “Executadora.java” para 
ser editado.
5. Na linha abaixo do texto “public class Executadora {“, você precisará 
digitar um comando. Digite “main” e aperte CTRL + BARRA DE 
ESPAÇO e selecione a opção “main - main Method”:
Figura 2
Inserindo comando
Fonte: Elaborada pelo autor.
6. Para deixar o código no formato padronizado do Java, clique no 
menu “Source” → “Format”:
Figura 3
Padronizando o código
Fonte: Elaborada pelo autor.
Notação condicional e estruturas de repetições no Java 57
Agora que o projeto foi criado, vamos partir para a sequência de novos 
conteúdos na linguagem Java com base em um projeto real de software.
Todo software precisa de interação com o usuário final, e no 
nosso projeto vamos programar essa interação dentro do arquivo 
“Executadora.java”. Utilizaremos a classe Scanner para esse trabalho. 
Essa classe existe dentro do Java development kit (JDK) e pode ser usa-
da em qualquer projeto que precise capturar algo digitado pelo usuário 
no teclado. O Java possui diversas outras classes de apoio e, ao longo 
deste livro, vamos conhecer algumas delas. Se a classe Scanner faz 
a leitura do teclado, o comando System.out.println() faz a escrita de 
algo na tela para o usuário. Esses dois comandos farão parte de todo 
o nosso projeto.
Vamos adicionar um breve texto orientando o usuário a realizar 
uma ação e, em seguida, vamos capturar o que o usuário digitou do 
teclado. Para isso, insira os seguintes códigos dentro do método main:
 • System.out.println(“Digite um número:”);
 • Scanner ler = new Scanner(System.in);
 • Integer valorInteiro = ler.nextInt();
Figura 4
Tela dao arquivo “Executadora.java” após inserção dos códigos
Fonte: Elaborada pelo autor.
Você deve ter percebido que a palavra Scanner ficou com um 
sublinhado vermelho. Isso quer dizer que temos um erro na codifica-
ção. A IDE Eclipse é inteligente para detectar possíveis erros na pro-
gramação Java, bem como para sugerir como corrigir esse erro. Toda 
vez que existir um sublinhado em vermelho, pare o mouse em cima 
do sublinhado e a IDE Eclipse irá sugerir uma correção, como mostra 
a figura a seguir.
58 Laboratório de Programação I
Figura 5
Sugestões de correção
Fonte: Elaborada pelo autor.
O erro consiste na ausência da declaração de importação da clas-
se Scanner. Lembra que foi mencionado que essa classe está dentro 
do JDK? Precisamos sinalizar ao nosso programa onde está essa clas-
se. Selecione a opção “Import ‘Scanner’ (java.util)”. Tome cuidado, pois 
existem diversas classes chamadas Scanner, porém queremos utilizar a 
java.util.Scanner (que é a do JDK e que faz leituras de teclado). Ao se-
lecionar essa opção, você vai perceber que foi adicionado um texto no 
seu código-fonte. Esse novo código foi adicionado logo nas primeiras 
linhas do projeto:
import java.util.Scanner;
Figura 6
Novo código no projeto
Fonte: Elaborada pelo autor.
Para saber mais sobre a 
classe Scanner e como 
exibir informações em 
tela, leia o texto Entrada 
de Dados: Classe Scanner, 
publicado pela Platafor-
ma DevMedia. O texto 
mostra comandos de 
entrada usando a classe 
Scanner e comandos de 
saída usando o método 
printf.
Disponível em: https://www.
devmedia.com.br/entrada-de-
dados-classe-scanner/21366. 
Acesso em: 19 out. 2020.
Saiba mais
https://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366
https://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366
https://www.devmedia.com.br/entrada-de-dados-classe-scanner/21366
Notação condicional e estruturas de repetições no Java 59
Além da escrita na tela (linha 8) e do uso da classe Scanner (linha 9), 
temos a inclusão de uma variável chamada valorInteiro na linha 10. Uma 
variável é um artifício presente na maioria das linguagens de programa-
ção e serve para armazenar uma informação de modo temporário. No 
nosso caso, a variável valorInteiro irá armazenar um valor numérico di-
gitado pelo usuário para posteriormente usá-lo.
Java é considerada uma linguagem fortemente tipada porque toda 
variável precisa ter a definição de qual tipo é. Os tipos em Java podem 
ser categorizados em primitivos e não primitivos; a diferença entre eles 
é que os primitivos são os tipos básicos que todo computador consegue 
interpretar (números inteiros, números decimais, valores booleanos e 
caracteres) e os não primitivos são classes interpretadas pelo compi-
lador Java. A fim de termos mais personalizações desses tipos, foram 
criados objetos encapsulando os tipos primitivos, surgindo assim os 
tipos não primitivos. No Quadro 1, apresentamos os tipos primitivos e 
a correlação deles com os tipos não primitivos.
Quadro 1
Tipos primitivos e não primitivos
Tipo primitivo Descrição Valores suportados Tipo não primitivo
int
Utilizado para números inteiros 
(sem casas decimais).
Entre -2,147,483,648 e 2,147,483,648 Integer
long
Utilizado para números inteiros 
(sem casas decimais).
Entre -9,223,372,036,854,775,808 e 
9,223,372,036,854,775,808
Long
short
Utilizado para números inteiros 
(sem casas decimais).
Entre -32,768 e 32,768 Short
float
Utilizado para números com casas 
decimais.
Trabalha com até 7 dígitos decimais Float
double
Utilizado para números com casas 
decimais.
Trabalha com até 15 dígitos decimais Double
boolean
Utilizado para valores binários (verda-
deiro ou falso).
true ou false Boolean
char
Utilizado para o trabalho com 
caractere unitário (letra). Para um 
conjunto de caracteres (palavra), 
usamos String.
Uma letra ou caractere ASCII String
byte
Utilizado para números inteiros (sem 
casas decimais).
Entre -128 e 127 Byte
Fonte: Elaborado pelo autor.
60 Laboratório de Programação I
Um detalhe importante é lembrarmos que não existem somente 
esses tipos não primitivos. Você pode definir outros tipos não primiti-
vos graças ao paradigma da orientação a objetos. Cada novo arquivo 
Java criado na IDE Eclipse se torna um tipo não primitivo e pode ser 
utilizado em qualquer parte do código-fonte.
Retornando ao nosso código-fonte, precisamos exibir ao usuário o 
que ele digitou. Para isso, insira a linha a seguir:
System.out.println(“O valor digitado foi “ + 
valorInteiro);
Com essa alteração poderemos executar o nosso programa por 
meio dos seguintes passos:
1. Clique no ícone disquete para salvar a alteração na classe 
Executadora.java. Caso não encontre o ícone, clique em “File” 
→ “Save”.
2. Clique no menu “Run” → “Run As” → “Java Application”.
3. Será aberta a aba “Console” do Eclipse solicitando que você digite 
um número. Clique dentro dessa aba para digitar um número e 
pressione ENTER.
4. Será exibido o que foi digitado.
Figura 7
Execução do projeto
Fonte: Elaborada pelo autor.
Para saber mais sobre ti-
pos no Java, acesse o link 
a seguir, que apresenta 
definições e exemplos. 
Disponível em: https://www.
w3schools.com/java/java_data_
types.asp. Acesso em: 19 out. 2020.
Saiba mais
https://www.w3schools.com/java/java_data_types.asp
https://www.w3schools.com/java/java_data_types.asp
https://www.w3schools.com/java/java_data_types.asp
Notação condicional e estruturas de repetições no Java 61
Na figura a seguir, há alguns exemplos de como ler um texto e um 
valor decimal do teclado. Você não precisa implementar esses novos 
códigos, pois eles não serão utilizados no nosso projeto.
Figura 8
Exemplos de como ler um texto e um valor decimal do teclado
Fonte: Elaborada pelo autor.
Além dos tipos, é importante conhecermos os operadores definidos 
para a linguagem Java, apresentados no Quadro 2.
Quadro 2
Operadores em Java
Símbolo do operador Descrição Exemplo
+ Adição/soma variavel1 + variavel2
- Subtração/redução variavel1 - variavel2
* Multiplicação variavel1 * variavel2
/ Divisão variavel1 / variavel2
% Resto da divisão variavel1 % variavel2
++
Incremento em 1 posição do valor 
numérico atual
++variavel1
--
Decréscimo em 1 posição do valor 
numérico atual
--variavel1
Fonte: Elaborado pelo autor.62 Laboratório de Programação I
Agora vamos adicionar esses operadores em nosso código-fonte. 
Para isso, realize os seguintes passos:
1. Crie um novo arquivo Java chamado Calculos dentro do pacote 
“br.com.projeto.calculos” clicando com o botão direito no pacote 
e selecionando a opção “New” → “Class”.
2. No campo “Name” digite “Calculos”.
3. Pressione o botão “Finish” para concluir.
4. Dentro do arquivo “Calculos” insira os códigos a seguir:
<code>
public Double somarDoisNumeros(Double valor1, Double valor2) {
 return valor1 + valor2;
}
public Double subtrairDoisNumeros(Double valor1, Double valor2) 
{
 return valor1 - valor2;
}
public Double multiplicarDoisNumeros(Double valor1, Double 
valor2) {
 return valor1 * valor2;
}
public Double dividirDoisNumeros(Double valor1, Double valor2) 
{
 return valor1 / valor2;
}
public Double restoDaDivisaoDoisNumeros(Double valor1, Double 
valor2) {
 return valor1 % valor2;
}
public Double acrescentarUmNumero(Double valor) {
 return ++valor;
}
public Double reduzirUmNumero(Double valor) {
 return --valor;
}
</code>
Notação condicional e estruturas de repetições no Java 63
Para que esse novo código-fonte seja utilizado, precisamos chamar 
o arquivo “Calculos.java” no arquivo “Executadora.java”, dentro do mé-
todo main. Usaremos o seguinte código:
Calculos calculos = new Calculos();
Esse código está criando uma variável chamada calculos (com letra 
minúscula) e do tipo Calculos. É uma convenção darmos um mesmo 
nome do tipo não primitivo que está sendo usado, mas tudo em minús-
culo. Contudo, não haveria problema se o código fosse Calculos calc = 
new Calculos(), pois tudo iria continuar funcionando. Por convenção, 
deixaremos Calculos calculos = new Calculos();.
Sugerimos que apague o código anteriormente desenvolvido para 
facilitar o seu entendimento e copie o código a seguir para que você 
perceba como estão sendo utilizadas todas as funções de soma, 
subtração, multiplicação, resto e divisão, além da adição de valor e de-
créscimo de valor.
<code> 
 Calculos calculos = new Calculos();
 Scanner ler = new Scanner(System.in);
 System.out.println(“Digite o primeiro valor decimal:”);
 Double valor1 = ler.nextDouble();
 System.out.println(“Digite o segundo valor decimal:”);
 Double valor2 = ler.nextDouble();
 Double resultado = calculos.somarDoisNumeros(valor1, 
valor2);
 System.out.println(“Resultado da soma: “ + resultado);
 
 resultado = calculos.subtrairDoisNumeros(valor1, valor2);
 System.out.println(“Resultado da subtração: “ + 
resultado);
 
 resultado = calculos.multiplicarDoisNumeros(valor1, 
valor2);
(Continua)
64 Laboratório de Programação I
 System.out.println(“Resultado da multiplicação: “ + 
resultado);
 
 resultado = calculos.dividirDoisNumeros(valor1, valor2);
 System.out.println(“Resultado da divisão: “ + resultado);
 resultado = calculos.restoDaDivisaoDoisNumeros(valor1, 
valor2);
 System.out.println(“Resultado do resto da divisão: “ + 
resultado);
 
 resultado = calculos.acrescentarUmNumero(valor1);
 System.out.println(“Acrescentando uma posição ao primeiro 
valor digitado: “ + resultado);
 
 resultado = calculos.reduzirUmNumero(valor1);
 System.out.println(“Reduzindo uma posição ao primeiro 
valor digitado: “ + resultado);
</code>
Após a inclusão desse código-fonte, vamos executá-lo para verificar 
se as alterações foram implementadas de maneira correta. Siga a se-
quência de passos a seguir:
1. Clique no ícone de diversos disquetes para salvar todas as 
alterações. Caso não encontre o ícone, clique em “File” → “Save All”.
2. Clique no menu “Run” → “Run As” → “Java Application”.
3. Será aberta a aba “Console” do Eclipse, solicitando que você digite 
um número inteiro ou decimal. Clique dentro dessa aba para 
digitar um número e pressione ENTER.
4. Será solicitado que digite um segundo valor numérico e pressione 
ENTER.
5. Será exibido um resumo dos cálculos realizados.
Com esses aprendizados sobre tipos e operadores na linguagem 
Java, conseguimos fazer diversos cálculos matemáticos. Utilize sua 
criatividade e curiosidade e implemente novas fórmulas no arquivo 
“Calculos.java” como forma de fixar o conhecimento desses temas.
Para saber mais sobre 
operadores, acesse o link 
a seguir, que apresenta 
definições e exemplos. 
Disponível em: https://
www.w3schools.com/java/
java_operators.asp. Acesso em: 19 
out. 2020.
Saiba mais
https://www.w3schools.com/java/java_operators.asp
https://www.w3schools.com/java/java_operators.asp
https://www.w3schools.com/java/java_operators.asp
Notação condicional e estruturas de repetições no Java 65
3.2 Notação condicional em Java
Vídeo Nesta seção mostraremos como realizar processos condicionais na 
linguagem Java. No Quadro 3, você pode ver quais são os comandos e 
caracteres usados para validação.
Quadro 3
Condicionais em Java
Comando Descrição Exemplo
if Utilizado para começar uma condição em Java.
if (condicao1) {
}
else
Utilizado para executar um bloco de código caso a 
condicional inicial seja falsa.
if (condicao1) {
} else {
}
else if
Semelhante à cláusula else, mas realizará uma 
nova validação (if) antes de executar o próximo 
bloco de código.
if (condicao1) {
} else if (condicao2) {
} else {
}
{
Utilizado para iniciar um bloco de código após 
uma validação do tipo if ou else.
}
Utilizado para finalizar um bloco de código após 
uma validação do tipo if ou else.
&&
Semelhante à porta lógica AND. Utilizado em con-
dicionais com duas ou mais validações. Com &&, 
todas as condições têm que ser verdadeiras para 
que o bloco de código seja executado.
if (condicao1 && condicao2) {
}
||
Semelhante à porta lógica OR. Utilizado em condi-
cionais com duas ou mais validações. Com ||, se 
pelo menos uma condição for verdadeira, o bloco 
de código é executado.
if (condicao1 || condicao2) {
}
==
Significa igual. Utilizado para validações dentro 
das condicionais.
if (condicao1 == 90) {
}
!=
Significa diferente. Utilizado para validações den-
tro das condicionais.
if (condicao1 != 90) {
}
>
Significa maior. Utilizado para validações dentro 
das condicionais.
if (condicao1 > 90) {
}
<
Significa menor. Utilizado para validações dentro 
das condicionais.
if (condicao1 < 90) {
}
>=
Significa maior ou igual. Utilizado para validações 
dentro das condicionais.
if (condicao1 >= 90) {
}
<=
Significa menor ou igual. Utilizado para validações 
dentro das condicionais.
if (condicao1 <= 90) {
}
Fonte: Elaborado pelo autor.
66 Laboratório de Programação I
Para exercitar as condicionais, vamos adicionar novos métodos 
no arquivo “Calculos.java”. No código a seguir, vamos utilizar os co-
mandos if, else, else if, > e < . Siga os seguintes passos para inserir 
novos códigos:
1. Abra o arquivo “Calculos.java”.
2. Coloque o cursor logo depois do método reduzirUmNumero.
3. Adicione o código a seguir:
<code>
public void valorMaiorOuMenor(Double valor1, Double valor2) {
 if (valor1 > valor2) {
 System.out.println(“O valor “ + valor1 + “ é 
maior que “ + valor2 );
 } else if (valor1 < valor2) {
 System.out.println(“O valor “ + valor1 + “ é 
menor que “ + valor2 );
 } else {
 System.out.println(“O valor “ + valor1 + “ é 
igual a “ + valor2 );
 }
 }
</code>
Para executar esses métodos, abra o arquivo “Executadora.java” e 
adicione o comando calculos.valorMaiorOuMenor(valor1, valor2);.
Agora vamos exercitar os comandos de igualdade (==), condicionais 
com portas lógicas AND (&&) e OR (||). Siga os seguintes passos para 
inserir novos códigos:
1. Abra o arquivo “Calculos.java”.
2. Coloque o cursor logo depois do método valorMaiorOuMenor.
3. Adicione o código a seguir:
<code>
public void valorMultiploDe2e4(Double valor1) {
 if (valor1 % 2 == 0 && valor1 % 4 == 0) {
 System.out.println(“O valor “ + valor1 + “ é 
múltiplo de 2 e 4 simultaneamente”);
 } else {
 System.out.println(“O valor “ + valor1 + “ não é 
múltiplo de 2 e 4 simultaneamente”);
(Continua)
Notação condicional e estruturas de repetiçõesno Java 67
 }
}
public void valorMultiploDe5ou7(Double valor1) {
 if (valor1 % 5 == 0 || valor1 % 7 == 0) {
 System.out.println(“O valor “ + valor1 + “ é 
múltiplo de 5 ou 7”);
 } else {
 System.out.println(“O valor “ + valor1 + “ não é 
múltiplo de 5 e nem múltiplo de 7”);
 }
}
</code>
Para executar esses métodos, abra o arquivo “Executadora.java” e 
adicione os comandos:
 • calculos.valorMultiploDe2e4(valor1);
 • calculos.valorMultiploDe5ou7(valor1);
Com esses aprendizados sobre condicionais na linguagem Java, con-
seguimos personalizar os cálculos matemáticos. Utilize sua criatividade 
e curiosidade e implemente novas fórmulas no arquivo “Calculos.java” 
como forma de fixar o conhecimento desses temas.
3.3 Estruturas de repetição com Java
Vídeo Nesta seção mostraremos como utilizar as estruturas de repetição 
na linguagem Java. No Quadro 4, você poderá ver quais são as estrutu-
ras de repetição disponíveis para uso e também as palavras reservadas 
que auxiliam no processo de repetição.
Quadro 4
Estruturas de repetição em Java
Comando Descrição Exemplo
while
Utilizado para repetir um bloco de código en-
quanto a condição permanecer válida.
while (condicao) {
 //bloco de codigo
}
do / while
Executa pelo menos uma vez o bloco de código 
e posteriormente realiza a validação. Caso o re-
sultado da validação seja verdadeiro, o bloco de 
código é executado novamente.
do {
 //bloco de codigo
} while (condicao);
(Continua)
68 Laboratório de Programação I
Comando Descrição Exemplo
for
Utilizado para repetir um bloco de código en-
quanto a condição permanecer válida.
for (int i = 0; i < 10; i++) {
 //bloco de codigo
}
switch
Utilizado para a execução de diversos blocos de 
código com base em uma expressão definida.
switch(expressao) {
 case valor1:
 //bloco de codigo
 break;
 case valor2:
 //bloco de codigo
 break;
 default:
| //bloco de codigo
}
break
Comando utilizado para parar a execução do 
bloco de repetição.
continue
Comando utilizado para dar sequência à execu-
ção do bloco de repetição.
default
Comando utilizado para iniciar um bloco de có-
digo caso nenhuma condição seja atendida no 
comando switch.
Fonte: Elaborado pelo autor.
Para exercitar as estruturas de repetição, vamos adicionar novos 
métodos no arquivo “Calculos.java”. No código a seguir, vamos utilizar 
as estruturas de repetição while, do while, for e switch. Siga os se-
guintes passos para inserir novos códigos:
1. Abra o arquivo “Calculos.java”.
2. Coloque o cursor logo depois do método valorMultiploDe5ou7.
3. Adicione o código a seguir:
<code>
public void exemploWhile() {
 Integer valor = 5;
 while (valor < 10) {
 System.out.println(“Valor atual da repetição 
usando while: “ + valor);
 valor++;
 }
}
(Continua)
Notação condicional e estruturas de repetições no Java 69
public void exemploDoWhile() {
 Integer valor = 5;
 do {
 System.out.println(“Valor atual da repetição 
usando do while: “ + valor);
 valor++;
 } while (valor < 10);
}
public void exemploFor() {
 for (Integer i = 0; i < 10; i++) {
 System.out.println(“Valor atual da repetição 
usando for: “ + i);
 }
}
public void exemploSwitch(Integer valor) {
 switch (valor) {
 case 1:
 System.out.println(“Opção 1 foi selecionada “);
 break;
 case 2:
 System.out.println(“Opção 2 foi selecionada “);
 break;
 default:
 System.out.println(“Opção diferente de 1 e 2”);
 break;
 }
}
</code>
Para executar esses métodos, abra o arquivo “Executadora.java” e 
adicione os seguintes comandos:
 • calculos.exemploWhile();
 • calculos.exemploDoWhile();
 • calculos.exemploFor();
 • calculos.exemploSwitch(10);
 • calculos.exemploSwitch(2);
70 Laboratório de Programação I
Com esses aprendizados sobre estruturas de repetição na lingua-
gem Java, conseguimos personalizar os cálculos matemáticos. Utilize 
sua criatividade e curiosidade e implemente novas fórmulas no arquivo 
“Calculos.java” como forma de fixar o conhecimento desses temas.
3.4 Palavras reservadas
Vídeo À medida que você cria mais código em Java, vai percebendo que 
algumas palavras não podem ser usadas como nomes de arquivos ou 
variáveis, pois elas são utilizadas pelo JDK. Essas palavras são comu-
mente chamadas de palavras reservadas. Nesta seção listamos as pa-
lavras que estão reservadas e bloqueadas pela linguagem para uso do 
desenvolvedor, conforme o Quadro 5.
Quadro 5
Conjunto de palavras reservadas do Java
Comando Descrição
abstract
Sinaliza que uma classe não pode ser iniciada pelo coman-
do new ou que um método deve ser implementado pelas 
subclasses (classes filhas).
catch Utilizado para tratamento de exceção.
final
Impede que uma classe seja estendida (herança), que um 
método seja sobrescrito (override) e que uma variável seja 
reiniciada.
implements Utilizado para o uso de interfaces (polimorfismo).
private
É um modificador de acesso. Impede que classes e méto-
dos externos acessem aquele trecho de código.
static
Faz com que um método seja invocado em qualquer parte 
do código-fonte sem ter a obrigação de iniciar a classe com 
o comando new.
throw
Utilizado para tratamento de exceção. Retorna uma exce-
ção para o método que foi invocado.
throws
Utilizado para tratamento de exceção. Retorna uma exce-
ção personalizada para o método que foi invocado.
void
Identifica que não haverá retorno no método. Não pode ser 
considerado tipo primitivo ou não primitivo.
finally
Comando utilizado para que um trecho de código seja 
executado após um processo de validação, repetição ou 
exceção.
(Continua)
Notação condicional e estruturas de repetições no Java 71
Comando Descrição
import
Utilizado para criar um vínculo de uma classe com outra, 
caso ambas estejam em pacotes ou projetos diferentes.
protected
É um modificador de acesso que gera visibilidade de classes 
e métodos somente para os demais arquivos do mesmo pa-
cote ou que sejam subclasses (herança).
super
Utilizado para sinalizar o uso de algo na classe pai (super-
classe).
class Identifica o tipo daquele arquivo.
instanceof Utilizado para definir o tipo de um objeto.
new Cria uma instância ou vínculo entre classes e objetos.
public
É um modificador de acesso que permite o acesso a classes 
e métodos independentes de pacotes.
extends
Utilizado para sinalizar a ligação de uma classe com outra, 
por meio do conceito de herança (superclasse e subclasse).
null
É um valor. Não confunda null com vazio, são coisas dife-
rentes.
return
Utilizado para finalizar o processamento de um método, ga-
rantindo o retorno de uma informação.
synchronized
Utilizado no conceito de threads (paralelismo). Com ele, um 
método só pode ser acessado por uma thread de cada vez.
true
Tipo booleano que representa algo verdadeiro (bit 1, liga-
do).
false Tipo booleano que representa algo falso (bit 0, desligado).
case Utilizado na estrutura de condição switch.
default
Utilizado na estrutura de condição switch. Caso não encon-
tre uma opção válida, o comando default é acionado.
interface
Sinaliza que aquele arquivo é do tipo interface e poderá ser 
implementado por diversas classes (polimorfismo).
package Sinaliza qual pacote pertence àquela classe.
this Utilizado para identificar a instância atual do objeto.
try
Utilizado para abrir um bloco de código que pode ter 
uma exceção. Geralmente utilizado com a palavra reser-
vada catch.
Fonte: Elaborado pelo autor.
O Quadro 5 contém informações importantes que você irá fixar 
durante o dia a dia da programação. Ele não está completo, pois 
existem diversas outras palavras reservadas, mas as principais fo-
ram listadas. Entendendo quais são elas, você poderá tirar maior 
proveito da linguagem Java.
Não deixe de acessar 
o link a seguir para 
conhecer as demais 
palavras reservadas e o 
significado delas.
Disponível em: http://www.
linhadecodigo.com.br/artigo/83/
as-52-palavras-reservadas-do-
java.aspx. Acesso em: 19 out. 
2020.
Saiba mais
http://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspxhttp://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspx
http://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspx
http://www.linhadecodigo.com.br/artigo/83/as-52-palavras-reservadas-do-java.aspx
72 Laboratório de Programação I
CONSIDERAÇÕES FINAIS
Neste capítulo, apresentamos diversos comandos da linguagem Java. 
Por meio do conhecimento em tipos primitivos e não primitivos, estrutu-
ras condicionais e estruturas de repetição é possível construir diversos 
algoritmos, resolvendo, assim, problemas recorrentes. A fixação desses 
conceitos acontecerá à medida que você praticar repetidamente a pro-
gramação dos códigos descritos.
ATIVIDADES
1. Crie um método que verifique se um número do tipo Integer digitado 
pelo usuário é par. Caso seja par, exiba a mensagem “é par”.
2. Crie um método que verifique se um número do tipo Integer digitado 
pelo usuário é maior ou igual a 2 e menor ou igual a 25. Caso esteja 
entre 2 e 25, exiba a mensagem “O número digitado está entre 2 e 25”.
3. Crie um laço de repetição for que exiba os números de 1 a 6. A cada 
repetição, apresente a mensagem “Sequência numérica x” (sendo X o 
número da repetição; por exemplo: “Sequência numérica 1”, “Sequência 
numérica 2”, “Sequência numérica 3” e assim sucessivamente, até 
chegar em “Sequência numérica 6”).
Recursos da linguagem Java e a qualidade do código 73
4
Recursos da linguagem Java 
e a qualidade do código
A linguagem de programação Java é composta de diversas clas-
ses utilitárias que nos ajudam com a manipulação de texto, data, 
hora e com o trabalho de conjunto de valores. Boa parte dessas 
classes estão dentro do Java development kit (JDK) e serão utili-
zadas de modo recorrente, ajudando-o com os diversos desafios 
no desenvolvimento de software. Além de avançarmos no conhe-
cimento da linguagem Java, vamos aprender como realizar códigos 
testáveis e de alta qualidade. Após esses aprendizados, você terá 
um conjunto de conhecimento que servirá como uma excelente 
base para seguir na programação Java.
4.1 Classe String
Vídeo Para trabalharmos com textos na linguagem Java, precisamos uti-
lizar a classe String, do pacote “java.lang”. Essa classe faz parte da 
linguagem Java, pois está dentro do JDK e trata os textos como uma 
sequência de caracteres, diferentemente do tipo primitivo char, o qual 
trabalha com um único caractere. A seguir, observe um exemplo de 
como utilizar a classe String:
<code>
 String nomeDaVariavel = “Texto completo”;
</code>
Para exibir um texto, devemos usar o comando System.out.println. 
Veja no exemplo a seguir:
<code>
 String nomeDaVariavel = “Texto completo”;
 System.out.println(nomeDaVariavel);
</code>
74 Laboratório de Programação I
Como String é uma classe, ela possui uma diversidade de coman-
dos de apoio, diferente de um tipo primitivo. Por exemplo, podemos 
tornar todo o texto de uma variável do tipo String em minúsculo ou 
maiúsculo rapidamente, como no exemplo a seguir:
<code>
 String texto = “Olá Mundo”;
 System.out.println(texto.toUpperCase()); // irá 
apresentar “OLÁ MUNDO”
 System.out.println(texto.toLowerCase()); // irá 
apresentar “olá mundo”
</code>
Em alguns momentos, podemos desejar unir duas variáveis do tipo 
String. Esse processo é chamado de concatenação e é realizado pelo 
uso do caractere +. Vamos observar o exemplo a seguir:
<code>
 String primeiroNome = “Ayrton”;
 String ultimoNome = “Senna”;
 System.out.println(primeiroNome + “ “ + ultimoNome);
</code>
Esse código exibirá no console o texto “Ayrton Senna”. Perce-
ba que foi utilizado o símbolo + para concatenar as duas variá-
veis e para concatenar um espaço em branco. Caso o código fosse 
primeiroNome+ultimoNome, iria ser exibido “AyrtonSenna” e isso 
não seria agradável para o usuário.
Mas quando trabalhamos com textos em qualquer linguagem de 
programação, alguns caracteres precisam ter um tratamento especial e 
isso não é diferente com a Java. Os caracteres ‘ (aspa simples), “ (aspas 
duplas) e \ (barra invertida) são especiais. Para utilizar esses caracteres 
na Java, use uma barra invertida antes de cada caractere. 
Como usar o caractere 
 na Java Resultado Descrição Exemplo
\’ ‘ Aspa simples String txt = “pingo d\’gua”;
\” “ Aspas duplas String txt = “Ele disse: \”olá\”.”;
\\ \ Barra invertida String txt = “Exemplo de \\”;
Recursos da linguagem Java e a qualidade do código 75
Alguns comandos especiais podem ser utilizados dentro dos textos 
para executar funções como pular linha ou criar um parágrafo. Na ta-
bela a seguir, encontramos as descrições desses comandos.
Comando Resultado Exemplo
\r Retorno do cursor String txt = “Exemplo de \rtexto”;
\n Nova linha String txt = “Exemplo de \ntexto”;
\t Usar um parágrafo String txt = “Exemplo de \n\ttexto”;
Como pudemos perceber, é possível utilizar mais de um comando 
especial no mesmo texto. No texto “Exemplo de \n\ttexto” estamos pu-
lando uma linha (com o comando \n) e inserindo um parágrafo (com 
o comando \t). Não há um limite para quantos comandos especiais é 
possível utilizar dentro de um texto.
Uma mudança grande que causa confusão em quem está começan-
do com a linguagem Java é realizar comparações de textos. É natural 
pensarmos que para comparar um texto se utiliza o comando ==, mas 
esse comando serve para comparar valores numéricos. Para texto, pre-
cisamos utilizar o comando equals.
Essa mudança acontece, pois String contém um valor, e para com-
parar valores de classes, não pode ser usado ==, e sim equals. Quando 
usamos ==, comparamos um objeto com o outro e um String nunca 
será igual a outro, mesmo que tenha o mesmo texto dentro dele. Por 
isso, para comparar valores entre classes, devemos usar equals. Va-
mos verificar isso em um exemplo:
<code>
 String primeiroTexto = “Exemplo”;
 String segundoTexto = “Exemplo”;
 if (primeiroTexto == segundoTexto) {
 System.out.println(“São objetos iguais”);
 } else {
 System.out.println(“São objetos diferentes”);
 }
 if (primeiroTexto.equals(segundoTexto)) {
 System.out.println(“Tem valores iguais”);
 } else {
 System.out.println(“Tem valores diferentes”);
 }
</code>
76 Laboratório de Programação I
Caso você use uma versão do JDK acima da versão oito, provavel-
mente perceberá que os resultados serão semelhantes. Mas, em versões 
inferiores, os valores são diferentes. Por isso, é melhor considerar utilizar 
== para comparações de números, e para os outros tipos utilizar equals.
Entender os recursos e como funciona a classe String lhe ajudará 
a realizar de maneira correta as tratativas de textos e irá otimizar o 
seu trabalho com programação, evitando que funções já criadas sejam 
reescritas por você. Use String sem moderação e aproveite todo o po-
tencial dessa classe ao seu favor.
4.2 Conjunto de valores (matriz – arrays)
Vídeo Nesta seção, utilizaremos a classe String para explicar a maneira 
correta de trabalhar com conjunto de valores. Esses conjuntos são cha-
mados de matriz e cada um deles pode guardar mais de um valor. Em 
Java, essas matrizes são chamadas de arrays.
Imagine que você precisa guardar o nome de três marcas de carros. 
A primeira ideia que vem à mente é usar três variáveis diferentes, mas 
que tal utilizar uma única variável que armazene as três marcas? Isso 
é possível com o uso das matrizes. Basicamente, você usará os carac-
teres [ ] (abertura e fechamento de colchetes) logo após da tipagem da 
variável. Vamos ao exemplo:
<code>
 String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
</code>
É possível utilizar matriz para qualquer tipo, primitivos ou não, no 
Java. Vamos ver um exemplo com números inteiros:
<code>
 Integer[] numeros = {10, 20, 30, 40};
</code>
Para acessar e exibir o conteúdo de uma matriz, você precisa infor-
mar na programação qual posição deseja exibir. Vamos retornar aos 
códigos de marcas de carro e exibir o texto “Fiat”. Para isso, precisamos 
acessar a segunda posição. Se você pensou que a segunda posição é o 
número 2, sintodizer que errou. A segunda posição é o número 1, pois 
Para saber mais detalhes 
sobre a classe String e quais 
outros comandos podem ser 
utilizados, acesse a página Java 
String, disponível em: https://
www.w3schools.com/java/
java_strings.asp. Acesso em: 
19 out. 2020.
Saiba mais
https://www.w3schools.com/java/java_strings.asp
https://www.w3schools.com/java/java_strings.asp
https://www.w3schools.com/java/java_strings.asp
Recursos da linguagem Java e a qualidade do código 77
a contagem começa do 0. Ou seja, 0 é a primeira posição, 1 é a segunda 
e assim a sequência segue até a posição que você deseja acessar:
<code>
 String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
 System.out.println(marcasCarros[1]);
</code>
Para mudar o conteúdo de uma posição em uma matriz, acesse a 
posição desejada e mude o texto. No exemplo a seguir, vamos mudar a 
terceira posição para BMW.
<code>
 String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
 marcasCarros[2] = “BMW”;
 System.out.println(marcasCarros[2]);
</code>
Para exibir todo o conteúdo da matriz, é preciso percorrer ela usan-
do algum laço de repetição. Costumamos utilizar o for como opção 
para essa operação. E para percorrer todo o conteúdo de uma matriz, é 
necessário saber o tamanho dela. Por isso, usamos o comando length. 
Confira o exemplo a seguir:
<code>
 String[] marcasCarros = {“Ford”, “Fiat”, “Chevrolet”};
 for (int i = 0; i < marcasCarros.length ; i++) {
 System.out.println(marcasCarros[i]);
}
</code>
A seguir, vamos unir os dois tópicos estudados neste capítulo com 
um código que irá receber um número até 99 e devolverá a descrição 
desse valor por extenso. Para isso, usaremos três arrays, cada um com 
uma finalidade específica: um irá guardar as informações de como se 
escreve as unidades; outro guardará as informações de como se es-
creve as dezenas; por fim, o último guardará informações de como se 
escreve os números de 11 a 19, pois são dezenas especiais.
Para que esse código funcione, é necessário criar uma classe no pa-
cote “br.com.projeto.conversoes”. Vamos ao passo a passo a seguir.
Para saber mais detalhes do 
uso de arrays em Java e quais 
outros comandos podem ser 
utilizados, acesse a página Java 
Arrays, disponível em: https://
www.w3schools.com/java/
java_arrays.asp. Acesso em: 19 
out. 2020.
Saiba mais
https://www.w3schools.com/java/java_arrays.asp
https://www.w3schools.com/java/java_arrays.asp
https://www.w3schools.com/java/java_arrays.asp
78 Laboratório de Programação I
1. Clique com o botão direito do mouse no pacote “br.com.projeto.conversoes”, que 
está presente no source folder src.
2. Selecione a opção “New” → “Class”.
3. No campo “Name”, digite “NumeroPorExtenso”.
4. Clique no botão “Finish” para concluir a criação do arquivo. Automaticamente 
será aberto o arquivo “NumeroPorExtenso.java” para ser editado.
Dentro da classe NumeroPorExtenso.java, insira o seguinte método:
<code>
public static String extenso(int num) {
 integer posicaoUnidade, posicaoDecimal;
 String extenso = “”;
 String conexao;
 String[] unidade = new String[10];
 String[] dezena = new String[10];
 String[] dezenaEspecial = new String[10];
 unidade[0] = “”;
 unidade[1] = “um”;
 unidade[2] = “dois”;
 unidade[3] = “três”;
 unidade[4] = “quatro”;
 unidade[5] = “cinco”;
 unidade[6] = “seis”;
 unidade[7] = “sete”;
 unidade[8] = “oito”;
 unidade[9] = “nove”;
 dezena[0] = “”;
 dezena[1] = “dez”;
 dezena[2] = “vinte”;
 dezena[3] = “trinta”;
 dezena[4] = “quarenta”;
 dezena[5] = “cinquenta”;
 dezena[6] = “sessenta”;
 dezena[7] = “setenta”;
Recursos da linguagem Java e a qualidade do código 79
 dezena[8] = “oitenta”;
 dezena[9] = “noventa”;
 dezenaespecial[0] = “dez”;
 dezenaespecial[1] = “onze”;
 dezenaespecial[2] = “doze”;
 dezenaespecial[3] = “treze”;
 dezenaespecial[4] = “quatorze”;
 dezenaespecial[5] = “quinze”;
 dezenaespecial[6] = “dezesseis”;
 dezenaespecial[7] = “dezessete”;
 dezenaespecial[8] = “dezoito”;
 dezenaespecial[9] = “dezenove”;
if (num >= 1 && num <= 99) {
 posicaoDecimal = num / 10;
 posicaoUnidade = num % 10;
 conexao = “”;
 if (posicaoDecimal > 0 && posicaoUnidade > 0) {
 conexao = “ e “;
 }
 if (num >= 10 && num <= 19) {
 extenso = dezenaEspecial[posicaoUnidade];
 } else {
 extenso = dezena[posicaoDecimal] + conexao + 
unidade[posicaoUnidade];
 }
}
return (extenso);
}
</code>
Salve as alterações dessa classe e abra a classe Executadora.java 
e insira um código novo dentro do método main. Para não executar 
os códigos anteriores, você pode usar os comandos /* e */. Eles irão 
comentar os códigos que você não deseja executar. Observe, a seguir, 
o exemplo de código comentado com o novo trecho de código para 
executar a função criada.
80 Laboratório de Programação I
<code>
/*
Calculos calculos = new Calculos();
Scanner ler = new Scanner(System.in);
System.out.println(“Digite o primeiro valor decimal:”);
Double valor1 = ler.nextDouble();
System.out.println(“Digite o segundo valor decimal:”);
Double valor2 = ler.nextDouble();
Double resultado = calculos.somarDoisNumeros(valor1, valor2);
System.out.println(“Resultado da soma:” + resultado);
*/
NumeroPorExtenso n = new NumeroPorExtenso();
for (int i=1; i <100;i++) {
 System.out.println(n.extenso(i));
}
</code>
Figura 1
Classe Executadora.java exibindo números por extenso.
Fonte: Elaborada pelo autor.
Recursos da linguagem Java e a qualidade do código 81
Com essa alteração, poderemos executar o nosso programa por 
meio dos seguintes passos:
1. Clique no ícone do disquete para salvar a alteração na classe Executadora.java. 
Caso não encontre o ícone, clique em “File” → “Save”.
2. Clique no menu “Run” → “Run As” → “Java Application”.
3. Será aberta a aba “Console” do Eclipse, solicitando que você digite um número. 
Clique dentro dessa aba para digitar um número e pressione ENTER.
4. Será exibida uma sequência de textos de 1 até 99 escrita por extenso.
Esse é um exemplo poderoso de que unir arrays e textos pode 
otimizar um trabalho que poderia ser repetitivo e trabalhoso. Con-
siderando que o código esteja correto, nunca mais será necessário 
refazer essa tarefa, basta acionar o método extenso() para termos a 
resposta correta.
Continue o desenvolvimento 
desse método para conseguir 
interpretar números acima de 
100, pois o método está limitado 
a valores entre 1 e 99. 
Desafio
4.3 Classe Date
Vídeo Até o momento, aprendemos como trabalhar com números, textos 
e conjunto de valores (arrays) na linguagem Java. Esse conjunto de co-
nhecimento já permite que você faça diversos programas em Java, mas 
em algum momento você precisará trabalhar com datas e, pensando 
nisso, o Java traz um conjunto de classes para trabalhar com datas, 
todas do pacote “java.time”. No quadro a seguir, estão listadas as prin-
cipais classes para trabalhar com datas. 
Quadro 1
Classes de datas no Java
Nome da classe Descrição
LocalDate
Classe utilizada para exibir uma data local com ano, mês e 
dia (yyyy-MM-dd).
LocalTime
Classe utilizada para exibir um tempo em horas, minutos, 
segundos e nanosegundos (HH:mm:ss-ns).
LocalDateTime É a junção das duas classes citadas.
DateTimeFormatter
Classe utilizada para formatar uma data que será apresen-
tada para o usuário.
Fonte: Elaborado pelo autor.
82 Laboratório de Programação I
Para exibir uma data atual, utilize o código a seguir na classe 
Executadora.java e rode o código para verificar o resultado.
<code>
 LocalDate dataAtual = LocalDate.now();
 System.out.println(dataAtual);
</code>
Quando você utilizar esse código, a palavra LocalDate provavelmente 
ficará grifada em vermelho. Para resolver esse problema, pare o mouse 
em cima da palavra e a IDE irá automaticamente sugerir a importação 
do pacote “java.time”. Isso irá resolver o problema. O resultado do códi-
go será a exibição da data atual, sem horas, no formato de ano-mês-dia 
(padrão norte-americano).
Para exibir a hora atual, utilize o código a seguir na classe 
Executadora.javae rode o código para verificar o resultado:
<code>
 LocalTime horaAtual = LocalTime.now();
 System.out.println(horaAtual);
</code>
O resultado da execução do código será a hora atual com os mi-
nutos, segundos e nanosegundos. Caso você queira apresentar data e 
hora, você precisa usar a classe LocalDateTime:
<code>
 LocalDateTime dataHoraAtual = LocalDateTime.now();
 System.out.println(dataHoraAtual);
</code>
O resultado das datas e horas estão em um formato não muito 
agradável para o usuário. Para corrigir isso, você deve utilizar a classe 
DateTimeFormatter, junto com a classe LocalDateTime. No código a 
seguir, iniciamos uma data e hora atual e exibimos ela sem formatação. 
Logo em seguida, usamos a classe DateTimeFormatter e informamos 
o padrão de saída brasileiro (dia, mês e ano, seguidos por hora, minu-
tos e segundos). Esse padrão é usado pela função ofPattern().
<code>
 LocalDateTime dataHoraAtual = LocalDateTime.now();
 System.out.println(“Data Hora sem formatacao: ” + 
dataHoraAtual);
 DateTimeFormatter formatacao = DateTimeFormatter.
ofPattern(“dd-MM-yyyy HH:mm:ss”);
Recursos da linguagem Java e a qualidade do código 83
 String dataFormatada = dataHoraAtual.format(formatacao);
System.out.println(“Data Hora Formatada: ” + dataFormatada);
</code>
O resultado desse código será algo parecido com 30/08/2020 
11:50:10, ou seja, um padrão que qualquer usuário está acostumado a 
entender. Além desse padrão de exibição, outros podem ser utilizados 
dentro do método ofPattern(). Confira no quadro a seguir.
Quadro 2
Padrões de exibição de data
Padrão a ser exibido Resultado esperado Exemplo
yyyy-MM-dd 2020-08-24 DateTimeFormatter.ofPattern(“yyyy-MM-dd”);
dd/MM/yyyy 24/08/2020 DateTimeFormatter.ofPattern(“dd/MM/yyyy”);
dd-MMM-yyyy 24-Aug-2020 DateTimeFormatter.ofPattern(“dd-MMM-yyyy”);
E, MMM dd yyyy Mon, Aug 24 2020 DateTimeFormatter.ofPattern(“E, MMM dd yyyy”);
Fonte: Elaborado pelo autor.
Nesta seção, aprendemos o básico sobre o trabalho com datas em 
Java. Em alguns lugares você encontrará referências para o pacote/clas-
se java.util.Date, que não foi mencionado neste livro. Essa classe está 
sendo depreciada, ou seja, entrando em desuso e é aconselhável que 
você não a utilize em novos projetos. As classes presentes no pacote 
java.time deverão ser utilizadas sempre que possível para o trabalho 
com datas.
Para saber mais detalhes do uso 
de datas em Java e quais outros 
comandos podem ser utilizados, 
acesse a página Java Date and 
Time, disponível em: https://
www.w3schools.com/java/
java_date.asp. Acesso em: 19 
out. 2020.
Saiba mais
4.4 Testes unitários
Vídeo Neste seu primeiro contato com a programação em Java, você está 
tendo que inserir códigos-fonte e executá-los com bastante frequência 
para testar se a implementação está correta. Mas existe uma forma 
melhor de criar a execução de testes, os quais podem se tornar au-
tomatizados (ou seja, executados a qualquer momento por qualquer 
pessoa). Trata-se dos testes unitários e eles são códigos-fonte, mas que 
ficam no source folder test.
O ideal é que cada parte do código tenha o seu próprio teste unitá-
rio, e para criá-los costumamos utilizar a biblioteca JUnit, na versão 5.0. 
Vamos criar o nosso primeiro teste unitário. Para isso, vamos acompa-
nhar os passos a seguir.
https://www.w3schools.com/java/java_date.asp
https://www.w3schools.com/java/java_date.asp
https://www.w3schools.com/java/java_date.asp
84 Laboratório de Programação I
1. Abra o source folder test e você irá visualizar os pacotes “br.com.projeto.calculos” e 
“br.com.projeto.conversoes”.
2. Clique com o botão direito no pacote “br.com.projeto.calculos” e escolha a opção 
“New” → “Class”.
3. Crie a classe chamada CalculosTest.
4. Pressione o botão “Finish” para encerrar a criação do arquivo.
Com essa classe criada, vamos elaborar alguns testes para os méto-
dos somarDoisNumeros e subtrairDoisNumeros que estão presen-
tes na classe Calculos.java. Para realizar esses testes:
1. Abra a classe CalculosTest.java;
2. Digite este código dentro dessa classe:
<code>
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.jupiter.api.Test;
import br.com.projeto.conversoes.NumeroPorExtenso;
public class CalculosTest {
private final Calculos calculos = new Calculos();
private final NumeroPorExtenso numeroPorExtenso = new 
NumeroPorExtenso();
@Test
public void somarDoisNumerosTest() {
 assertTrue(2.0 == calculos.somarDoisNumeros(1.0, 1.0));
}
@Test
public void subtrairDoisNumerosTest() {
 assertTrue(7.0 == calculos.subtrairDoisNumeros(8.0, 1.0));
}
@Test
public void validaSeEhParTest() {
 assertEquals(“dois”, numeroPorExtenso.extenso(2));
}
</code>
Recursos da linguagem Java e a qualidade do código 85
Figura 2
Testes unitários para a classe Calculos.java
Fonte: Elaborada pelo autor.
Perceba que antes de cada método existe uma anotação @Test. Ela 
é usada para identificar que aquele método terá uma execução especí-
fica de testes unitários. Você sempre deve usar essa anotação para ter 
a função de testes unitários ativada.
Além dessa configuração, percebemos dois comandos importantes 
para validação de dados. Usamos assertTrue para validação de nú-
meros e assertEquals para validação de textos e objetos. Para ambos, 
informamos o valor que esperamos e, em seguida, informamos qual 
classe e método será validada. Por exemplo: assertTrue(7.0 == calcu-
los.subtrairDoisNumeros(8.0, 1.0));.
Para executar os testes unitários, você usará a opção “Run” → “Run 
as” → “JUnit test”. Ao acionar essa opção, será aberta uma aba chamada 
JUnit e serão executados os testes. Caso tudo fique verde, quer dizer 
que todos os testes validaram corretamente seu código. Caso algum 
deles fique vermelho, você precisará analisar em qual ponto está o 
erro, se é no teste ou no código escrito.
86 Laboratório de Programação I
Figura 3
Aba na IDE Eclipse que exibe o resultado da execução dos testes unitários
Fonte: Elaborada pelo autor.
Ao utilizar testes unitários, você garantirá que os códigos produzi-
dos em Java sempre irão funcionar e realizar as operações esperadas. 
Produzir testes unitários faz com que seu código-fonte tenha maior 
qualidade e seja de mais fácil manutenção.
CONSIDERAÇÕES FINAIS
Avançamos no conhecimento da linguagem de programação Java. Ago-
ra, conseguimos manipular números, textos, datas e conjunto de valores. 
E todo o nosso trabalho de programação pode ser garantido com testes 
unitários, sem complicar a base de código desenvolvido. Esse conjunto de 
informações permite que façamos diversos tipos de programas e auxilia 
na resolução de vários problemas complexos, atendendo às expectativas 
dos usuários.
ATIVIDADES
1. Crie uma classe chamada ExercicioDeTexto.java e crie um método 
chamado maiusculo() que receba um texto qualquer e retorne esse 
texto com todas as letras em maiúsculo. Crie um teste unitário para o 
método.
2. Crie um teste unitário para o método divisão, o qual receberá os 
valores 28 e 4 e retornará o resultado 7.
3. Crie um código-fonte para exibir uma data no formato dia-mês (ambos 
com duas posições e separados por um hífen).
Aplicando orientação a objetos 87
5
Aplicando orientação a objetos
Estimado aluno, até este momento você criou diversos códigos-
-fonte em Java e utilizou vários conceitos da orientação a objetos. 
Neste capítulo, vamos detalhar esses conceitos usados para que, 
nos próximos códigos-fonte, você tenha maior facilidade com 
esse paradigma de programação. Para o bom andamento dos 
estudos, permaneça com a IDE Eclipse iniciada e com o projeto 
“CalculosEConversoes” aberto, pois boa parte das explicações des-
te capítulo fará menção ao que já foi desenvolvido.
O que fizemos até agora foram algoritmos em Java, mas que 
utilizam alguns conceitos da orientação a objetos. Nas seções des-
te capítulo, você irá conhecer de maneira prática os quatro pilares 
da orientação a objetos, bem como a base desse paradigma de 
programação,que é a abstração. Vamos lá?
5.1 Definição e criação de classes, 
métodos e atributosVídeo
Quando analisamos o projeto “CalculosEConversoes”, temos os se-
guintes arquivos no source folder src:
Figura 1
Arquivos no projeto “CalculosEConversoes”
Fonte: Elaborada pelo autor.
88 Laboratório de Programação I
O que temos chamado de arquivos até o momento são, na verda-
de, classes. Uma classe é o modelo ou esquema por meio do qual os 
objetos são criados (HORSTMANN; CORNELL, 2010). A classe deve re-
presentar algo significativo da vida real e, dentro dela, temos diversas 
informações que detalham o que a classe faz e suas características. 
As possíveis ações de uma classe são chamadas de métodos e suas 
características são denominadas atributos.
Por convenção, os atributos ficam logo no início do arquivo, após 
a declaração do nome da classe, e os métodos ficam logo abaixo dos 
atributos. É também uma convenção utilizar os nomes dos métodos 
com algum verbo no infinitivo, sem esquecer do padrão CamelCase. 
Vejamos um exemplo de classe com atributos e métodos:
<code>
public class ExemploDeCalculo {
 private Long resultado;
 private Integer resultadoInteiro;
 public Integer realizarSoma(Integer valor1, Integer 
valor2) {
 return valor1 + valor2;
 }
public Integer realizarSubtracao(Integer valor1, Integer 
valor2) {
 return valor1 - valor2;
 }
}
</code>
Nesse código, temos a classe ExemploDeCalculo. Ela possui dois 
atributos – resultado e resultadoInteiro – que atuam como variáveis; 
ambos podem ser acessados em qualquer parte dessa classe. Por fim, 
temos as ações que ela realiza (realizarSoma e realizarSubtracao).
Quando acessamos uma classe para utilizá-la, dizemos que criamos 
uma instância da classe (HORSTMANN; CORNELL, 2010). Para referen-
ciar a classe, costumamos usar a palavra reserva new.
<code>
 NomeDaClasse exemplo = new NomeDaClasse();
</code>
Aplicando orientação a objetos 89
No nosso exemplo, a classe Executadora.java faz uma ligação com 
as classes Calculos.java e NumerosPorExtenso.java, conforme pode 
ser visto no código a seguir:
public class Executadora {
 public static void main(String[] args) {
 Calculos calculos = new Calculos();
 Scanner ler = new Scanner(System.in);
 System.out.printIn(“Digite o primeiro valor 
decimal:”);
 Double valor1 = ler.nextDouble();
 NumeroPorExtenso n = new NumeroPorExtenso();
 for (int i=1; i <100;i++) {
 System.out.printIn(n.extenso(i));
 }
 }
}
</code>
Ao realizar o processo de criação de uma instância, você utilizará um 
espaço em memória da Java virtual machine (JVM). Quando não estiver 
mais utilizando essas instâncias, a própria JVM fará a limpeza de memó-
ria. Esse processo é chamado de garbage collector.
A orientação a objetos busca aproximar a construção de algoritmos 
conforme os objetos são percebidos na vida real. Para ajudar nessa 
construção, devemos utilizar as classes e mapear seus atributos e mé-
todos. A fim de realizar isso com a maior precisão possível, precisamos 
investir nos estudos da abstração, que é o tema da próximo seção.
Para se aprofundar no 
tema das classes, méto-
dos e atributos, assista 
ao vídeo Curso de Java 
24 - Orientação a objetos: 
classes e atributos, publi-
cado pelo canal Loiane 
Groner.
Disponível em: https://youtu.be/
Gq1BS63pkRA. Acesso em: 19 
out. 2020.
Vídeo
5.2 Abstração 
Vídeo O paradigma orientado a objetos prevê a criação de classes com 
base na análise do mundo real. Esse conceito é denominado abstração, 
sendo considerado a base para todos os outros conceitos da orienta-
ção a objetos. Em síntese, uma abstração é uma visão ou representa-
ção de uma entidade que inclui apenas os atributos mais significativos 
https://youtu.be/Gq1BS63pkRA
https://youtu.be/Gq1BS63pkRA
90 Laboratório de Programação I
(SEBESTA, 2018). As vantagens na utilização da abstração de dados re-
ferem-se à organização do código-fonte, à facilidade de mudanças e à 
compilação separada.
Para aperfeiçoar a habilidade da abstração, você precisará prati-
car sempre que possível. Uma sugestão de treino é analisar possíveis 
imagens ou telas de softwares já existentes. Um exercício de abstração 
pode ser realizado por meio da figura a seguir.
Figura 2
Exercício de abstração
RECIBO No VALOR
Recebi(emos) de ___________________________________________________________________ 
a quantia de _______________________________________________________________________
correspondente a _________________________________________________________________
e para clareza firmo(amos) o presente.
____________________________,_________ de_____________________ de____________________
Assinatura _________________________________________________________________________
Nome ___________________________________________ CPF/RG __________________________
Exemplo de um recibo simples.
IE
SD
E 
Br
as
il 
S/
A
Fonte: Elaborada pelo autor.
Quais são as classes e os atributos que você consegue abstrair ao 
observar esse modelo de recibo?
A primeira abstração que você pode identificar é a classe Recibo, a 
qual é composta por diversos atributos, como número, valor, assinatu-
ra, nome, CPF/RG, entre outros campos que terão valores.
Após essa primeira análise, é necessário olhar o todo e verificar se 
existem classes que podem ser abstraídas e aproveitadas de manei-
ra independente. Além da classe Recibo, podemos abstrair a classe 
Pessoa, com os atributos nome e CPF/RG. Essa classe irá ter uma res-
ponsabilidade diferente da Recibo, já que enquanto esta guardará da-
dos de um comprovante, a outra guardará dados de pessoas, os quais 
poderão ser utilizados em outros momentos durante a programação.
Para entender mais sobre 
a abstração e o conteúdo 
sobre orientação a 
objetos, confira o vídeo 
Abstração, Herança e 
Polimorfismo a base de 
um bom código, publicado 
pelo canal DevMedia. 
Disponível em: https://youtu.be/
qiGTRJlCnlA?t=22. Acesso em: 19 
out. 2020.
Vídeo
https://youtu.be/qiGTRJlCnlA?t=22
https://youtu.be/qiGTRJlCnlA?t=22
Aplicando orientação a objetos 91
A abstração é uma prática que irá acompanhá-lo durante toda a 
sua jornada como desenvolvedor de software. Para refiná-la e domi-
ná-la, pratique com frequência e aprenda com outros programadores 
mais experientes.
5.3 Encapsulamento 
Vídeo A orientação a objetos tem quatro pilares, a saber: encapsulamento, 
herança, composição e polimorfismo. Encapsulamento é um conceito-
-chave ao se trabalhar com objetos; em síntese, ele não vai além de com-
binar dados e comportamentos em um pacote e ocultar os detalhes de 
implementação do usuário do objeto (HORSTMANN; CORNELL, 2010).
O segredo para o encapsulamento funcionar é fazer com que os 
métodos nunca acessem diretamente os campos de instância em uma 
classe além daqueles próprios de um método. O encapsulamento é o 
modo de dar ao objeto seu comportamento “caixa-preta”, que é o se-
gredo da reutilização e confiabilidade (HORSTMANN; CORNELL, 2010).
Para implementar o encapsulamento, utilizamos palavras 
reservadas do Java:
 • private;
 • public;
 • protected.
Essas palavras reservadas são chamadas de modificadores e cada 
uma delas realiza um tipo de encapsulamento. O modificador public 
permite que classes e métodos sejam acessados em qualquer parte do 
código-fonte por outras classes. O comportamento inverso do public é 
o modificador private, que impossibilita o acesso de métodos e classes 
por outras; um método private só poderá ser acessado pela mesma 
classe que esse foi declarado. O modificador protected funciona como 
o modificador private, exceto que as classes herdeiras ou derivadas 
também terão acesso ao campo ou método marcado (SANTOS, 2003).
Nos códigos desenvolvidos no projeto “CalculosEConversoes”, con-
seguimos utilizar a classe Calculos.java e seus métodos em outras 
classes, pois eles tem o modificador public. Caso algum método da 
classe Calculos estivesse como private, não seria possível usá-lo na 
Executadora.java.
92 Laboratório de ProgramaçãoI
Assim, utilize os modificadores sempre que for necessário. Por meio 
deles, você irá garantir a exposição correta de dados e métodos das 
classes e realizará, desse modo, o encapsulamento.
5.4 Herança 
Vídeo Um segundo pilar da orientação a objetos é a herança. Quando 
pensamos nessa palavra, frequentemente a relacionamos a uma es-
pécie de presente, que foi deixado por alguém que seja muito próxi-
mo ou com quem tenhamos um relacionamento forte. Na orientação 
a objetos, uma herança é um relacionamento entre duas classes, 
o qual é considerado forte. Costumamos utilizar a frase “é um” para 
expressar o relacionamento entre uma classe especial e uma mais ge-
ral (HORSTMANN; CORNELL, 2010).
Para realizar um relacionamento entre duas classes e gerar uma 
herança, é preciso utilizar a palavra reservada extends. Ela indica que 
você está criando uma nova classe que deriva de uma já existente – 
esta é chamada de superclasse, classe básica ou classe pai. A nova classe 
é denominada subclasse, classe derivada ou classe filha. Com relação 
aos termos, superclasse e subclasse são mais comumente utilizados 
(HORSTMANN; CORNELL, 2010).
As classes derivadas, ou subclasses, podem ter acesso aos métodos 
das superclasses usando a palavra reservada super (SANTOS, 2003). No 
entanto, as superclasses não conseguem acessar os métodos que são 
exclusivos das subclasses. Em geral, se a classe A estender a classe B, 
ela herdará os métodos dessa classe B (HORSTMANN; CORNELL, 2010).
Para entendermos o conceito, vamos aos seguintes passos, obser-
vando a prática de sempre salvar o projeto após cada alteração:
1. Crie uma nova classe chamada Animal.java dentro do pacote 
“br.com.projeto.principal”.
2. Crie uma segunda classe chamada Cachorro.java dentro do 
pacote “br.com.projeto.principal”.
3. Crie uma terceira classe chamada Gato.java dentro do pacote 
“br.com.projeto.principal”. Os arquivos devem ficar conforme a 
figura a seguir:
Aplicando orientação a objetos 93
Figura 3
Classes no projeto “br.com.projeto.principal”
Fonte: Elaborada pelo autor.
4. Abra a classe Cachorro.java e adicione a palavra extends Animal:
Figura 4
Inserindo extends Animal (a)
Fonte: Elaborada pelo autor.
5. Abra a classe Gato.java e adicione a palavra extends Animal:
Figura 5
Inserindo extends Animal (b)
Fonte: Elaborada pelo autor.
94 Laboratório de Programação I
6. Retorne à classe Animal.java, adicione um método chamado 
andar e utilize o modificador de acesso public:
Figura 6
Adicionando método e modificador
Fonte: Elaborada pelo autor.
7. Volte à classe Cachorro.java e invoque o método definido na 
superclasse:
Figura 7
Invocando método da superclasse
Fonte: Elaborada pelo autor.
8. Agora, crie um método na subclasse Cachorro.java:
Figura 8
Criando método na subclasse
Fonte: Elaborada pelo autor.
Aplicando orientação a objetos 95
9. Retorne à classe Animal.java e tente acessar o método da 
subclasse:
Figura 9
Tentativa de acesso ao método da subclasse
Fonte: Elaborada pelo autor.
Você percebeu que um erro apareceu no código-fonte? Isso ocorre 
pois não é possível uma classe pai acessar os métodos das classes fi-
lhas, mas o inverso pode acontecer. Por isso, costumamos deixar os 
métodos comuns nas superclasses e os específicos nas subclasses. 
Assim, evitamos a duplicidade de código-fonte e fortalecemos seu rea-
proveitamento. Desse modo, use a herança sempre que encontrar si-
tuações que tenham uma referência de objetos pai e filhos, bem como 
uma referência forte de relacionamento entre as classes.
5.5 Classes abstratas e métodos abstratos 
Vídeo Em alguns momentos da abstração, precisamos utilizar objetos 
mais genéricos e que funcionem como base para as demais classes. À 
medida que você sobe na hierarquia de herança, as classes se tornam 
mais genéricas, ou seja, mais abstratas. Às vezes, a classe ancestral se 
torna tão geral que podemos pensá-la mais como uma base para ou-
tras classes do que como uma classe com instâncias específicas para 
ser utilizada (HORSTMANN; CORNELL, 2010).
Para tornar as classes abstratas, você deve utilizar a palavra reser-
vada abstract. É possível usar uma validação simples para saber se deve 
ou não tornar a classe abstrata. Essa validação consiste em perguntar 
para a superclasse se ela deve ou não ter alguma instância, isto é, per-
mitir que ela seja iniciada em algum ponto do código-fonte a partir da 
palavra reservada new.
96 Laboratório de Programação I
No nosso exemplo, podemos perceber que não faz sentido ter um 
comando new Animal(), já que o ideal é sabermos qual é o animal que 
está sendo iniciado (cachorro ou gato). Nessa pequena validação, iden-
tificamos que a classe Animal.java deve ser abstrata. O código-fonte 
deve ficar conforme o descrito a seguir:
<code>
package br.com.projeto.principal;
public abstract class Animal {
 public void andar() {
 }
}
</code>
Além da possibilidade de tornar uma classe abstrata, podemos 
tornar os métodos abstratos. Os métodos abstratos funcionam como 
marcadores de lugar para métodos que são implementados nas sub-
classes (HORSTMANN; CORNELL, 2010). Quando fazemos isso, estamos 
definindo a estrutura do método na superclasse e passando a respon-
sabilidade de implementação e personalização do método para as sub-
classes. Vamos ao exemplo:
1. Abra a classe Animal.java e adicione a palavra abstract no 
método andar:
Figura 10
Adicionando abstract
Fonte: Elaborada pelo autor.
2. Pressione o botão “Salvar”; você perceberá que as subclasses 
Cachorro.java e Gato.java apresentarão um problema. Para 
resolvê-lo, você precisará implementar o método andar nessas 
classes.
Aplicando orientação a objetos 97
3. Abra a classe Cachorro.java, pare o mouse no nome da classe e 
selecione a opção “Add unimplemented methods”:
Figura 11
Opção “Add unimplemented methods”
Fonte: Elaborada pelo autor.
4. Com essa opção selecionada, seu código-fonte ficará da seguinte 
maneira:
Figura 12
Código-fonte resultante
Fonte: Elaborada pelo autor.
5. Realize essas mesmas operações para a classe Gato.java.
Ao utilizar os métodos abstratos você poderá manter a estrutura de 
uma classe genérica (abstrata) e obrigar que os métodos sejam imple-
mentados pelas classes filhas.
Se a classe não tiver nenhum método não abstrato, é possível criá-
-la como uma interface que segue um modelo de declaração diferen-
te do usado para classes, mas que tem funcionalidade similar à de 
Para saber mais sobre 
herança e classes abstra-
tas, assista ao vídeo Curso 
de Java 41: Orientação a 
Objetos: Herança: classes 
abstratas, publicado pelo 
canal Loiane Groner. 
Disponível em: https://www.
youtube.com/watch?v=Oibb-
17nD14. Acesso em: 19 out. 2020.
Vídeo
https://www.youtube.com/watch?v=Oibb-17nD14
https://www.youtube.com/watch?v=Oibb-17nD14
https://www.youtube.com/watch?v=Oibb-17nD14
98 Laboratório de Programação I
classes abstratas. A diferença entre classes abstratas e interfaces é 
que utilizando uma classe abstrata você criará um único vínculo entre 
esse tipo de classe e a classe não abstrata. Já com interfaces é possível 
ter vários vínculos entre classe e interfaces e, com isso, ter o polimor-
fismo (muitas formas). Isso ocorre porque uma classe abstrata é uma 
implementação de herança e, por definição, uma herança restringe 
a classe normal a ser uma única coisa – lembre-se da frase “é um” 
(SANTOS, 2003).
Em suma, as interfaces são utilizadas na linguagem Java para definir 
um conjunto exigido de funcionalidades para as classes que implemen-
tam a interface. Ao contrário de estender as classes básicas, uma classe 
é livre para implementar quantas interfaces forem necessárias. Assim, 
uma interface pode ser vista como uma classe abstrata e todos os mé-
todos abstratos (LIGUORI; FINEGAN, 2010).
Para criar uma interface em Java, siga os passos a seguir:
1. Clique com o botão direito no pacote “br.com.projeto.principal” e 
selecione a opção “New” → “Interface”:
Figura 13
Criando uma interface no Java
Fonte: Elaboradapelo autor.
2. Insira o nome Mamifero para a interface.
3. Abra a interface Mamifero e insira a declaração void amamentar();.
Aplicando orientação a objetos 99
Figura 14
Inserindo void amamentar()
Fonte: Elaborada pelo autor.
4. Retorne à classe Gato.java e insira o vínculo com a interface 
Mamifero.java por meio da palavra implements:
Figura 15
Vinculando a interface (a)
Fonte: Elaborada pelo autor.
5. Perceba que a classe Gato.java está com um problema, pois 
o método amamentar não foi implementado. Para resolver 
isso, pare o mouse no nome da classe e selecione a opção “Add 
unimplemented methods”.
6. O resultado final deve estar conforme o apresentado a seguir:
Figura 16
Código-fonte final
Fonte: Elaborada pelo autor.
100 Laboratório de Programação I
7. Para demonstrar o poder da interface, vamos criar uma 
segunda interface Petshop e implementar os métodos 
retornarTempoDeBanho e animalGostaDeAgua. Confira a 
figura a seguir para entender como ficará essa interface:
Figura 17
Interface Petshop
Fonte: Elaborada pelo autor.
8. Agora, abra a classe Gato.java, adicione o vínculo com essa nova 
interface e implemente os métodos:
Figura 18
Vinculando a interface (b)
Fonte: Elaborada pelo autor.
Desse modo, durante o processo de desenvolvimento de software 
utilizando a orientação a objetos, você irá se deparar com situações 
que exigirão uma abstração mais aprofundada. Para resolver esses 
problemas, você precisará usar herança, classes abstratas e interfaces. 
Aplicando orientação a objetos 101
Ao utilizá-las, serão potencializados a reutilização do código-fonte e o 
trabalho com polimorfismo.
O último pilar da orientação a objetos é o polimorfismo – con-
ceito que já foi visto quando falamos de herança, classes abstratas 
e interfaces. O polimorfismo pode existir quando uma classe her-
da outra ou implementa uma interface (LIGUORI; FINEGAN, 2010). 
O polimorfismo fala sobre um objeto mapeado ter várias formas e, 
com isso, poder resolver problemas complexos por meio de suas 
personalizações implementadas.
Dessa maneira, aplicar corretamente os conceitos de polimorfismo 
faz com que o seu projeto de software esteja mais próximo da orienta-
ção a objetos. Sem utilizar esses recursos, você provavelmente progra-
mará com base em um outro paradigma, em especial o estruturado.
CONSIDERAÇÕES FINAIS
Chegamos ao final dos nossos estudos! Agora, você já sabe como uti-
lizar os recursos básicos da linguagem de programação Java. Além disso, 
conheceu de maneira prática o paradigma de orientação a objetos. Isso 
permitirá que você crie soluções para computadores de modo profissio-
nal, reaproveitando o código-fonte e tendo qualidade em seu trabalho por 
meio dos testes unitários.
ATIVIDADES
1. Crie uma superclasse chamada Pai.java e uma subclasse chamada 
Filha.java. Faça com que a classe filha acesse o método exibirDados 
presente na superclasse.
2. Crie uma classe abstrata chamada Carro.java e uma subclasse 
chamada CarroPasseio.java. Por fim, crie um método abstrato buzinar 
na superclasse.
3. Crie uma interface chamada Rugir com uma declaração de método 
chamada rugido. Faça a implementação dessa interface pelas classes 
Leao.java e Monstro.java.
102 Laboratório de Programação I
GABARITO 
1 Introdução à programação de computadores
1. O sistema operacional faz um duro trabalho de mediação entre a 
comunicação do mundo real e dos aplicativos com o hardware. Como 
exemplo de sistemas operacionais para computadores pessoais temos 
Microsoft Windows, Linux e macOS.
2. As linguagens de programação essencialmente para web são JavaScript, 
PHP, Ruby e Python.
3. A arquitetura de Von Neumann foi utilizada pela primeira vez nos 
computadores que compõem a primeira geração. Entre esses 
computadores, temos o ENIAC como o principal representante. Esse 
modelo arquitetural é utilizado até os dias atuais.
2 Java: introdução e conceitos básicos
1. O Green Project foi um projeto da Sun Microsystems, que criou uma 
linguagem específica (chamada Oak) e um hardware (chamado Star7) 
semelhante a um controle remoto com interface touchscreen. Esse 
projeto fracassou, mas a linguagem Oak foi adaptada para a internet 
e originou o Java.
2. Sim, é correto afirmar que todo Java development kit (JDK) possui um 
Java runtime environment (JRE) e, consequentemente, todo JRE possui 
uma Java virtual machine (JVM). O JDK precisa da JVM, que está na JRE, 
para realizar o processo de interpretação do bytecode.
3. Não, o Eclipse não é a única opção gratuita de IDE para Java. Temos 
também o Apache Netbeans e o IntelliJ IDEA Community, por exemplo.
3 Notação condicional e estruturas 
de repetições no Java
1. Código-fonte esperado como resposta:
 public void validaSeEhPar(Integer valor) {
 if (valor % 2 == 0) {
 System.out.println(“é par”);
 }
 }
Gabarito 103
2. Código-fonte esperado como resposta:
 public void validaSeEstaEntre2e25(Integer valor) {
 if (valor >= 2 && valor <= 25) {
 System.out.println(“O número digitado está 
entre 2 e 25”);
 }
 }
3. Código-fonte esperado como resposta:
 public void repeticaoDe1a6() {
 for (Integer i = 1; i <= 6; i++) {
 System.out.println(“Sequência numérica “ + 
i);
 }
 }
4 Recursos da linguagem Java e a qualidade do código
1. Código-fonte esperado como resposta:
 public class ExercicioDeTexto {
 public String maisculo(String texto) {
 return texto.toUpperCase();
 }
 }
 public class ExercicioDeTextoTest {
 @Test
 public void maiusculoTest() {
 ExercicioDeTexto exercicio = new 
ExercicioDeTexto();
 Assert.assertEquals(“EXEMPLO”, exercicio.
maisculo(“Exemplo”));
 }
}
2. Código-fonte esperado como resposta:
@Test
public void dividirDoisNumerosTest() {
 assertTrue(7 == calculos.dividirDoisNumeros(28.0, 4.0));
}
104 Laboratório de Programação I
3. Código-fonte esperado como resposta:
LocalDateTime dataHoraAtual = LocalDateTime.now();
DateTimeFormatter formatacao = DateTimeFormatter.
ofPattern(“dd-MM”);
System.out.println(dataHoraAtual.format(formatacao));
5 Aplicando orientação a objetos
1. Para responder a esta questão, execute os passos a seguir:
Passo 1: crie a classe Pai.java com o método exibirDados(), sendo 
este público e sem passar parâmetros. Não há necessidade de 
código-fonte dentro do método exibirDados(). Veja o código a 
seguir como exemplo:
public class Pai {
 public void exibirDados() {
 }
}
Passo 2: na sequência, crie a classe Filha.java – ela deve ser uma 
herança da classe Pai.java. Para isso, use a palavra reservada extends.
Passo 3: crie um novo método chamado acessarDadosDoPai e 
invoque o método exibirDados da classe Pai.java, usando a palavra 
reservada super. Segue um exemplo de código-fonte:
public class Filha extends Pai {
 public void acessarDadosDoPai() {
 super.exibirDados();
 }
}
2. Para responder a esta questão, execute os passos a seguir:
Passo 1: crie uma classe chamada Carro.java. Ela deve ter a palavra 
reservada abstract em sua declaração. Dentro dessa classe, crie um 
método abstrato chamado buzinar(); para isso, use novamente a 
palavra reservada abstract, mas agora na declaração do método. A 
seguir, temos um exemplo de código para resolução do problema:
public abstract class Carro {
 public abstract void buzinar();
}
(Continua)
Gabarito 105
Passo 2: crie uma segunda classe chamada CarroPasseio.java – ela 
deve ser uma herança da classe Carro. Ao salvar essa classe, será 
necessário implementar o método abstrato da classe Carro.java. 
A seguir, temos o exemplo de código-fonte da resolução deste 
exercício:
public class CarroPasseio extends Carro {
 @Override
 public void buzinar() {
 }
}
3. Para responder a esta questão, execute os passos a seguir:
Passo 1: crie uma interface chamada Rugir.java. Nela, você deve 
criar uma declaração de método chamado rugido() e ele não deve 
retornar nada. Para isso, use a palavra void. Veja um exemplo de 
como o código-fonte deve ficar:
public interface Rugir {
 void rugido();
}
Passo 2: na sequência,crie uma classe chamada Leao.java e 
Monstro.java. Ambas devem usar a palavra implements para criar um 
vínculo com a interface Rugir.java. Veja a seguir como o código-fonte 
deverá ficar:
public class Leao implements Rugir{
 @Override
 public void rugido() {
 
 }
}
A classe Monstro.java ficará do seguinte modo:
public class Monstro implements Rugir{
 @Override
 public void rugido() {
 
 }
}
106 Laboratório de Programação I
REFERÊNCIAS
DEITEL, P.; DEITEL, H. Java: como programar. 10. ed. São Paulo: Pearson, 2016.
HORSTMANN, C. S.; CORNELL, G. Core Java, volume I: fundamentos. 8. ed. São Paulo: 
Pearson Prentice Hall, 2010.
LIGUORI, R.; FINEGAN, E. SCJA Sun® Certified Java™ Associate Study Guide. Nova Iorque: 
McGraw-Hill, 2010.
SANTOS, R. Introdução à programação orientada a objetos usando Java. 7. reimp. Rio de 
Janeiro: Elsevier, 2003.
SAUGO, V. J. Linguagens e paradigmas de programação. Curitiba: IESDE, 2020.
SEBESTA, R. W. Conceitos de linguagens de programação. 11. ed. Porto Alegre: Bookman, 
2018.
TANENBAUM, A. S.; BOS, H. Sistemas operacionais modernos. 3. ed. São Paulo: Prentice Hall, 
2010.
TIOBE Index for July 2020: July Headline: All time high for the R programming language. 
TIOBE Index. 2020. Disponível em: https://www.tiobe.com/tiobe-index. Acesso em: 19 out. 
2020.
Lab
o
rató
rio
 d
e
 Pro
g
ram
ação
 I
W
ag
n
e
r M
e
n
d
e
s V
o
ltz
Código Logístico
59595
Fundação Biblioteca Nacional
ISBN 978-85-387-6690-2
9 7 8 8 5 3 8 7 6 6 9 0 2
	Página em branco
	Página em branco

Mais conteúdos dessa disciplina