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

Prévia do material em texto

Programador Java: 
Nível Básico 
 
 
 
 
Daniela Costa Terra
Formação Inicial e 
Continuada 
+ IFMG 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Daniela Costa Terra 
 
 
 
 
 
Programador Java: Nível Básico 
1ª Edição 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Belo Horizonte 
Instituto Federal de Minas Gerais 
2021 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
FICHA CATALOGRÁFICA 
Dados Internacionais de Catalogação na Publicação (CIP) 
 
T323p Terra, Daniela Costa. 
 Programador Java: nível básico [recurso eletrônico] / 
Daniela Costa Terra. – Belo Horizonte : Instituto Federal de 
Minas Gerais, 2021. 
 138 p. : il. color. 
 
 E-book, no formato PDF. 
 Material didático para Formação Inicial e Continuada. 
 ISBN: 978-65-5876-075-7 
 
 1. Java (linguagem de programação de computadores). 2. 
Lógica de programação. 3. Programação orientada a objetos. I. 
Título. 
 
 CDU: 004.43 
 Catalogação: Rosângela Marques de Souza - CRB-6/2126 
 
Índice para catálogo sistemático: 
Linguagem de Programação – 004.43 
 
 
 
 
Pró-reitor de Extensão 
Diretor de Programas de Extensão 
Coordenação do curso 
Arte gráfica 
Diagramação 
Carlos Bernardes Rosa Júnior 
Niltom Vieira Junior 
Daniela Costa Terra 
Ângela Bacon 
Eduardo dos Santos Oliveira 
© 2021 by Instituto Federal de Minas Gerais 
Todos os direitos autorais reservados. Nenhuma parte desta publicação poderá ser 
reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, eletrônico 
ou mecânico. Incluindo fotocópia, gravação ou qualquer outro tipo de sistema de 
armazenamento e transmissão de informação, sem prévia autorização por escrito do 
Instituto Federal de Minas Gerais. 
2021 
Direitos exclusivos cedidos ao 
Instituto Federal de Minas Gerais 
Avenida Mário Werneck, 2590, 
CEP: 30575-180, Buritis, Belo Horizonte – MG, 
Telefone: (31) 2513-5157 
Sobre o material 
 
 
 
Este curso é autoexplicativo e não possui tutoria. O material didático, incluindo suas 
videoaulas, foi projetado para que você consiga evoluir de forma autônoma e suficiente. 
 Caso opte por imprimir este e-book, você não perderá a possiblidade de acessar os 
materiais multimídia e complementares. Os links podem ser acessados usando o seu celular, 
por meio do glossário de Códigos QR disponível no fim deste livro. 
Embora o material passe por revisão, somos gratos em receber suas sugestões para 
possíveis correções (erros ortográficos, conceituais, links inativos etc.). A sua participação é 
muito importante para a nossa constante melhoria. Acesse, a qualquer momento, o 
Formulário “Sugestões para Correção do Material Didático” clicando nesse link ou 
acessando o QR Code a seguir: 
 
 
 
 
 
 
 
 
 
 
 
Para saber mais sobre a Plataforma +IFMG acesse 
https://mais.ifmg.edu.br 
 
Formulário de 
Sugestões 
http://forms.gle/b873EGYtkvK99Vaw7
https://mais.ifmg.edu.br/
 
 
 
 
 
 
Palavra do autor 
 
 
 
Prezado estudante, bem-vindo ao curso “Programador Java: Nível Básico”! 
A linguagem Java acabou de completar 25 anos desde que foi apresentada pela Sun 
Microsystems em maio de 1995. De o seu lançamento até hoje, ela desperta interesse de 
milhares de desenvolvedores. O Java permaneceu, em 2020, entre as três principais 
linguagens de programação de acordo com os índices mais importantes: Tiobe (TIOBE, 
2020), RedMonk (REDMONK, 2020) e PyPL (PYPL, 2020). Em cinco anos esteve em 
primeiro lugar nas estatísticas do Tiobe. Apenas em 2020 foi ultrapassada pela linguagem 
C devido o amplo uso de C em equipamentos médicos e à urgência da pandemia do COVID-
19 (INFOWORLD, 2020). 
Java é largamente empregada no desenvolvimento de aplicações cliente/servidor 
para ambiente Web. É base no desenvolvimento Android para a criação de aplicativos e é 
utilizada no desenvolvimento de aplicações para desktop e para sistemas embarcados. A 
popularidade da linguagem é confirmada pela alta requisição de profissionais. Numa busca 
pelo termo “vagas java”, no Google, ou por “Java”, no Indeed, são retornados mais de 1000 
postos em aberto no país. 
Este Curso tem o propósito de apresentar a você a sintaxe básica da linguagem Java, 
plataforma Java SE. Trata-se de uma iniciação à programação em Java anterior à 
abordagem orientada a objetos, própria da linguagem. O curso também serve de conteúdo 
em lógica de programação de computadores para iniciantes na área. A abordagem inclui os 
comandos básicos para controle de fluxo, as estruturas de dados indexadas, uma introdução 
à decomposição funcional e breve antecipação dos conceitos de classe e objeto. 
A divisão em módulos e sua realização em quatro semanas demandarão tempo para 
estudos e prática. Persistência e dedicação são características imprescindíveis para o 
desenvolvimento desse perfil profissional. Lembre-se disso, faça todas as atividades 
propostas e a cada conteúdo novo, copie, altere, compile e execute os trechos de código 
exemplificados. Afinal “programar só se aprende programando”. 
 
 
 
Bons estudos! 
 
A autora. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Bons estudos! 
Nome do autor. 
 
 
 
 
Apresentação do curso 
 
 
Este curso está dividido em quatro semanas, cujos objetivos de cada uma são apresentados, 
sucintamente, a seguir. 
 
SEMANA 1 
Introdução à linguagem Java: conceitos e plataforma. Estrutura de 
um programa em Java. Tipos de dados primitivos, declaração de 
variáveis e constantes e entrada/saída para console. 
SEMANA 2 
Operadores aritméticos e suas precedências. Operadores 
relacionais e lógicos e o comando de decisão (if simples e 
composto). Seleção entre múltiplas escolhas usando if encadeado e 
switch. 
SEMANA 3 
Laços de repetição determinados e indeterminados usando os 
comandos: while, do-while e for. Variáveis indexadas (vetores): 
sintaxe e manipulação. 
 
SEMANA 4 
Definindo funções e procedimentos em métodos estáticos Java. 
Treinando sintaxe Java em aplicações com interface gráfica 
(javax.swing). Introdução aos conceitos e à sintaxe para definição de 
classes e objetos. 
 
 
Carga horária: 40 horas. 
Estudo proposto: 2h por dia em cinco dias por semana (10 horas semanais). 
 
 
Apresentação dos Ícones 
 
 
Os ícones são elementos gráficos para facilitar os estudos, fique atento quando eles 
aparecem no texto. Veja aqui o seu significado: 
 
 
 
 
Atenção: indica pontos de maior importância no texto. 
 
Dica do professor: novas informações ou curiosidades 
relacionadas ao tema em estudo. 
 
Atividade: sugestão de tarefas e atividades para o 
desenvolvimento da aprendizagem. 
 
Mídia digital: sugestão de recursos audiovisuais para 
enriquecer a aprendizagem. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Sumário 
Semana 1 – Introdução à linguagem Java ..........................................................................15 
1.1. Linguagem e Plataforma Java ................................................................................15 
1.1.1. Bytecodes e o Ambiente de Execução ...................................................................17 
1.2. Introdução à Programação em Java .......................................................................20 
1.2.1. Palavras-chave, identificadores, comentários e convenções .................................22 
1.2.2. Variáveis, constantes e tipos primitivos ..................................................................25 
1.2.3. Entrada e Saída padrão .........................................................................................33 
1.2.4. Pratique ..................................................................................................................36 
Semana 2 – Instruções de sequência ................................................................................392.1. Operadores de atribuição, aritméticos e suas precedências ..................................39 
2.1.1. Outras funções matemáticas e a linearização de expressões aritméticas .............43 
2.1.2. Exercícios resolvidos ..............................................................................................45 
2.1.3. Pratique ..................................................................................................................47 
2.2. Controlando o fluxo de execução ...........................................................................48 
2.2.1. Operadores relacionais e lógicos ...........................................................................48 
2.2.2. Exercícios resolvidos ..............................................................................................52 
2.2.3. Pratique ..................................................................................................................52 
2.2.4. O comando IF simples ............................................................................................53 
2.2.5. Exercícios resolvidos ..............................................................................................54 
2.2.6. Pratique ..................................................................................................................55 
2.2.7. IF composto ............................................................................................................55 
2.2.8. Exercícios resolvidos ..............................................................................................57 
2.2.9. Pratique ..................................................................................................................58 
2.3 Comando de decisão: IF’s encadeados .................................................................59 
2.4 Comando de seleção: switch ..................................................................................63 
2.5 Exercícios resolvidos ..............................................................................................66 
2.6 Pratique ..................................................................................................................67 
Semana 3 – Laços de repetição e Vetores ..........................................................................69 
3.1 Laços de repetição .................................................................................................69 
3.1.1 O comando while ....................................................................................................70 
3.1.2 O comando do..while ..............................................................................................73 
3.1.3 Break e continue.....................................................................................................75 
file:///C:/Users/niltom.vieira/Downloads/(EBook+IFMG)%20-%20Programador%20Java%20nivel%20básico%20-.docx%23_Toc84427464
file:///C:/Users/niltom.vieira/Downloads/(EBook+IFMG)%20-%20Programador%20Java%20nivel%20básico%20-.docx%23_Toc84427473
file:///C:/Users/niltom.vieira/Downloads/(EBook+IFMG)%20-%20Programador%20Java%20nivel%20básico%20-.docx%23_Toc84427497
 
 
 
3.1.4 Laços com o comando For .....................................................................................77 
3.2 Exercícios resolvidos ..............................................................................................79 
3.3 Pratique ..................................................................................................................82 
3.4 Estruturas de dados indexadas: vetores ................................................................84 
3.5 Exercícios resolvidos ..............................................................................................88 
3.6 Pratique ..................................................................................................................92 
Semana 4 – Modularização: uma introdução ......................................................................93 
4.1 Evolução da programação ......................................................................................93 
4.2 Sub-rotinas e os desvios no fluxo de execução .....................................................94 
4.3 Procedimentos e funções em métodos estáticos ...................................................97 
4.4 Exercícios resolvidos ............................................................................................101 
4.5 Pratique ................................................................................................................103 
4.6 POO, classes e objetos ........................................................................................105 
4.7 Pratique ................................................................................................................109 
Referências .......................................................................................................................111 
Apêndice I – Manuais de instalação ..................................................................................113 
Introdução ..........................................................................................................................113 
Instalando o Oracle JDK 8 no Windows ............................................................................114 
Instalando o OpenJDK 8 no Windows ...............................................................................117 
Instalando o Apache NetBeans no Windows .....................................................................123 
Instalando o OpenJDK 8 no Linux Ubuntu.........................................................................125 
Instalando o Apache NetBeans no Linux Ubuntu ..............................................................127 
Apêndice II – Tutorial rápido do NetBeans ........................................................................129 
Criando um projeto Java....................................................................................................129 
Inserindo Classes a um projeto .........................................................................................131 
Executando um programa no NetBeans ............................................................................132 
Currículo do autor ..............................................................................................................135 
Glossário de códigos QR (Quick Response) .....................................................................137 
 
 
file:///C:/Users/niltom.vieira/Downloads/(EBook+IFMG)%20-%20Programador%20Java%20nivel%20básico%20-.docx%23_Toc84427510
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
15 
 
 
 
 
 
 
 
 
Mídia digital: assista ao vídeo “Aula 1 - Apresentação do 
Curso”. 
 
1.1. Linguagem e Plataforma Java 
A linguagem Java acaba de completar 25 anos desde que foi apresentada pela Sun 
Microsystems em 23 de maio de 1995. O projeto foi liderado pela equipe de James Gosling 
com a linguagem originalmente batizada de “Oak”1, posteriormente Java, em alusão ao Java 
Coffee, o café da ilha de Java na Indonésia. 
A linguagem teve concepção baseada no paradigma orientado a objetos, 
caracterizada pela simplicidade com sintaxe baseada na linguagem C. Desde o início 
possuía recursos de programação voltados para o acesso à rede e ambientes distribuídos, 
sendo independente de arquitetura e portável, oferecendo robustez e segurança na 
execução dos códigos. Já naquela época o projeto foi norteado pela motivação de viabilizar 
uma espécie de “Internet das coisas” uma vez que a equipe buscava uma linguagem para a 
criação de softwares para serem embutidos aos dispositivos eletrônicos dos consumidores, 
como fornos micro-ondas e controles remotos. A intenção inicial mostrou-se um pouco à 
frente daquele tempo. Felizmente a linguagem seriacompletamente apropriada ao ambiente 
Web2 da Internet que estava surgindo naquele momento. 
Lembre-se, a Internet é frequentada por vários tipos de computadores equipados com 
diferentes arquiteturas de CPU3 onde executam diferentes sistemas operacionais. A 
linguagem Java foi assim impulsionada para a dianteira porque a Web dependia de 
programas para deixá-la mais dinâmica, e esses programas precisavam ser portáveis. 
 
 
1 Oak, do Inglês, significa ‘carvalho’. O nome é homenagem à árvore visualizada da janela do escritório de Gosling. 
2 World Wide Web (WWW), conhecida como Web, é um sistema de informação onde documentos e outros recursos 
identificados por um Uniform Resource Locators (URLs, como https://www.ifmg.edu.br) podem ser interligados por 
hipertexto e estão acessíveis pela Internet. 
3 CPU sigla, do Inglês, para Central Processing Unit ou unidade central de processamento (processador). 
Objetivos 
Introdução à linguagem Java: conceitos e plataforma. 
Estrutura de um programa em Java. Tipos de dados primitivos, 
declaração de variáveis e constantes e entrada/saída para 
console. 
Semana 1 – Introdução à linguagem Java 
 
Semana 1 – Introdução à linguagem Java 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
16 
 
Atenção: cada termo novo em negrito é um conceito 
importante da tecnologia Java. Busque compreender cada 
um, relendo o texto. Se necessário faça uma busca Google 
usando: definir <termoDeBusca> 
 
Java herdou sua sintaxe da linguagem C e seu modelo de objetos foi adaptado do 
C++. Foi concebida para simplificar a aprendizagem ‘sem reinventar a roda’ para o 
programador da época. Seu projeto de portabilidade era uma das principais vantagens. A 
maioria das linguagens de computador existentes era projetada para ser compilada para o 
código de máquina de um tipo específico de plataforma de hardware-software4. Embora 
fosse possível compilar um programa C/C++ para executar em qualquer dispositivo era 
necessário contar com um programa de tradução específico para aquela plataforma. Esse 
programa é chamado de compilador. Um compilador é responsável por converter o código 
fonte do programa, em formato textual, escrito pelo programador, em código objeto 
executável pela máquina (formato numérico binário). A construção de um programa tradutor 
desse tipo é cara e demorada. Deveria haver um compilador para cada plataforma de 
hardware/software (arquitetura de CPU + sistema operacional) algo inviável para o ambiente 
da Internet. A solução foi um ambiente híbrido composto de compilação e interpretação, 
descrito na próxima seção. 
A linguagem disponibiliza aos desenvolvedores um conjunto de ferramentas de 
desenvolvimento conhecido como kit de desenvolvimento Java (JDK5). O JDK inclui o 
compilador Java (javac), o executor de programas (java), o gerador de documentação de 
classes (javadoc), entre outros aplicativos. Essas ferramentas são utilizadas, inclusive, pelos 
ambientes de desenvolvimento (IDE6) Java voltados para melhorar a produtividade no 
trabalho de programar. 
Java, enquanto tecnologia, além de linguagem é também uma plataforma. Plataforma 
de software à medida que incorpora todo o ambiente de execução de programas. O ambiente 
de tempo de execução, denominado de JRE7, inclui o interpretador de bytecodes (vide seção 
1.2) conhecido como máquina virtual Java (JVM8) e um conjunto padrão de bibliotecas de 
classes (API9). A JVM que interpreta e executa aplicações Java é especializada ao ambiente 
de hardware/software do computador do usuário. A API Java é uma coleção de componentes 
de software (classes, interfaces, etc.) úteis para se criar outros programas em Java. 
 
 
4 Inclui o hardware (a CPU) que oferece uma linguagem de máquina e o software do sistema operacional que provê rotinas 
de baixo nível chamadas por um programa aplicativo. 
5 JDK da sigla, em Inglês, para Java Development Kit. 
6 IDE da sigla, em Inglês, para Integrated Development Environment. São softwares que oferecem uma gama de recursos 
para facilitar o desenvolvimento de programas. 
7 JRE da sigla, em Inglês, para Java Runtime Environment ou ambiente de execução Java. 
8 JVM da sigla, em Inglês, para Java Virtual Machine. A máquina virtual Java é responsável pela interpretação e execução 
de bytecodes Java. 
9 API da sigla, Application Programming Interface. A API do Java SE 8, por exemplo, pode ser acessada através do endereço 
https://docs.oracle.com/javase/8/docs/api/. 
https://docs.oracle.com/javase/8/docs/api/
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
17 
Com o advento do Java 2, lançado em dezembro de 1998, as novas versões do Java 
foram divididas em três plataformas: 
 A J2SE, hoje Java SE (Java Plataform, Standard Edition): é a plataforma base voltada 
para desenvolvimento desktop, incluindo alguns recursos de servidor. Fornece a 
funcionalidade central da linguagem e define tudo, desde os tipos e objetos básicos 
até classes de alto nível usadas para rede, segurança, acesso a banco de dados, 
desenvolvimento de interface gráfica com o usuário (GUI) e análise XML. 
 A J2EE, hoje o Java EE (Java Plataform, Enterprise Edition): é baseada na Java SE 
mas incluiu especificações e API adicional voltada para aplicações corporativas, 
comumente executadas em ambiente de servidor, multicamadas com base na Web. 
 A J2ME, hoje Java ME (Java Plataform, Micro Edition): é um subconjunto da API 
Java SE adicionada de bibliotecas específicas para o desenvolvimento de aplicativos 
para dispositivos com recursos limitados, como telefones celulares, PDAs, TV’s, set-
up-boxes, etc. 
Observe que a mesma linguagem é utilizada para o desenvolvimento, 
independentemente da plataforma ser SE, EE ou ME. Cabe esclarecer que, sendo o foco 
deste curso uma iniciação à programação, a plataforma Java SE é a mais apropriada, sendo 
pois a que utilizaremos neste curso. 
Posteriormente, ainda sob o controle da Sun, a tecnologia ganhou mais uma 
plataforma: a JavaFX. Esta nova plataforma estende tanto a Java SE quanto a Java ME com 
capacidades de construção de aplicações avançados para a Internet. Os aplicativos JavaFX 
usam mecanismos de mídia e gráficos acelerados por hardware para aproveitar as 
vantagens de clientes de alto desempenho e uma aparência moderna. Os aplicativos JavaFX 
podem ser clientes dos serviços da plataforma Java EE. 
Após aquisição da Sun pela Oracle, em 2010, a linguagem passou a ter nova política 
de atualizações. A partir da versão Java SE 9, lançada em 2017, novas versões terão 
lançamento a cada seis meses. Dessas, uma em cada três oferecerá suporte LTS10, assim 
essas versões serão lançadas de três em três anos. É recomendável trabalhar sempre com 
versões LTS no desenvolvimento Java. Essa política de gerenciamento de produto visa 
manter uma versão estável por um período maior do que as demais versões de atualização 
da linguagem. 
1.1.1. Bytecodes e o Ambiente de Execução 
A portabilidade do Java é baseada em um processo híbrido de compilação e 
interpretação. O código fonte, ou seja, o programa produzido pelo programador é um arquivo 
texto com extensão .java, como o exibido na Figura 1. O código fonte é uma coleção de 
sentenças que obedecem à sintaxe da linguagem e que descrevem o algoritmo que será 
 
 
10 LTS da sigla, em Inglês, para long term support. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
18 
executado. O conceito de algoritmo está relacionado ao passo-a-passo que define como 
será o processamento ou a transformação dos dados de entrada (input) em informação útil 
para saída (output). Todo programa representa um algoritmo a ser seguido pelo computador. 
Observe que os arquivos fonte de programas estãoem formato de texto. Esse formato 
não é inteligível pelo computador. Computadores apenas lidam com números, 
especificamente, números de base 2, ou base binária11. A CPU ou o processador é o 
componente do computador capaz de executar um conjunto reduzido de instruções 
numéricas (em binário) ou instruções de máquina. Ao conjunto dessas instruções chamamos 
de linguagem de máquina. Embora as linguagens de máquina sejam similares é 
interessante notar que cada arquitetura de CPU possui sua linguagem de máquina própria. 
Entenda arquitetura de CPU como uma espécie de modelo de CPU, como, p. ex., as CPU 
construídas segundo a arquitetura X86 da Intel. 
 
Figura 1 – Um exemplo de programa Java, um arquivo de código fonte (Teste.java) 
Fonte: Elaborado pela autora 
Portanto, para que um programa Java seja executado por qualquer computador, ele 
precisa ser traduzido o código de máquina da CPU desse computador. Em Java essa 
tradução é feita em duas etapas. A primeira delas fica a cargo do programador que deve 
compilar o programa utilizando as ferramentas do JDK (javac12), ou através do seus próprio 
ambiente de desenvolvimento (uma IDE como o NetBeans, por exemplo). 
 
 
 
11 Diferente da base decimal que emprega os dígitos de 0 à 9, a representação de números na base binária ou base 2 
apenas utiliza os dígitos 0 e 1. 
12 O javac é a ferramenta de compilação da linguagem Java disponível no JDK. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
19 
Figura 2 – Ambiente de programação (à esquerda) e execução do programa Java pelo usuário (à direita). 
Fonte: Elaborado pela autora 
Durante a compilação é feita a verificação da sintaxe do código fonte. Se a sintaxe do 
programa estiver 100% correta, o compilador irá gerar um arquivo de instruções em um 
formato que foi denominado de bytecode. Um arquivo de bytecodes tem extensão .class. 
Esta tradução da compilação é ilustrada na Figura 2, no quadro à esquerda. 
É interessante notar que as instruções em bytecode são muito próximas das 
instruções de CPU’s de máquina reais, de modo que traduzir um programa de bytecodes 
para código de máquina se torne um processo rápido e fácil. Aqui está o “pulo do gato” da 
portabilidade de James Gosling: a criação da linguagem de máquina virtual para o Java, o 
bytecode. 
A segunda etapa do processo de tradução é ilustrada na Figura 2, quadro da direita. 
Essa etapa ocorrerá sempre que um programa Java for solicitado para execução no 
computador do usuário. Observe que este computador poderá estar situado em qualquer 
lugar da Internet. Mais ainda, o dispositivo do usuário será equipado de alguma arquitetura 
de CPU (e, portanto, linguagem de máquina) possivelmente diversa daquela em que o 
programa foi compilado. 
Nesse momento, entra em cena o ambiente Java de execução, o JRE. O JRE inclui 
a JVM, a máquina virtual Java, que é responsável por verificar, interpretar e executar cada 
instrução em bytecode no arquivo .class ao traduzí-la em instrução real, conforme a máquina 
do usuário. Observe que aqui as instruções em bytecode serão interpretadas (traduzidas) 
para instruções de máquina nativa, ou seja, para instruções na linguagem de máquina do 
computador do usuário. A segurança desse processo é devida à verificação de bytecodes e 
a uma execução protegida, tarefas realizadas pela JVM. Veja que a JVM é um programa (ou 
software) que, por definir uma linguagem e realizar sua interpretação, é equivalente a uma 
máquina real. Agora você é capaz de entender porque dizemos “máquina virtual”. 
Embora, a princípio, códigos interpretados executavam mais lentamente, o processo 
de interpretação do Java foi altamente otimizado. A JVM passou ser equipada com 
compiladores JIT (just-in-time) que empregam técnicas de compilação dinâmica de bytecode 
para código de máquina, visando a melhoria do desempenho. Isso permite uma performance 
de execução comparável aquela de códigos compilados de linguagens como C/C++. 
 
Atividade: para fixar os conceitos, vá até a sala virtual e 
realize a atividade “Sobre a tecnologia Java”. 
 
Mídia digital: assista ao video “Aula 2 - Um Hello World em 
Java” disponível na 1º semana do curso. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
20 
1.2. Introdução à Programação em Java 
 
Dica do professor: consulte o “Apêndice I – Manuais 
de Instalações” para fazer a instalação das 
ferramentas de desenvolvimento adotadas no curso: 
JDK e NetBeans. Elas serão usadas nesta seção. 
 
Como Java é uma linguagem que segue o paradigma de programação orientada a 
objetos (POO), programas em Java são estruturados em unidades de código que 
chamamos de classe. Os conceitos de classe e objeto serão introduzidos na última semana 
deste curso. Por agora, lembre-se que o código de um programa Java poderá estar inserido 
dentro de uma ou mais classes. Os comandos Java dentro de uma classe são escritos em 
sub-rotinas que chamamos de métodos. Cada método define uma pequena porção do 
processamento da classe, ou seja, é uma operação, um subalgoritmo. Um método só será 
executado quando receber uma chamada ou invocação. Métodos podem ser invocados pelo 
próprio programa ou pela JVM. 
 
Atenção: alguns trechos de código podem parecer 
complicados, a princípio. Java é uma linguagem 
orientada a objetos e esse paradigma envolve 
conceitos além do escopo deste programa. Isso não 
impedirá que você atinja seus objetivos no curso. 
Dentre as classes do seu código, ao menos uma delas, deve ser a classe principal. 
Uma classe principal é aquela que inclui o método main e este é o método invocado pela 
JVM! Isso ocorre para que a JVM, que está por trás da execução de todo programa Java, 
saiba de onde iniciar a execução do programa. Por esse motivo a assinatura (ou primeira 
linha) do método main deve ser rigorosamente escrita como é exibido na Figura 3. 
Escrevemos código Java em arquivos com extensão .java. Cada arquivo fonte (.java) 
pode incluir uma ou mais classes mas, no máximo uma delas poderá ser classe a pública ( 
public) do arquivo. Se um arquivo incluir uma classe pública ele deve ser nomeado, 
obrigatoriamente, com o nome da única classe pública nele definida (vide arquivo 
HelloWord.java da Figura 4). 
Observe que a sintaxe de métodos em Java inclui, nesta ordem: modificador de 
acesso, escopo (de classe ou de objeto), tipo de retorno (ou void, para ausência de 
retorno), nome do método e uma lista de definição de parâmetros entre parênteses. 
Um detalhe que não pode ser esquecido é que a linguagem Java é case-sensitive. 
Isso significa que o compilador irá fazer distinção entre letras maiúsculas e minúsculas. 
Assim o identificador ‘main’ é diferente de ‘Main’, ou de ‘mAin’, por exemplo. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
21 
 
Figura 3 – Sintaxe de métodos em Java. Assinatura do método ‘main’ 
Fonte: Elaborado pela autora 
Vamos entender a estrutura de uma classe Java? Para isso inicie o NetBeans. Crie 
um novo projeto chamado ‘helloworld’ e digite o código da classe ‘HelloWorld.java’ da Figura 
4. 
 
Dica do Professor: vá para o “Apêndice II – 
Tutorial rápido do NetBeans” e siga as instruções 
para criar um projeto Java. 
Agora podemos executar o programa. No NetBeans, pressione o botão para salvar. 
Observe que o código da classe HelloWorld é automaticamente compilado. Essa opção de 
compilação automática é uma configuração padrão do NetBeans e pode ser alterada. Em 
seguida, execute o projeto. Este programa é muito simples, apenas enviará para a saída, no 
console, a frase “Alô mundo!” (Figura 5). 
 
 
Figura 4 – Estrutura de uma classe Java 
Fonte: Elaborado pela autora 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
22 
 
 
 
Figura 5 – Compilação sem erros e resultadoda execução de HelloWord 
Fonte: Elaborado pela autora 
1.2.1. Palavras-chave, identificadores, comentários e convenções 
Observe as considerações sobre sintaxe e escrita de código a seguir. Elas serão úteis 
daqui em diante. 
Palavras-chave são palavras reservadas que possuem significado específico para o 
compilador. Você já viu algumas delas no código da classe HelloWorld acima: class, public, 
void. O Quadro 1, a seguir, exibe outras palavras-chave do Java. Não é necessário decorá-
las. Elas serão naturalmente memorizadas a partir da sua prática. 
 
Quadro 1 – Palavras reservadas da linguagem Java 
Fonte: Elaborado pela autora 
 
Existem regras para nomes ou identificadores em Java. Identificadores são usados 
para nomear classes, métodos, variáveis, constantes, atributos, etc. definidos pelo 
programador. Isso é necessário para que o compilador identifique corretamente esses 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
23 
elementos no código e os diferencie das palavras reservadas da linguagem. No Quadro 2 
são exibidos alguns exemplos e contraexemplos de identificadores. É importante observar 
que, embora permitidos, caracteres acentuados (é, ó, ç, etc.) devem ser evitados em nomes 
de identificadores. 
 
Quadro 2 – Regras para nomear identificadores em Java 
Fonte: elaborado pela Autora. 
Comentários de código servem para inserir texto, no meio do programa, com o 
objetivo de explicar trechos de códigos, de classes, de métodos, etc. Comentários são 
desconsiderados pelo compilador e são importantes para documentar programas 
complexos. Lembre-se que nem sempre o programador que escreveu o programa será 
aquele que fará modificações futuras nele. Comentar código faz parte das boas práticas de 
programação. O Quadro 3 exibe os tipos de comentário do Java. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
24 
 
Quadro 3 – Tipos de comentário em Java 
Fonte: Elaborado pela autora 
 
Convenções de codificação são maneiras de escrever código e estão relacionadas 
também a boas práticas. Os programadores de uma linguagem seguem suas convenções 
para produzir códigos legíveis, limpos. As convenções ajudam na manutenção dos 
programas uma vez que agilizam sua leitura. Essa percepção é clara quando trabalhamos 
com POO. Como exemplo, ao encontrar a sentença CaixaEletronico.reiniciar() um 
programador Java com segurança poderá concluir que se trata de chamada ao método 
estático reiniciar da classe CaixaEletronico. Sem seguir uma convenção esse tipo de 
conclusão não seria possível o que dificultaria a leitura e a manutenção do programa. O 
Quadro 4 exibe as convenções de codificação mais comuns do Java. 
 
 
 
 
 
 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
25 
 
Quadro 4 – Convenções de codificação em Java 
Fonte: Elaborado pela autora 
 
 
 
 
Mídia digital: Assista ao vídeo “Aula 3 - 
Variáveis/Constantes”, disponível na 1º semana do 
curso. 
 
Atividade: Estude as duas subseções seguintes. Em 
seguida, resolva os primeiros exercícios propostos deste 
livro. 
1.2.2. Variáveis, constantes e tipos primitivos 
Para que o computador transforme dados em informação13 útil ao usuário, três etapas 
são necessárias (Figura 6). Primeiramente, o computador deve ser equipado de maneira 
que os dados para o processamento sejam transmitidos ao programa. Os dispositivos de 
entrada de dados acoplados ao computador fazem esse papel. Teclados, câmeras de vídeo, 
mouse, microfone e scanner, por exemplo, permitem que a informação externa ao sistema14 
seja traduzida em informação numérica (digital). Quando pressionamos uma tecla no 
teclado, por exemplo, um código associado à tecla é convertido em sinal digital e informado 
ao programa em execução. Para que esses dados de fontes externas (input) sejam 
manipulados pelo programa devem ser armazenados temporariamente na memória 
 
 
13 Aqui pretende-se intuir uma pequena distinção entre dados (brutos, sem significado) e informação (dados rotulados, 
com significado) para uso humano. Em outros pontos do texto, dados e informações serão usados como sinônimos. 
14 Entenda sistema como sistema computacional. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
26 
principal15 do computador. A próxima etapa é processar esses dados para produzir a saída 
do algoritmo. Cálculos, classificações, conversões e outras operações de transformação 
fazem parte do processamento durante a execução do programa. Por último, as informações 
produzidas pelo processamento, também manipuladas em memória, são preparadas para 
envio aos dispositivos de saída (output). Monitores, impressoras, redes de comunicação, 
etc., são exemplos de aparato tecnológico que comunicam as informações geradas pelo 
processamento ao ambiente externo (externo ao programa). 
 
Figura 6 – Esquema básico da computação: entrada-processamento-saída 
Fonte: Elaborado pela autora 
Suponha que você fará um programa para calcular o consumo médio de combustível 
de um veículo durante uma viagem. Para isso, a distância total, em km, percorrida e a 
quantidade de combustível, em litros, consumida na viagem são dados de entrada que 
devem ser informados por fontes externas ao programa. Vamos supor que sejam informados 
pelo usuário do programa quando este estiver executando. A Figura 7 apresenta as entradas 
e a saída. Observe que o programa deve receber esses dois dados como entrada (input) a 
fim de realizar o processamento exigido. O processamento é feito através de um cálculo 
simples: distância percorrida dividida pela quantidade de combustível. Um bom rótulo que 
poderíamos dar ao resultado deste processamento seria ‘consumo médio’ ou ‘consumo na 
viagem: <xxxx> km/litro’. Este resultado uma vez gerado poderá ser informado ao usuário 
através de uma mensagem no monitor. É esta informação preparada pelo programa que 
denominados saída, ou output, do algoritmo16. Nenhum programa seria útil se não 
produzisse saída, seja ao monitor, impressora, rede, ou para outro programa, como um 
sistema de banco de dados, por exemplo. 
 
 
15 Refere-se à memória principal (volátil) dos computadores pentes de DRAM ou caches (tipo SRAM), e à memória 
secundária (permanente) os dispositivos como HD, pen-drive (memórias flash), etc. 
16 Um programa é um algoritmo, ou seja, uma sequência de instruções a serem seguidas pelo computador. O conceito de 
algoritmo é atribuído à área de programação de computadores mas sua origem remonta à Matemática. Algoritmo é uma 
sequência de passos ou de ações que se executadas resultam no objetivo esperado. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
27 
 
Figura 7 – Entradas e saída do programa “Eficiência de combustível“ 
Fonte: Elaborado pela autora 
Observe a representação deste algoritmo no fluxograma da Figura 8, a seguir. Há um 
símbolo específico para definir onde o algoritmo inicia e onde termina, esse é o símbolo de 
terminal. Para descrever os dados de entrada é usado um trapézio (observe as entradas 
‘distancia’ e ‘litros’). O processamento é descrito dentro do retângulo e a saída é informada 
num símbolo que lembra o formato de um monitor antigo. Dentro de cada um desses 
símbolos são descritos quais dados são entrada, qual é o processamento executado e qual 
é a informação de saída gerada pelo algoritmo, respectivamente. Veja que a informação de 
saída deve ser trabalhada para apresentação ao usuário. Supondo que o valor do consumo 
médio calculado seja igual a 12.00 o programa representado no fluxograma irá apresentará 
ao usuário a mensagem: “Consumo na viagem: 12.00 km/litro”. 
 
Figura 8 – Fluxograma do algoritmo “eficiência de combustível” 
Fonte: Elaborado pela autoraPlataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
28 
 Podemos agora definir o conceito de variável. Chamamos de variável a abstração17 
para um local (endereço) na memória que armazena um dado manipulado pelo programa. 
Todo dado envolvido no processamento será manipulado pelo programa como uma variável. 
As variáveis são armazenadas temporariamente na memória principal (volátil) do 
computador18. Variáveis podem se referir tanto a dados de entrada (inputs) quanto a dados 
de apoio ao processamento (para cálculo do output). Variáveis possuem três aspectos 
fundamentais (vide Figura 9): nome, tipo de dados e conteúdo. 
O nome é um identificador para a variável que segue as regras de identificadores vistas 
na seção 1.4. O nome da variável é como um rótulo para o local na memória do computador 
onde ela está armazenada. 
O segundo aspecto é o tipo. Toda variável deve ser de um determinado tipo de dados. 
Um tipo de dados define tanto o formato (numérico, caractere, cadeia de caracteres, etc.) 
quanto o comprimento em bytes19 gasto para guardar a variável na memória do 
computador. 
Quanto mais dígitos binários, isto é, bits/bytes disponíveis para um tipo de dados, maior 
será a faixa de valores que a variável poderá assumir. Para sua compreensão, veja que se 
consideramos tipos de dados numéricos, p. ex., com três dígitos decimais, poderemos 
representamos valores não negativos de 0 até 999. Da mesma maneira, com três dígitos 
binários seria possível armazenar números não negativos de 0 a 7. Lembre-se que para um 
programa pensamos em dados na memória ocupando conjuntos de 8 dígitos binários (bits), 
ou seja, pensamos na largura em bytes. 
 O terceiro aspecto sobre as variáveis é o seu conteúdo. O conteúdo de uma variável, 
em determinado instante da execução de um programa será um valor dentro da faixa de 
valores permitida pelo tipo de dados para ela definido. 
 
 
 
17 As linguagens de alto nível, como Java, C/C++, Python, etc., abstraem do programador as dificuldades de se manipular 
diretamente o hardware. A declaração de uma variável no programa é suficiente para se referir a um dado armazenado em 
algum endereço na memória primária do computador. 
18 A memória principal do computador inclui a dos pentes de DRAM e as memórias cache de CPU (SDRAM). São 
tecnologias de armazenamento volátil que operam em velocidades mais compatíveis àquela dos processadores, 
diferentemente das memórias secundárias, de armazenamento permanente, que embora grandes são lentas. 
19 Byte é um conjunto de 8 dígitos binários, ou bits. Um bit é a menor unidade de informação digital. Um bit armazena um 
dígito 0 ou um dígito 1, na base binária. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
29 
 
Figura 9 – Toda variável possui nome, tipo de dados e conteúdo 
Fonte: Elaborado pela autora 
 
É importante lembrar que há tipos de dados compostos e tipos de dados simples. 
Neste curso iremos trabalhar muito com os tipos de dados simples da linguagem Java: os 
tipos de dados primitivos. O Quadro 5 enumera os tipos primitivos e respectivas faixas de 
valores para representação dos dados. 
Um conceito muito próximo ao de variável é o de uma constante. Da mesma maneira 
que variáveis, constantes devem ser definidas com um tipo de dados e um identificador 
(nome). Uma constante nada mais é que uma ‘variável’ que só pode assumir um único valor 
do início ao fim do programa. Em oposição, o conteúdo de uma variável sofrerá alterações 
durante a execução do programa. 
 
Quadro 5 – Tipos primitivos da linguagem Java e faixa de valores permitidos 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
Para elaborar um programa é preciso primeiro, compreender perfeitamente qual é o 
problema a ser resolvido. Só assim é possível elaborar uma solução para o mesmo. Em 
seguida, vem a etapa mais difícil: codificar uma solução em formato de programa, isso é, 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
30 
uma solução computacional para o problema. É evidente que para os iniciantes este é o 
maior desafio. Dizemos que aqui há um abismo a ser superado. Veja que a solução do 
problema, uma vez compreendida num esboço ‘manual’, ou através de uma planilha de 
cálculos deve ser descrita em instruções de linguagem de computador. 
Uma abordagem inicial para superar esse desafio é começar com a seguinte 
pergunta: “Quais dados serão manipulados? Isto é, quais serão as variáveis necessárias 
para o programa e quais devem ser seus tipos de dados?” Para responder esta pergunta 
busque identificar os elementos de dados que o programa precisará manipular a fim de gerar 
a saída esperada. No caso do nosso exemplo da eficiência de combustível os dados serão: 
a distância percorrida, o combustível gasto e o consumo médio que deve ser calculado. 
Seguindo as regras para identificadores da seção 1.4, dê nomes válidos e sugestivos para 
as variáveis. Por exemplo: distancia, qtdeCombustivel, consumoMedio. 
Em seguida é preciso definir seus tipos de dados. Vamos conhecer os tipos de dados 
primitivos da linguagem Java. Observe no Quadro 5 os tipos primitivos, suas as larguras em 
bits/bytes e respectivas faixas de valores permitidos. 
Observe que há tipos para números inteiros (byte, short, int e long) e para números 
reais, que podem incluir parte fracionária. Em programação esses tipos são chamados de 
ponto flutuante: float e double. 
Os tipos em ponto flutuante são representados internamente em notação científica, 
portanto podem ser usados para armazenar tanto números reais, quanto números inteiros. 
No entanto, veja que nem mesmo é possível representar em ponto flutuante todos os 
números entre 0 e 1. É preciso observar que os tipos float e double armazenam um número 
finito de dígitos após o ponto decimal. A quantidade de dígitos significativos define uma 
precisão finita para números representados em ponto flutuante, como indicado no Quadro 
5. Então, lembre-se que todo número real, inteiro ou fracionário, pode ser escrito usando 
notação científica. Veja esses exemplos: o inteiro 1200 pode ser escrito como 1.2x103 (ou 
1.2E+3); o número fracionário 0.1234993 em notação científica pode ser escrito como 
1.234993E-01 (ou 1.234993 x 10-1). 
É importante dizer que dos dois tipos para ponto flutuante, o tipo double é o mais 
usado. Todas as funções matemáticas da biblioteca Java (a classe Math) retornam valores 
do tipo double (vide seção 1.6) 
Outra questão é que a definição de tipo para uma variável deve ser contextualizada 
segundo o problema tratado. Se o deslocamento é referente a uma aeronave que vai da 
Terra até Plutão, p. ex., o consumo ou a distância percorrida assumiriam valores 
astronômicos demais que não caberiam na faixa de valores armazenáveis por uma variável 
do tipo int, por exemplo. Aliás para uma representação exata da distância incluindo possíveis 
frações de quilômetros dentre os tipos primitivos sobrariam duas opções: float ou double. 
Veja que a distância estimada é de cerca de 5 bilhões de quilômetros, então, se 
considerarmos armazenar esta variável em ponto flutuante a precisão oferecida pelo tipo 
float pode não ser suficiente. A opção nesse caso deverá ser o tipo double. Na dúvida sobre 
o crescimento dos dados a escolha deve recair sobre o tipo de dado que oferece a maior 
faixa de valores. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
31 
Você deve estar se perguntando, “como se faz para representar uma frase, isto é, 
uma cadeia de caracteres em um programa?” 
A resposta é que, embora o Java não ofereça um tipo primitivo para cadeias, a 
linguagem oferece a classe String. A boa notícia é que declaramos variáveis de tipo String 
da mesma forma que variáveis de tipos primitivos. Nesse momento é bom ilustraro fato de 
que as duas grandes categorias de tipos de dados em Java são: os tipos primitivos e os tipos 
que são classes. Neste curso conheceremos além da classe String algumas outras comuns 
e úteis para programar, todas elas da biblioteca de programação: a API do Java SE. 
Não podemos esquecer dos tipos char e boolean. O tipo char representa um 
caractere alfanumérico da tabela Unicode. A tabela Unicode permite a representação de 
basicamente todos os caracteres de todos os alfabetos do globo. Já o tipo boolean serve 
para armazenar duas possibilidades de valores: true ou false. Variáveis booleanas são úteis 
para dados que permitem valores binários do tipo sim ou não, falso ou verdadeiro, ligado ou 
desligado, etc. 
O último passo dessa seção é apresentar a sintaxe Java para definição de variáveis: 
 
 
Atenção: toda sentença em Java deve ser finalizada 
com um sinal de ponto-e-vírgula ; 
 
A sintaxe para constantes é análoga: 
 
 
O código a seguir define as variáveis do problema da eficiência de combustível. Como 
esses dados são valores que podem ter parte fracionária, serão definidos como sendo do 
<tipo> <declaracao
1
>,..., <declaracao
n
>; 
Onde <tipo> é o tipo de dados das variáveis que, para mais de uma, virão 
separadas por vírgula 
O <tipo> precede a <declaracao
i
> que consiste em: 
• <variavel> [= <inicialização>] 
Onde <variavel> é um identificador para a variável seguido, 
opcionalmente, de =<inicialização> em que <inicialização> é uma 
expressão que define um valor inicial para a variável 
final <tipo> <declaracao
1
>,..., <declaracao
n
>; 
Onde final é a palavra-chave que define uma constante. <tipo> e 
<declaracaoi> são como para as variáveis 
 
double distancia, qtdeCombustivel, consumoMedio = 0; 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
32 
tipo double. Outra opção é declará-los como float. Observe a atribuição de 0 (zero) à 
consumoMedio informando seu conteúdo inicial. Esta atribuição é opcional já que o valor 
de consumoMedio será calculado durante o programa. Aqui o objetivo é ilustrar a 
inicialização de uma variável na sua declaração. 
 
Mais exemplos de declaração de variáveis são dados a seguir. Observe que valores 
do tipo char devem ser delimitados por ‘ e ‘ (aspas simples). Já uma cadeia em uma variável 
do tipo String é delimitada entre “ e “ (aspas duplas). 
Outro detalhe é que, as variáveis do tipo float quando recebem valores fixos no código 
(o que chamamos literais) devem ser sufixados com um ‘f’ ou um ‘F’. Isso ocorre porque os 
compiladores Java traduzem um valor literal em ponto flutuante automaticamente para o tipo 
double (8 bytes). Sendo assim um erro ocorreria indicando que poderá haver perda de 
precisão quando um valor em 8 bytes (double) fosse copiado diretamente para 4 bytes 
(float). Nesse caso, o compilador acusando erro obriga o programador a tratar o caso. 
Portanto, insira o sufixo para indicar que o literal é um float! 
 
Deve ser lembrado que toda variável ou constante em Java deve ser inicializada antes 
do seu primeiro uso. Usar o conteúdo de uma constante ou variável sem atribuir valor faz 
com que o compilador acuse o erro exibido no exemplo da Figura 10. Na linha 14 da classe 
o conteúdo da variável y é solicitado gerando a mensagem de erro: “variável y não foi 
inicializada”. 
 
 
Figura 10 – Erro devido uso sem inicialização da variável y 
byte diaDaSemana = 1; //byte é apropriado! De 1 (dom) à 7 (sáb) 
short populacaoLavrasNovas = 1500; // estima-se que a população desse lugarejo no 
 // alto da serra não ultrapasse 1000 habitantes 
int mortesCoronaVirusBrasil; // será menor que a população brasileira (cerca de 209 milhões) 
boolean aprovado = true; 
float salario = 3955.00F; //para valores float inclua o sufixo F ou f 
double populacaoColoniaDeBacteria = 10E27; // o mesmo que 1027 informado em notação 
 // científica. Após o E é indicado o expoente 
char c = ‘a’ ; 
char alfanumerico = ‘7’; //esse é o caractere alfanumérico ‘7’ que é diferente do inteiro 7! 
 
String nomeCompleto = “João de Barro”; //cadeias são informadas entre aspas duplas! 
 
 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
33 
Fonte: Elaborado pela autora 
Antes de completar nosso programa exemplo será preciso compreender como obter 
dados de entrada, a partir do teclado, e como enviar informações para a saída que sejam 
exibidas no console (modo texto) do monitor. 
 
 
Mídia digital: vá até a sala virtual e assista ao vídeo “Aula 4 
– Entrada e Saída”, disponível na semana 1. 
 
1.2.3. Entrada e Saída padrão 
Para enviar dados para o monitor, em modo texto, usamos o stream20 System.out 
da API Java. Com ele podemos enviar cadeias de caracteres para a saída padrão. Observe 
como usamos o comando: 
System.out.print (<expressão>) 
 Para imprimir <expressão> e manter o cursor na mesma linha 
 
System.out.println(<expressão>) 
 Para imprimir <expressão> e pular o cursor para a próxima linha 
 
Em ambos os casos <expressão> é uma cadeia de caracteres informada entre aspas duplas 
ou uma combinação de cadeias, variáveis/constantes concatenados com +. 
 
 
Exemplos: 
System.out.println(“Hello World!”); // Saída: Hello World! 
System.out.println(“Soma = ”+ (1200 + 27)); // Saída: Soma = 1227 
System.out.println(“Consumo médio: ”+ consumoMedio); 
// Saída: Consumo médio: <conteúdo_variável_consumoMedio> 
 
Agora, retorne à classe HelloWorld da seção 1.2. Veja se você será capaz de 
compreender aquele código um pouco mais. 
 
 
20 Stream é o termo em Inglês que significa um fluxo, nesse caso de dados bytes ou caracteres. Toda entrada e saída em 
Java é realizada através de classes que implementam e filtram fluxos de caracteres ou de bytes. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
34 
Em relação à entrada de dados um dos recursos que podemos usar em Java é a 
classe Scanner da API. Esta classe facilita a obtenção de dados do stream de entrada pois 
oferece métodos que formatam os dados para os tipos primitivos do Java. Observe as 
opções disponíveis de métodos que podemos usar para leitura de dados no Quadro 6. 
 
Quadro 6 – alguns métodos de leitura com a classe Scanner 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
Para ler com Scanner é preciso seguir as etapas abaixo: 
1. Importação do pacote da classe Scanner. Inclua no início da classe, abaixo 
da clausula package, a cláusula import: 
𝑖𝑚𝑝𝑜𝑟𝑡 𝑗𝑎𝑣𝑎. 𝑢𝑡𝑖𝑙. 𝑆𝑐𝑎𝑛𝑛𝑒𝑟; 
2. Criação do objeto Scanner para realizar a entrada de dados. Dentro do método 
main(), antes de realizar a leitura do teclado: 
𝑆𝑐𝑎𝑛𝑛𝑒𝑟 < 𝑒𝑛𝑡𝑟𝑎𝑑𝑎 > = 𝑛𝑒𝑤 𝑆𝑐𝑎𝑛𝑛𝑒𝑟(𝑆𝑦𝑠𝑡𝑒𝑚. 𝑖𝑛); 
3. Empregue, para cada tipo primitivo, o método apropriado da classe conforme 
o Quadro 6. 
Podemos, enfim, codificar nosso primeiro programa útil que calcula a eficiência de 
combustível. Observe a classe da Figura 11. Transcreva esta classe para seu ambiente de 
desenvolvimento. Em seguida execute o programa para ver o resultado. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
35 
 
Figura 11 – Classe Java executável para o programa da eficiência de combustível 
Fonte: Elaborado pela autora. 
 
Como não há método apropriado na classe Scanner para leitura de um único 
caractere é preciso extrair o primeiro caractere da primeira palavra digitada pelo usuário. A 
extração do caractere é feita da primeira palavra que o método next() retorna. Veja como 
realizar a leitura da palavra e a extração do primeiro caractere dela em uma só linha na 
Figura 12, a seguir. 
Observe que este caractere pode ser maiúsculo ou minúsculo. Os métodos𝐶ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟. 𝑡𝑜𝐿𝑜𝑤𝑒𝑟𝐶𝑎𝑠𝑒 () e 𝐶ℎ𝑎𝑟𝑎𝑐𝑡𝑒𝑟. 𝑡𝑜𝑈𝑝𝑝𝑒𝑟𝐶𝑎𝑠𝑒() retornam o caractere passado entre 
parênteses como minúsculo e maiúsculo, respectivamente. Veja no código da Figura 12, 
linhas 26 e 30, como tratar a conversão de caracteres entre maiúsculo e minúsculo. 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
36 
 
Figura 12 – Classe com exemplos de leitura de caracteres e transformação de case 
Fonte: Elaborado pela autora 
 
1.2.4. Pratique 
1) Enumere os tipos de dados primitivos da linguagem Java. 
 
2) Conceitue variáveis e constantes e descreva sua sintaxe de declaração. 
 
3) Supondo que seja necessário armazenar os valores abaixo em programas. Aponte que 
tipo de dado ou que tipos, se houver mais de um, podem ser utilizados para armazenar 
cada valor. 
a) 613 
b) 613,0 
c) -613 
d) ‘6’ 
e) -3.012 x 1015 
f) 1.7 x 1012 
g) -28.3 x 10 -23 
h) ‘F’ 
i) “Curso de Programação em Java para Iniciantes” 
j) Dois estados: ligado ou desligado 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
37 
4) Faça um programa em Java para somar dois números inteiros informados pelo usuário. 
Lembre-se que é necessário que sua classe Java tenha o método main, isto é, que sua 
classe seja uma classe executável. 
 
5) Indique as saídas para o programa a seguir, em duas situações: 
a) Supondo que o usuário informe 3 para x e 5 para y 
b) Supondo que o usuário informe -5 para x e 7 para y 
 
Figura 13 – Classe Java executável 
Fonte: Elaborado pela autora 
6) Faça um programa em Java para ler o nome, o nome do meio e o sobrenome do usuário. 
O programa deve extrair os caracteres iniciais de cada parte do nome. Em seguida, cada 
caractere deve ser convertido para maiúsculo. 
Pede-se: 
 Supondo que você tenha dado os identificadores p, s, e t às variáveis dos 
caracteres iniciais de cada parte do nome, imprima o conteúdo das três variáveis 
na sequência, usando o comando: 
𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡(𝑝); 𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡(𝑠); 𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡(𝑡); 
 Agora imprima usando o comando abaixo. Verifique que os valores inteiros 
referentes a cada caractere serão somados e resultado será exibido. Isso ocorre 
porque com o tipo char é possível realizar a operação de soma de seus números 
inteiros associados. Lembre-se que cada caractere Unicode possui um número 
inteiro correspondente 
𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡𝑙𝑛(𝑝 + 𝑠 + 𝑡); 
 O problema anterior pode ser ajustado com o uso de uma String vazia 
concatenada aos caracteres. Assim o compilador realizará a concatenação das 
cadeias referentes aos caracteres com a String “”, ao invés de somar seus valores 
na tabela de caracteres: 
𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡("" + 𝑐 + 𝑑 + 𝑒); 
 
7) Faça um programa em Java para obter o nome e a idade do usuário. Seu programa deve 
calcular e exibir o nome e a idade que o usuário terá em 2049. Exiba uma mensagem no 
formato: < 𝑣𝑎𝑟𝑁𝑜𝑚𝑒 > 𝑣𝑜𝑐ê 𝑡𝑒𝑟á 𝑥𝑥 𝑎𝑛𝑜𝑠 𝑒𝑚 2049. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
38 
 
Atividade: após concluir a 1º semana de estudos, vá até 
a sala virtual e resolva a atividade “Programando em 
Java: final da 1º etapa”. 
 
 
 
 
Nos encontramos na próxima semana. 
Bons estudos! 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
39 
 
 
 
 
 
 
 
 
Mídia digital: vá até a sala virtual e assista aos vídeos 
das aulas 5 e 6 sobre “Aritmética e funções”. Eles estão 
disponíveis na semana 2. 
 
Atividade: após estudo da seção a seguir, para fixação 
resolva os exercícios práticos propostos, na sequência. 
 
2.1. Operadores de atribuição, aritméticos e suas precedências 
Usamos o símbolo = para atribuir valores a variáveis e constantes. O = é o operador 
de atribuição. Observe a sintaxe e os exemplos a seguir: 
 
Agora veja os operadores aritméticos binários do Quadro 7. Um operador é dito 
binário quando é aplicado a dois operandos. 
Objetivos: 
Operadores aritméticos e suas precedências. Operadores 
relacionais e lógicos e o comando de decisão (if simples e 
composto). Seleção entre múltiplas escolhas usando if 
encadeado e switch. 
<variavel_ou_constante> = <expressão>; 
 Onde <expressão> é qualquer expressão que quando computada retorne um valor 
compatível ao tipo da variável ou constante 
Exemplos: 
 int populacao = 200000000; 
 double area = (12.45 * 21.50); // area = 12.45 x 21.50 = 267.675 
 double nota = 8.7; 
 boolean aprovado = (nota > 6)? true: false; //sendo nota igual a 8.7, aprovado= true 
 float x = 1.9E-7; // x = 1.9 x 10-7 
 char c = ‘A’; 
 String sobrenome = “Planalto”; 
 String nome = “Jorge Adam ” + sobrenome; // nome = ”Jorge Adam Planalto” 
 
 
 
 
Semana 2 – Instruções de sequência 
 
Semana 1 – Introdução à linguagem Java 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
40 
 
Quadro 7 – operadores aritméticos binários 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
 
Veja também que o mesmo operador de divisão, /, pode ser usado para divisão inteira 
e para divisão exata. Quando ambos os operandos são inteiros é feita uma divisão inteira. 
Quando um dos operandos é ponto flutuantes, seja float ou double, a divisão será exata. 
Atenção deve ser dada aos literais inteiros informados no código. Se a necessidade for uma 
divisão exata envolvendo literais inteiros será preciso acrescentar um ponto decimal ao 
literal: 
 
Quanto aos operadores unários esses são aplicados a apenas um operando. Há dois 
operadores aritméticos unários muito comuns: o incremento (++) e o decremento (- -). O 
incremento soma um ao operando. O decremento subtrai um do operando. O Quadro 8 
apresenta ambos e dá exemplos. 
Exemplos: 
 
double indice = 27/100; // indice = 0 (divisão inteira!) 
 
double indice = 27.0/100; // indice = 0.27 (divisão exata) 
 // 27.0 é interpretado como ponto flutuante 
 
double indice = 27./100; // indice = 0.27 (divisão exata) 
 // basta acrescentar um ponto decimal, pois 27. = 27.0 
 
double indice = 27/100. ; // indice = 0.27 (divisão exata) 
 // 100. é interpretado como 100.0 
 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
41 
Fique atendo para os casos de incremento ou decremento pós fixado dentro de 
expressões. Nesse caso, o valor da variável é utilizado na expressão antes que a operação 
de incremento/decremento seja efetuada. Portanto, incremento e decremento pós fixado 
quando usados dentro de expressões serão calculados apenas após a avaliação da 
expressão. 
Por último, é bom saber que há versões contraídas para todos os operadores 
aritméticos. Essas versões fazem o uso do valor atual da variável à esquerda do sinal de 
atribuição com o valor da expressão do lado direito. Observe os exemplos abaixo: 
 
 
Quadro 8 – operadores de incremento/decremento 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
 
Quando mais de um operador aparece em uma expressão aritmética é preciso 
compreender qual operação é realizada primeiro. O Quadro 9 resume a precedência de 
operações. 
int valor = 14; 
valor += 27; // equivalente a valor = valor + 27. Então, valor = 14 + 27 = 31 
 
double indice = 18.5; 
indice /=100; // o mesmo que indice = indice / 100. Então, indice = 18.5/100 = 0.185 
 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
42Quadro 9 – precedência de operadores aritméticos 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
 
Quanto menor a ordem de precedência do operador, maior será a prioridade da 
operação. Observe nos exemplos a seguir as operações que serão realizadas primeiro são 
indicadas nos comentários à direita, entre parênteses. 
 
Para forçar a precedência usamos parênteses ‘(‘ e ‘)’. Exemplos: 
 
 O Quadro 10 apresenta as versões contraídas para cada um dos operadores 
aritméticos e dá exemplos. 
y = a + b * c; // y = a + (b * c); 
y = a + b % c; // y = a + (b % c); 
y = a * b % c; // y = (a * b) % c; se ambos tem mesma precedência, o cálculo é feito 
 // da esquerda para direita 
y = a++ * b; // y = (a * b) ; ocorre primeiro 
 // a = a + 1; ocorre por último 
 
 
 
int y, a = 1, b = 2, c = 3; 
y = (a – b ) * c; // y = (1 – 2 ) * 3 = -3 
y = (a + b) % c; // y = (1 + 2) % 3 = 0 
y = (a – 2*b) – (b – c); // y = (1 – 2*2) – (2 – 3) = (1 - 4) – (-1) = -2 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
43 
 
Quadro 10 – operadores aritméticos em versão contraída 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
 
2.1.1. Outras funções matemáticas e a linearização de expressões 
aritméticas 
Você deve ter observado que não há operadores aritméticos em Java para 
potenciação. Para calcular potências e raízes em Java usamos os métodos disponíveis na 
classe Math. A classe Math é uma biblioteca de funções matemáticas. Veja algumas delas 
no Quadro 11. Observe que a maioria das funções de Math retornam valores do tipo double 
ou têm versões para retornar double, entre outros tipos de retorno. Esse último caso é o do 
método round() para arredondar um número ou uma expressão em ponto flutuante para o 
inteiro mais próximo. Assim é preciso ficar atento, pois se o argumento de round() é um float 
o resultado será um inteiro do tipo int. Se o argumento for double o retorno de round() será 
do tipo long. 
 
 
 
Atenção: o único pacote de classes que é importado 
automaticamente pelo compilador é o java.lang. Ele 
possui as classes básicas para programar e algumas 
que já usamos nos códigos: System e Math. 
 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
44 
 
Quadro 11 – Funções comuns da biblioteca Math 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
 
 
Dica do professor: para maiores detalhes, acesse a 
documentação oficial da API Java 8 SE a partir do site 
da Oracle. Procure pela classe/interface desejada e 
expanda sua documentação. 
 
 
A classe Math também inclui as constantes matemáticas do Quadro 12. Use-as para 
não incorrer em erros de precisão ao trabalhar com elas! 
 
Quadro 12 – Constantes matemáticas da classe Math 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
45 
O segundo objetivo desta seção é compreender sobre como escrever uma equação 
em um programa Java. Se na matemática usamos informar a precedência das operações 
com parênteses, colchetes e chaves, em programação usamos apenas os parênteses. Além 
disso, devemos linearizar as expressões. Novamente aqui os parênteses solucionam a situação 
pois indicam como priorizar as operações. Suponha, p. ex., uma divisão. Se ambos, numerador e 
denominador são expressões maiores cada uma deve ser resolvida antes que o computador calcule 
o quociente, não é mesmo? 
A expressão 𝑋 =
𝐴+
𝐵
 𝐶 
𝐷−
 𝐸
 𝐹
 , p. ex., será transcrita num programa em uma única linha: 𝑋 = (𝐴 +
 𝐵/𝐶) / (𝐷 – 𝐸/𝐹). O Quadro 13 ilustra na coluna à esquerda uma expressão e como a 
escrevemos na Matemática. À direita e a sua representação em Java. 
 
Quadro 13 – Linearização de expressões em programas 
Fonte: Elaborado pela autora 
 
2.1.2. Exercícios resolvidos 
1) Escreva um programa em Java que calcule a área de um círculo a partir do raio informado 
pelo usuário. 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
46 
 
Figura 14 – Classe Java executável – exercícios 1, seção 1.10 
Fonte: Elaborado pela autora 
 
2) Um vendedor recebe um salário fixo mensal mais um percentual de comissão sobre o 
total das vendas por ele realizadas. Ele deseja um programa para calcular o salário total 
a receber ao final no mês. Faça um programa em Java para obter do usuário as entradas: 
salário fixo, total de vendas e percentual de comissão sobre as vendas. Em seguida, 
calcule e exiba o salário final a receber. 
 
 Figura 15 – Classe Java executável – exercícios 2, seção 1.10 
 Fonte: Elaborado pela autora 
3) Uma arquiteta sugeriu cobrir o piso do chão de uma cozinha com um tipo específico de 
porcelanato. Sabe-se que a área da cozinha é um retângulo (x metros de largura por y 
metros de comprimento). O piso sugerido é um quadrado de 60 por 60 centímetros e o 
preço será pesquisado no mercado. Faça um programa em Java que leia do usuário as 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
47 
entradas necessárias: a medida dos lados da cozinha (x, y) e o preço em reais por 
unidade de piso. Seu programa deverá calcular e exibir a quantidade de pisos a comprar 
e o valor total gasto na reforma. 
 
 Figura 16 – Classe Java executável – exercícios 3, seção 1.10 
 Fonte: Elaborado pela autora 
 
2.1.3. Pratique 
1) Faça um programa que calcule a área de um retângulo de lados informados pelo usuário. 
O programa deve exibir a área calculada. 
 
2) Faça um programa que calcule a área de um triângulo de largura e altura dados pelo 
usuário. O programa deve exibir a área calculada. 
 
3) Uma cliente deseja adquirir uma calça jeans com desconto. Faça um programa que 
calcule o total a pagar pela calça após obter do usuário o preço sem desconto e o 
percentual de desconto para pagamento a vista. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
48 
 
4) Um aluno fez 5 provas na Universidade e deseja fazer um programa para calcular sua 
média final. Faça um programa que obtenha as cinco notas do aluno, calcule e exiba a 
média aritmética de suas notas. 
 
5) Faça um programa em Java que leia dois valores reais, n1 e n2, que correspondem a 
duas notas de um aluno. Seu programa deve calcular a média do aluno sabendo que a 
nota n1 tem peso 3.5 e a nota n2 tem peso 7.5. Observe que trata-se de uma média 
ponderada, e que a soma dos pesos é igual a 11. 
 
6) Um menino deseja pegar sua pipa que ficou agarrada em uma árvore a uma altura de x 
metros. Devido a alguns obstáculos ele precisará colocar a escada a exatamente y 
metros da árvore. Faça um programa que calcule e mostre o tamanho da escada 
necessária para conseguir atingir exatamente o local onde está a pipa. Lembre-se que 
para um triângulo retângulo, pelo teorema de Pitágoras temos que: 𝑧 = √𝑥2 + 𝑦2. 
 
 Figura 17 – Dados do problema 
 Fonte: Elaborado pela autora 
 
 
 
Mídia digital: assista ao vídeo “Aula 7 - Operadores 
relacionais e lógicos e o comando IF”, disponível na 
semana 2. 
 
 
2.2. Controlando o fluxo de execução 
2.2.1. Operadores relacionais e lógicos 
Até agora vimos o que nos possibilita fazer um programa contendo sentenças de 
código Java que são executadas exatamente na ordem em que aparecem: uma após a outra. 
É o que chamamos de “instruções de sequência”. Com elas conseguimos fazer muito pouco. 
É quase que como usar o computador para fazer o mesmo que fazemos em uma calculadora 
não programável: informamos uma sequência de cálculos e aguardamos o resultado. 
A partir de agora vamos trabalhar com instruções que possibilitam controlar ou alterar 
essefluxo sequencial. Isso significa que podemos selecionar se determinado conjunto de 
instruções será ou não executado a depender do que chamados da ‘instância de 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
49 
execução’. Veja um exemplo onde isso é aplicado. Suponha um programa para computar o 
peso ideal de uma pessoa. O peso ideal é calculado de maneira diferente a depender do 
sexo. Há uma fórmula para o peso ideal de homens e outra fórmula para mulheres. É claro 
que o programa precisa atender tanto homens quanto mulheres, seus possíveis usuários. 
Assim deverá executar o cálculo correto de acordo com o sexo informado. Como cada 
chamada do programa é uma execução distinta, quando usamos instruções de controle de 
fluxo cada instância poderá executar um conjunto diferente de instruções, dentro do mesmo 
programa. 
Para conseguirmos essa flexibilidade precisamos antes conhecer mais operadores: 
os operadores relacionais e os operadores lógicos. Apenas depois estaremos aptos a 
trabalhar com instruções de controle de fluxo do tipo IF, Switch, etc. 
Vamos aos relacionais. Os operadores relacionais são usados para fazer 
comparações e inequações como já os conhecemos da Matemática. Veja o Quadro 14. Um 
detalhe aqui é que usamos == para testar a igualdade. É assim necessário para diferenciar 
a comparação de igualdade do operador de atribuição (=). 
 
Quadro 14 – Operadores relacionais 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
 
 
s operandos de uma operação relacional podem ser variáveis, literais numéricos ou 
expressões aritméticas. O resultado de uma operação relacional sempre será um valor 
‘booleano’: true (verdadeiro) ou false (falso). Veja alguns exemplos: 
 
Voltando à Matemática do ensino básico, vamos lembrar como descrevemos que um 
dado número 𝑋, do conjunto dos inteiros ou dos reais, está dentro de um intervalo. O 
intervalo pode ser aberto e/ou fechado em ambas as extremidades. Veja: 
Se 𝑋 =] − 5, 21[ escrevemos que −5 < 𝑋 < 21. 
Se 𝑋 = [0, 1[ significa que 0 ≤ 𝑋 < 1. 
Se 𝑋 = [10, 15] a inequação será: 10 ≤ 𝑋 ≤ 15. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
50 
Em linguagens de programação não podemos especificar um intervalo desta maneira! 
Em um programa precisamos escrever as sentenças anteriores de maneira ainda mais 
legível para o computador. Veja que em todos os casos acima temos duas operações 
relacionais que precisam ser conectadas por meio do que chamamos de operadores 
lógicos: 
Se 𝑋 =] − 5, 21[ então 𝑋 > −5 𝐸 𝑋 < 21. 
Se 𝑋 = [0, 1[ então 𝑋 ≥ 0 𝐸 𝑋 < 1. 
Se 𝑋 = [10, 15] então 𝑋 ≥ 10 𝐸 𝑋 ≤ 15. 
O 𝐸 nas sentenças acima tem a função de combinar as expressões relacionais (que 
usam operadores relacionais) de ambos os lados. Veja que a afirmação 𝑋 ≥ 0 𝐸 𝑋 < 1 só 
será verdadeira se ambas as expressões relacionais foram verdadeiras. Ou seja, só 
podemos afirmar que 𝑋 pertence ao intervalo [0,1[ se é verdade que 𝑋 ≥ 0 e é verdade que 
𝑋 < 1. Assim, concluímos que 𝑣𝑒𝑟𝑑𝑎𝑑𝑒𝑖𝑟𝑜 𝐸 𝑣𝑒𝑟𝑑𝑎𝑑𝑒𝑖𝑟𝑜 = 𝑣𝑒𝑟𝑑𝑎𝑑𝑒𝑖𝑟𝑜 e essa é a única 
possibilidade de uma operação lógica com 𝐸 resultar em verdadeiro! Chamamos de 𝐸 o 
operador lógico para conjunção21 e o símbolo que usamos em Java para o mesmo é &&, ou 
seja, dois e’s comerciais seguidos, sem espaços. 
O Quadro 15 seguinte mostra os três operadores lógicos existentes: conjunção (𝐸), 
disjunção (𝑂𝑢) e negação (𝑁ã𝑜). Observe as tabelas verdades de cada um. Uma tabela 
verdade enumera todas as possibilidades de valores para os operandos, isto é, dados os 
valores para as proposições 𝐴 e 𝐵, cada linha é um resultado para a operação. Em um 
programa 𝐴 e 𝐵 serão expressões relacionais ou mesmo outras operações lógicas. Observe 
ainda que expressões relacionais comumente envolvem operações aritméticas. De toda 
maneira, aqui 𝐴 e 𝐵 serão pois expressões booleanas, isto é, valores do tipo verdadeiro ou 
falso que em Java é representado por 𝑡𝑟𝑢𝑒 ou 𝑓𝑎𝑙𝑠𝑒. 
Vejamos um exemplo de uso para o operador lógico 𝑂𝑈. Um usuário brasileiro deseja 
saber se será obrigado a votar nas eleições de 2020. As eleições ocorrerão em novembro e 
ele já completou 𝑋 anos em 31 de julho de 2020. Sabemos que no Brasil o voto é opcional 
para os menores de 18 e para maiores de 70 anos. O programa perguntará a idade do 
usuário e exibirá a mensagem “Voto opcional” caso a idade dele esteja em uma das faixas 
acima. Qual será o teste, isto é, a sentença booleana que o programador deve especificar? 
Lembre-se! O programador tem à disposição operadores relacionais e lógicos. 
Então, para descobrir se o voto é opcional uma solução é formular a sentença: 𝑋 <
 18 𝑂𝑈 𝑋 > 70, supondo que 𝑋 é a variável no programa para a idade do usuário. Em Java 
escreveremos (𝑋 < 18) || (𝑋 > 70). Aqui o uso dos parênteses é opcional, mas é 
aconselhável para delimitar de maneira legível os operandos do 𝑂𝑢, (𝑋 < 10) e (𝑋 > 70). 
 
 
21 𝐸 ou AND, 𝑂𝑢 ou OR e 𝑁ã𝑜 ou NOT, do Inglês. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
51 
O último operador lógico é a negação representada em Java pelo símbolo de !. Para 
ilustrar seu uso vamos lançar mão de uma situação simples: desejamos saber se o ano de 
nascimento do usuário é diferente de 2007. A maneira natural de especificar esse teste 
booleano é escrevendo: 𝑎𝑛𝑜 ! = 2007. Aqui usamos o operador relacional já conhecido 
para diferença: ! =. É interessante lembrar que certas expressões booleanas podem ser 
especificadas de mais de uma forma. Nesse exemplo poderíamos também escrever o teste 
da seguinte maneira: ! (𝑎𝑛𝑜 == 2007). Vamos averiguar se dá o mesmo resultado? 
 
 
Quadro 15 – Operadores lógicos e tabelas verdades 
Fonte: Elaborado pela autora, baseado em (SCHILDT, 2018) 
Podemos resumir o comportamento do 𝑂𝑈 e do 𝐸. Uma expressão com 𝐸 será 
verdadeira apenas se ambos os operandos forem verdadeiros. Uma expressão com 𝑂𝑈 
resultará será falsa apenas se ambos os operandos forem falsos. Quanto ao operador de 
negação, este terá prioridade sobre os demais! Por fim, a partir dessas três operações 
lógicas podemos concatenar expressões menores e realizar testes completos. 
Agora que aprendemos os principais operadores, vejamos a ordem de precedência 
entre as três categorias: 
1º) São executadas as operações aritméticas 
2º) As operações relacionais 
3º) As operações lógicas 
 Suponha que o usuário digitou 2004: 
O teste ano != 2007 resulta em true 
O teste !(ano == 2007) resulta em !(false) o que é igual a true 
 
 Agora suponha que o usuário digitou 2007: 
O teste ano != 2007 resulta em false 
O teste !(ano == 2007) resulta em !(true) o que implica false 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
52 
Embora a expressão (𝑦 − 𝑥 > 5 && 𝑤/𝑦 == 1) não exija o uso parênteses é 
comum em programas delimitarmos cada operação: (((𝑦 − 𝑥) > 5) && ((𝑤/𝑦) == 1)) . 
Isso melhora o entendimento, a legibilidade do código. 
2.2.2. Exercícios resolvidos 
1) Supondo x = 4, y = 13, z = 120 e w = 11. Qual o resultado das expressões a seguir? Para 
não errar, resolva passo a passo. Use V, para true e F para false. 
 
a) ((𝑤 % 2) == 0) || ( (𝑦 % 2) == 0) 
 
((11%2) == 0) || ((13 % 2) == 0)) 
(1 == 0) || (1 == 0) 
 F || F 
 F 
 
b) ((𝑦 − 𝑥) > 5) && ((𝑤/𝑦) == 1) , 𝑎𝑡𝑒𝑛çã𝑜 𝑝𝑎𝑟𝑎 𝑎 𝑑𝑖𝑣𝑖𝑠ã𝑜 𝑖𝑛𝑡𝑒𝑖𝑟𝑎: 𝑤/𝑦 
 
((13 - 4) > 5) && ((11/13) == 1)) 
((9 > 5) && (0 == 1)) 
(V && F) 
 F 
 
c) ! ((𝑦 ∗ 𝑧) > 𝑤) || ((𝑦 − 𝑤) > 𝑥) 
 
!((13*9) > 120) || ((13 – 120) > 4) 
!(117 > 120) || (-107 > 4) 
!(117 > 120) || (-107 > 4) 
!(F) || (F) 
V || F 
V 
 
d) ! ( ( ( (𝑤 + 𝑥 + 𝑦 + 𝑧)/4)<= 5) || ((𝑤%3) == 1) ) , 𝑎𝑡𝑒𝑛çã𝑜 𝑝𝑎𝑟𝑎 𝑎 𝑑𝑖𝑣𝑖𝑠ã𝑜 𝑖𝑛𝑡𝑒𝑖𝑟𝑎 
 
!((((120 + 4 + 13 + 9)/4) <= 5)||((120%3) ==1)) 
!(((146/4) <= 5)||(0 == 1)) 
!((36 <= 5)||F) 
!(F||F) 
!(F) 
V 
2.2.3. Pratique 
1) Supondo x = 2, y = 3, z = 12 e w = 17. Qual o resultado das expressões a seguir? Você 
pode usar V, para true e F para false. Para não errar, resolva passo a passo e considere 
as divisões como inteiras. Lembre-se que 𝑀𝑎𝑡ℎ. 𝑝𝑜𝑤(2, 3) significa 23 = 8. 
 
a) ( ((𝑤 + 𝑦)/2) > 6) || ( (𝑤 − 3 ∗ 𝑥) > 12) 
b) ! ((𝑀𝑎𝑡ℎ. 𝑝𝑜𝑤(𝑧, 5) > (𝑤 ∗ 𝑦)) && ((𝑦 + 𝑧/2) == 3) ) 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
53 
c) (𝑀𝑎𝑡ℎ. 𝑝𝑜𝑤(𝑥, 𝑦) >= (𝑤 ∗ 𝑧)) && ( ((𝑥 + 𝑧) >= (𝑦 % 𝑧)) || ! ((𝑦 ∗ 𝑧) ! = 𝑤) ) 
 
Atividade: resolva a atividade “Programando em Java: 
exercício 1” disponível na sala virtual para a 2º semana. 
 
2.2.4. O comando IF simples 
Agora estamos preparados para entender como controlar o fluxo de execução de 
instruções em um programa. Voltemos ao exemplo do programa que responde ao usuário 
se seu voto é opcional. O programa perguntará a idade do usuário e exibirá a mensagem 
“Voto opcional” se a idade dele for menor que 18 ou maior que 70 anos. Já sabemos que a 
expressão booleana, isto é, a condição será: (𝑖𝑑𝑎𝑑𝑒 < 18) || (𝑖𝑑𝑎𝑑𝑒 > 70). Apenas se 
esta condição for verdadeira é que o computador deverá exibir a mensagem com 
𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡𝑙𝑛(“𝑉𝑜𝑡𝑜 𝑜𝑝𝑐𝑖𝑜𝑛𝑎𝑙”). 
Para isso podemos usar a instrução IF. Seja condicao uma expressão booleana 
(relacional ou lógica) que quando executada retorne true ou false, a sintaxe do comando IF 
no Java é: 
 
Para o programa do voto o comando IF será: 
 
Observe. Quando um bloco de instruções, delimitado por { e } contem apenas uma 
sentença podemos excluir os delimitadores do bloco. 
Veja o programa completo na Figura 18. Agora entenda porque estamos controlando 
o fluxo. Suponha que o usuário digite 18 para a variável 𝑖𝑑𝑎𝑑𝑒. Nesse caso a condição 
((𝑖𝑑𝑎𝑑𝑒 < 18) || (𝑖𝑑𝑎𝑑𝑒 > 70)) resultará em ( 𝐹 || 𝐹) que é igual a 𝐹. Então a mensagem 
não será exibida e as linhas ou sentenças executadas serão aquelas do início do main até 
a linha 15 e a linha 18 que finaliza o método main. Perceba que a linha 16 não será 
if (condicao){ 
 
 // bloco de instruções 
 
} 
if ((idade < 18) || (idade > 70)){ 
 
 System.out.println(“Voto opcional”); 
 
} 
 
// ou apenas: 
 
if ((idade < 18) || (idade > 70)) 
 
 System.out.println(“Voto opcional”); 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
54 
executada, embora a linha 15 do teste de condição do IF sempre será pois o computador 
precisará avaliar a condição para decidir se entra ou não no bloco interno. 
Fica fácil perceber qual o perfil de execução para uma idade igual a 16. Esse é o caso 
em que a mensagem será informada pois ((𝑖𝑑𝑎𝑑𝑒 < 18) || (𝑖𝑑𝑎𝑑𝑒 > 70)) resultará em 
(𝑉 || 𝐹) que é igual a 𝑉. Nessa instância do programa todas as linhas do main serão 
executadas. 
 
Figura 18 – Programa do voto opcional 
Fonte: Elaborado pela autora 
 
2.2.5. Exercícios resolvidos 
1) Em um clube as piscinas maiores são de acesso controlado para crianças menores de 9 
anos de idade. Essas piscinas são fechadas e o acesso é feito por catracas onde o 
usuário deve indicar sua idade e confirmar um termo de responsabilidade. Se o usuário 
é autorizado a entrar a catraca abre. Caso contrário, aparecerá no visor a mensagem 
“Entrada proibida!”. Faça um programa em Java para ler o nome do usuário e informar a 
mensagem acima quando o acesso for proibido devido idade informada. 
 
Figura 19 – Programa do acesso com catraca 
Fonte: Elaborado pela autora 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
55 
2) Faça um programa para ler um número inteiro 𝑋. Se 𝑋 estiver no intervalo ]27, 100] some 
57 à 𝑋. Em seguida, teste se o valor de 𝑋 é maior que 102. Se sim, o programa deve 
calcular o novo valor de 𝑋 dividindo 𝑋 por 2 (divisão inteira) e somando 5. O programa 
deve exibir o valor final de 𝑋 em uma mensagem no formato: 𝑋 = < 𝑋 >, onde < 𝑋 > 
deve ser substituído pelo conteúdo da variável 𝑋. 
 
Figura 20 – Programa seção 1.16, exercícios 2. 
Fonte: Elaborado pela autora 
 
2.2.6. Pratique 
1) Faça um programa em Java para ler um número inteiro e testar se este número é divisível 
por 2. Se sim o programa deve exibir a mensagem “Número par”. 
 
2) Faça um programa em Java para ler dois números inteiros e testar se o primeiro número 
é o maior. Se sim o programa deve exibir a mensagem “O primeiro é maior”. 
 
3) Faça um programa em Java que leia os coeficientes 𝑎, 𝑏 e 𝑐 de uma equação de segundo 
grau. O programa deve calcular o 𝑑𝑒𝑙𝑡𝑎 = 𝑏2 − 4 ∗ 𝑎 ∗ 𝑐 . Se o 𝑑𝑒𝑙𝑡𝑎 for menor que 0, o 
programa deverá exibir a mensagem “Não existem raízes reais”. 
 
2.2.7. IF composto 
É provável que você tenha percebido que o programa estava incompleto nos 
exemplos em que usamos o comando IF simples. O caso do voto opcional é um exemplo. A 
pergunta deve ter sido: “porque não informar se o voto é obrigatório também?”. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
56 
A boa notícia é que fazer isso é absolutamente simples. Observe que se o voto não 
é opcional é porque ele é obrigatório. Então a negação da condição (𝑖𝑑𝑎𝑑𝑒 <
 18) || (𝑖𝑑𝑎𝑑𝑒 > 70) é a constatação de que votar é obrigatório para aquela idade. Muitos 
param por aqui e concluem precipitadamente que devem incluir mais um IF ao programa 
como no contraexemplo abaixo: 
 
Não precisamos fazer dois testes condicionais. Aliás, não devemos fazê-los sem 
necessidade, pois cada teste é uma computação na máquina! Dispomos do comando IF 
composto para isso. Observe sua sintaxe abaixo. É importante lembrar que um IF composto, 
ou um IF-ELSE também é tratado como um único comando. Aqui o computador não 
precisará avaliar nova condição pois o bloco 𝑒𝑙𝑠𝑒 será executado automaticamente quando 
a condição do 𝑖𝑓 for falsa. Lembre-se que else, em Inglês, significa senão. Então após 
avaliada a condição, se esta for verdadeira o bloco do 𝑖𝑓 será executado. Senão se condição 
é falsa será feito o bloco do 𝑒𝑙𝑠𝑒. 
A Figura 21 a seguir exibe o programa do voto usando o IF composto. Veja agora que 
o programa está completo e será executado de maneira mais eficiente uma vez que o 
computador não fará dois testes condicionais, mas apenas um! 
 
 
Figura 21 – Programa do voto usando If-Else 
Fonte: Elaborado pela autora 
 
if ((idade < 18) || (idade > 70)){ 
 
 System.out.println(“Voto opcional”); 
 
} 
 
// continuando… 
 
if ((idade >= 18) && (idade <= 70)){ 
 
 System.out.println(“Voto obrigatório”); 
} 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
57 
Agora podemos verificar novamente quais linhas serão executadas se a idade 
informada pelo usuário for igual a 16. Lembre-se que a condição será verdadeira pois, (16 <
 18) || (16 > 70) resultando em (𝑡𝑟𝑢𝑒 || 𝑓𝑎𝑙𝑠𝑒) que é igual a 𝑡𝑟𝑢𝑒. Portanto, as linhas 
executadas serão as iniciais até a 17 (onde o bloco do 𝑖𝑓 é fechado, sem a execução do 
𝒆𝒍𝒔𝒆!) e a linha 20. Se o usuário informasse a idade igual a 18 a condição (18 <
 18) || (18 > 70) resultaria em (𝑓𝑎𝑙𝑠𝑒 || 𝑓𝑎𝑙𝑠𝑒) que é igual a 𝑓𝑎𝑠𝑒. Dessa vez o bloco 𝑒𝑙𝑠𝑒 
será executado. Nessa instância o fluxo de execução passará pelas linhas iniciais até a 15 
(onde a condição é avaliada como false) e da linha 17 (no início do bloco else) até o final do 
main na linha 20. 
Como mencionado na seção sobre operadores lógicos, como podemos escrever um 
mesmo teste lógico de formas diferentes podemos escrever o programa do voto com o IF-
Else abaixo,bastando inverter as mensagens. 
 
 
2.2.8. Exercícios resolvidos 
1) Suponha completar o programa de controle de acesso às piscinas do clube. Nesse caso 
o visor da catraca deve exibir “acesso livre”, se o usuário tem idade maior ou igual a 9 
anos, e “acesso proibido” para crianças abaixo de 9 anos. 
 
 Figura 22 – Programa do acesso com catraca usando If-Else 
 Fonte: Elaborado pela autora 
if ((idade >= 18) && (idade <= 70)){ 
 
 System.out.println(“Voto obrigatório”); 
 
}else{ 
 
 System.out.println(“Voto opcional”); 
 
} 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
58 
 
2) Faça um programa para obter um número inteiro do usuário, calcular e exibir se o número 
é par ou é ímpar. 
 
Figura 23 – Programa para verificar se um número é par ou impar 
Fonte: Elaborado pela autora 
 
2.2.9. Pratique 
1) Faça um programa para ler 2 números inteiros do usuário. O programa deve calcular e 
exibir a mensagem “números iguais”, se os números digitados são iguais, ou “números 
diferentes”, caso contrário. 
 
2) Faça um programa para ler 2 números inteiros, A e B, do usuário. O programa deve 
calcular e exibir a mensagem “A é divisível por B”, se o resto da divisão inteira de A por 
B for igual a zero. Caso contrário o programa deve exibir a mensagem: “A não é múltiplo 
de B”. 
 
3) Um cliente deseja comprar uma calça Jeans mas apenas está disposto a pagar por ela 
550 reais. Faça um programa para atende-lo da seguinte maneira. Após o lojista lhe 
informar o preço da calça e percentual de desconto para pagamento à vista, o usuário 
deseja apresentar esses dados ao programa e obter dele uma das respostas: “Preço com 
desconto maior que 550”, se o valor da calça foi superior aos 550 que está disposto a 
pagar, ou, “É possível comprar a calça” se o valor for até 550 reais. 
 
4) Faça um programa para obter os coeficientes de uma equação de segundo grau, calcular 
e exibir o seu delta. Se o 𝑑𝑒𝑙𝑡𝑎 for negativo o programa deve exibir a mensagem “não 
existem raízes reais”. Caso contrário, sendo o 𝑑𝑒𝑙𝑡𝑎 maior ou igual a zero o programa 
deve calcular e exibir as duas raízes, ainda que sejam iguais (caso do delta igual a 0). 
Observe as fórmulas abaixo: 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
59 
𝑑𝑒𝑙𝑡𝑎 = 𝑏2 − 4𝑎𝑐, 𝑟𝑎𝑖𝑧𝑒𝑠 =
−𝑏±√𝑑𝑒𝑙𝑡𝑎
2𝑎
. 
 
Mídia digital: assista ao vídeo “Aula 8 - If’s encadeados 
e switch”, disponível na sala virtual para a semana 2. 
 
2.3 Comando de decisão: IF’s encadeados 
Nesta semana iremos aprofundar nas estruturas de programação disponíveis para 
controlar o fluxo de execução de instruções em um programa. 
Começamos explorando um pouco mais do comando IF. Suponha um programa que 
após computar a nota final do aluno deva exibir seu status de aprovação. São três as 
possibilidades. Se a nota for menor que 40 o aluno será reprovado. Se alcançou nota no 
intervalo [40, 60[ terá direito à recuperação. Caso contrário, obtendo nota maior ou igual a 
60 o status exibido pelo programa deve ser “Aprovado!”. Como podemos escrever este 
código usando o comando IF? 
Novamente aqui vem a ideia de lançar mão dos recursos que temos. É preciso 
atenção! A solução pode estar incorreta e isso passar sem que se perceba o erro (Figura 
24, à esquerda). Por outro lado, a solução pode estar correta mas exigir mais trabalho do 
computador (Figura 24, à direita). Devemos buscar soluções corretas e eficientes. A 
compreensão de eficiência inicia-se no aprendizado da lógica de programação. 
 
Figura 24 – Solução incorreta à esquerda. Solução correta, mas pouco eficiente à direita. 
Fonte: Elaborado pela autora 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
60 
Observe o programa da Figura 24, à esquerda. Nele são usados um IF simples 
seguido de um IF-ELSE. Ele está incorreto. Observe que quando a nota final for menor que 
40 o programa executa exibindo dois status: reprovado e aprovado! Isso ocorre porque se a 
condição da linha 19 é falsa a mensagem da linha 22 é automaticamente exibida. Teste 
exaustivamente seu código. Se são três as situações de resposta (status), devemos projetar 
os dados de entrada de maneira a testar todas as possibilidades de saídas. 
O programa da direita da Figura 24 está correto mas inclui IF’s desnecessários. Os 
três IF’s serão sempre executados. Não haverá diferença perceptível no tempo de execução 
para um aluno, mas tenha em mente que programas completos lidam com grandes massas 
de dados. Há alternativa para reduzir o número de testes condicionais nesse programa. 
Basta incluir IF’s aninhados, isto é, incluir um IF dentro de outro IF. 
Veja como podemos encadear IF’s para verificar condições sucessivas: 
 
Não há nada novo aqui. Apenas inserimos um IF dentro de um Else. Há um IF-Else 
dentro do Else da linha 03. O mesmo fizemos ao inserir um IF-Else ao Else da linha 06. Essa 
maneira de estruturar as condições torna o programa mais eficiente. Se a 𝑐𝑜𝑛𝑑𝑖𝑐𝑎𝑜1 é true 
então o programa executará as linhas de 01 à 03 até o fechamento do bloco IF com }. Em 
seguida o fluxo de execução seguirá para a próxima sentença após o IF, linha 14. Da mesma 
maneira, se a 𝑐𝑜𝑛𝑑𝑖𝑐𝑎𝑜1 for falsa e a 𝑐𝑜𝑛𝑑𝑖𝑐𝑎𝑜2 for verdadeira então os IF’s das linhas 01 
e 04 são realizados. Em seguida, o 𝑏𝑙𝑜𝑐𝑜 𝑑𝑒 𝑖𝑛𝑠𝑡𝑟𝑢çõ𝑒𝑠 2 é executado e o fluxo vai para o 
final do Else da linha 03, seguindo a execução para a instrução seguinte ao IF mais externo, 
na linha 14. A estratégia é não incluir IF’s independentes se o problema requer uma seleção 
a partir de múltiplas alternativas que exigem testes sucessivos. Com IF’s encadeados 
minimizamos a execução de testes condicionais desnecessários implementando uma 
solução mais eficiente. 
Observe o programa da nota reescrito na Figura 25. O IF da linha 19 apenas será 
executado se o teste condicional da linha 16 for falso. Nesse caso o computador executará, 
no máximo, duas condições ao invés de três. Cabe lembrar que quando usamos um 
01 if (condicao1){ 
 
02 // bloco de instruções 1 
 
03 }else{ 
 
04 if (condicao2){ 
 
05 // bloco de instruções 2 
06 }else{ 
07 if (condicao 3){ 
 
08 // bloco de instruções 3 
09 }else{ 
 
10 // bloco de instruções 4 
11 } 
12 } 
13 } 
14 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
61 
operador relacional ou lógico exigimos instruções de máquina até mais complexas que uma 
operação aritmética de soma ou subtração, por exemplo. 
Voltando ao assunto dos blocos de instruções que delimitamos com { e }. Já vimos 
que um IF ou um IF-Else contam cada um como um único comando, ou seja, são uma única 
sentença não importando o que esteja dentro de seus blocos IF e Else. Por sua vez, cada 
bloco que contenha um único comando pode ser reescrito sem { e }. Outra questão é que 
podemos escrever um 𝑒𝑙𝑠𝑒 seguido de um 𝑖𝑓 na mesma linha. Outro detalhe! Observe que 
a condição da linha 19 pode ser escrita de forma mais resumida como: 𝑖𝑓 (𝑛𝑜𝑡𝑎𝐹𝑖𝑛𝑎𝑙 < 60). 
Essa condição pode assim ser escrita uma vez que já se sabe que 𝑛𝑜𝑡𝑎𝐹𝑖𝑛𝑎𝑙 não é menor 
que 40, pois a condição do 𝑖𝑓 na linha 16 já seria avaliada. 
 
Figura 25 – Solução adequada para o identificar e exibir o status de aprovação 
Fonte: Elaborado pela autora 
 
Dito isso, é possível reescrever os If’s aninhados do programa de maneira mais 
concisa e legível. Nenhum bloco foi delimitado com { e } já que têm apenas um comado. No 
entanto, tenha atenção e insira chaves em caso de dúvida. O segundo If-Else está destacado 
em azul. A leitura fica facilitada aqui pelo fato de as condições (if, else if e o else) ficarem 
alinhadas à esquerda embaixo do If inicial. 
if (notaFinal < 40) 
 System.out.println(“Reprovado”);else if (notaFinal <60) 
 System.out.println(“Recuperação”); 
else 
 System.out.println(“Aprovado!”); 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
62 
 
Outro exemplo muito comum da aplicação de If’s aninhados é quando precisamos 
verificar em qual intervalo um dado valor se encontra. As faixas de IMC (índice de massa 
corporal) são um exemplo disso. A Figura 26 mostra a fórmula de cálculo e a tabela que 
define o resultado para cada faixa. Como são sete faixas, após calcular o índice o programa 
deve apresentar o resultado através de uma estrutura contendo seis testes condicionais (If) 
aninhados. Veja o código Java da Figura 27. Observe a sugestão comentada para redução 
das condições em cada else if. 
 
Figura 26 – Fórmula e tabela de resultados do ICM 
Fonte: https://pt.wikipedia.org 
https://pt.wikipedia.org/wiki/%C3%8Dndice_de_massa_corporal
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
63 
 
Figura 27 – Programa para cálculo do IMC e exibição do resultado segundo a tabela da Figura 26. Fonte: 
Elaborado pela autora 
2.4 Comando de seleção: switch 
Em algumas situações onde usamos If’s aninhados podemos substituir pelo comando 
de seleção switch. A estrutura condicional usando switch deixa o código mais limpo. A 
sintaxe é a seguinte: 
switch(expressao){ 
 case 1: 
 // bloco de instruções para expressao == 1 
 break; 
 case 2: 
 // bloco de instruções para expressao == 2 
 break; 
default: 
 //se nenhuma das constantes acima tem o valor da expressao 
 // aquí é o bloco para todos os demais valores de expressao 
} 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
64 
 
No switch o bloco de comandos é executado de acordo com o valor de uma variável 
ou expressão (representado por 𝑒𝑥𝑝𝑟𝑒𝑠𝑠𝑎𝑜 na sintaxe acima). Se o valor desta expressão 
não for igual a nenhuma das constantes informadas em cada 𝑐𝑎𝑠𝑒, o bloco do 𝑑𝑒𝑓𝑎𝑢𝑙𝑡 será 
executado. 
A palavra-chave 𝑏𝑟𝑒𝑎𝑘 é necessária quando não devem ser executados os blocos 
situados abaixo. Parece estranho mas sem 𝑏𝑟𝑒𝑎𝑘 os cases abaixo são realizados. Sem o 
𝑏𝑟𝑒𝑎𝑘 no código acima, quando é verdadeiro que 𝑒𝑥𝑝𝑟𝑒𝑠𝑠𝑎𝑜 == 1 os blocos de instruções 
seguintes ao 𝑐𝑎𝑠𝑒 1, ao 𝑐𝑎𝑠𝑒 2 e ao 𝑑𝑒𝑓𝑎𝑢𝑙𝑡 seriam todos executados. Então, as instruções 
abaixo do 𝑐𝑎𝑠𝑒 com valor correto vão sendo realizadas até que o final do 𝑠𝑤𝑖𝑡𝑐ℎ ou até o 
próximo comando 𝑏𝑟𝑒𝑎𝑘. O 𝑏𝑟𝑒𝑎𝑘 faz o fluxo sair do 𝑠𝑤𝑖𝑡𝑐ℎ e ir para a instrução seguinte a 
ele. Ele é opcional pois há situações em que sua ausência é necessária. Observe: 
A expressão dentro dos parênteses do switch pode ser dos tipos: 𝑆𝑡𝑟𝑖𝑛𝑔, 𝑐ℎ𝑎𝑟, 𝑏𝑦𝑡𝑒, 
𝑠ℎ𝑜𝑟𝑡 ou 𝑖𝑛𝑡. Os tipos em ponto flutuante, float e double, ou inteiro long não são suportados. 
Por fim, precisamos entender que o 𝑠𝑤𝑖𝑡𝑐ℎ é útil quando: 
 Há um grande número de alternativas; 
 Todas as alternativas dependem da avaliação de uma mesma expressão (na 
maioria das vezes, dependem do valor de uma única variável); 
 As condições de teste são de igualdade 
Veja um exemplo de código usando 𝑠𝑤𝑖𝑡𝑐ℎ para seleção entre múltiplas alternativas, 
na Figura 28 a seguir. 
case ‘.’: 
case ‘;’: 
case ‘,’: 
case ‘!’: 
case ‘?’: 
case ‘:’: 
 //bloco de instruções único para todas os casos anteriores 
 break; 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
65 
 
Figura 28 – Exemplo de uso do switch em um programa que exibe os detalhes da refeição escolhida. Fonte: 
Elaborado pela autora 
 
Toda escolha entre múltiplas alternativas sempre pode ser escrita usando If’s 
aninhados. Mas a recíproca nem sempre é verdadeira. Nem tudo que escrevemos com If 
podemos escrever com switch. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
66 
Veja no trecho abaixo a substituição da seleção do switch da Figura 28 por If’s 
encadeados: 
 
Essa substituição não é possível para os programas que calculam o status de 
aprovação do aluno e a faixa de IMC, da seção anterior. Aqueles incluem testes condicionais 
que usam operadores relacionais diferentes de igualdade, são eles: <, <=. O switch é uma 
excelente alternativa, mas só poderá ser empregado quando os testes de seleção são de 
igualdade. 
2.5 Exercícios resolvidos 
1) Faça um programa que leia 3 números reais do usuário, calcule e exiba o maior. 
 
Figura 29 – Programa maior de 3 
Fonte: Elaborado pela autora 
if (codigo == 1) 
 System.out.println("Arroz, feijão, filé com fritas …”); 
else if (código == 2) 
 System.out.println("Talharim com molho bolonhesa …”); 
else if (código == 3) 
 System.out.println("Alface, couve-flor, brócolis …"); 
else 
 System.out.println("Código inválido"); 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
67 
 
2) Faça um programa em Java que simule uma calculadora simples a qual executa as 
operações: soma, subtração, multiplicação, divisão. O programa deve obter do usuário 
dois números do usuário e a operação escolhida. Ao final deve exibir o resultado. 
 
Figura 30 – Programa da calculadora simples 
Fonte: Elaborado pela autora 
 
2.6 Pratique 
1) Faça um programa que leia 2 números reais e um número inteiro representando uma 
das opções abaixo. De acordo com a opção, execute as operações especificadas: 
1 - Média aritmética dos números: (𝑛1 + 𝑛2)/2 
2 - Média geométrica dos números: √𝑛1 ∗ 𝑛2 
3 - Diferença do maior pelo menor (descubra o maior e calcule a diferença) 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
68 
4 - Divisão do primeiro pelo segundo: 𝑛1/𝑛2 (se 𝑛2 for diferente de zero!) 
5 - O primeiro elevado pelo segundo: 𝑛1 𝑛2 
Utilize a instrução 𝑠𝑤𝑖𝑡𝑐ℎ para decidir entre as opções. Se o usuário escolher uma opção 
inválida, mostre uma mensagem de erro. 
2) Faça um programa que receba o salário de um funcionário e usando a tabela a seguir 
calcule e mostre o novo salário, após aplicado o reajuste correto para a faixa: 
 
Faixa salarial % de reajuste no salário 
Até R$ 500,00 (inclusive) 30% 
Entre R$ 500,00 e R$ 700,00 (inclusive) 25% 
Entre R$ 700,00 e R$ 900,00 (inclusive) 20% 
Entre R$ 900,00 e R$ 1.200,00 (inclusive) 15% 
Acima de R$ 1.200,00 10% 
 
3) Um caixa eletrônico do Banco 24 Horas foi configurado para retornar sempre o menor 
número de notas possível. Simule este programa em Java de maneira que, informado o 
valor do saque pelo usuário o programa calcule e exiba o número de notas de: 100, de 
50, de 20, de 10, de 5, de 2 e de 1 real (suponha existir). Por exemplo, se o usuário 
deseja sacar 165 reais, o menor número de notas será: 1 nota de 100, 1 nota de 50, 1 
nota de 10 e 1 de 5 reais. Então deve-se priorizar as notas maiores para que o total de 
papel moeda entregue seja o menor possível. Observação: o caixa apenas entrega uma 
quantia inteira, sem centavos. 
 
 
4) Faça um programa que dados três números informados pelo usuário exiba-os em ordem 
crescente. 
 
 
Atividade: ao concluir os estudos da 2º semana, vá até 
a sala virtual e resolva a atividade “Programando em 
Java: final da 2º etapa”. 
 
Nos encontramos na próxima semana. 
Bons estudos! 
 
 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
69 
 
 
 
 
 
 
 
 
 
Mídia digital: assista a vídeos “Aula 9 - Laços de 
Repetição (parte 1)”, disponível para a semana 3. 
3.1 Laços de repetição 
São muito comuns em programas situações em que um dado bloco de comandos 
precise ser executado mais de uma vez. Suponha um aplicativo acessível para guiar um 
deficiente visual pelas ruas da cidade. Ele cadastrou um destino e está a caminho. Antes de 
uma esquina onde deve virar à direita o aplicativo emitirá5 vezes a mensagem: “Na próxima 
esquina, vire à direta”. 
Como faríamos um código Java para exibir 5 vezes esta mensagem? Usando os 
recursos que temos o código ficaria assim: 
 
Aqui escrevemos cinco vezes o mesmo comando. No entanto é comum programas 
que precisem executar um dado bloco de instruções dezenas ou centenas de vezes. Fazer 
cópias do conjunto de instruções que se repete produziria um código imenso e de difícil 
manutenção. 
 
Atenção: o ciclo de desenvolvimento de softwares 
não termina na implantação. Manutenções 
corretivas e evoluções ocorrerão com frequência. 
Por isso, códigos devem ser escritos o mais legível 
e estruturados o possível. 
 
Objetivos 
Laços de repetição determinados e indeterminados usando os 
comandos: while, do-while e for. Variáveis indexadas 
(vetores): sintaxe e manipulação. 
 
Semana 3 – Laços de repetição e Vetores 
System.out.println("Na próxima esquina, vire à direita”); 
System.out.println("Na próxima esquina, vire à direita”); 
System.out.println("Na próxima esquina, vire à direita”); 
System.out.println("Na próxima esquina, vire à direita”); 
System.out.println("Na próxima esquina, vire à direita”); 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
70 
Precisamos de uma forma mais eficiente para resolver essas repetições que 
chamamos de laços ou loops. Há laços que saberemos previamente, quando escrevemos o 
programa22, a quantidade de vezes que se repetirão. A esses chamamos de laços 
determinados. Por outro lado, haverá laços que não há como prever o número de vezes 
que serão repetidos pois essa quantidade dependerá da instância de execução. Suponha 
que o mesmo app23 acessível fosse configurado para repetir o áudio da mensagem até que 
o usuário respondesse com um toque na tela indicando que compreendeu o aviso. Nesse 
caso a mensagem "𝑁𝑎 𝑝𝑟ó𝑥𝑖𝑚𝑎 𝑒𝑠𝑞𝑢𝑖𝑛𝑎, 𝑣𝑖𝑟𝑒 à 𝑑𝑖𝑟𝑒𝑖𝑡𝑎” seria executada um número 
indeterminado de vezes. Esse é um exemplo de laço indeterminado. Em laços 
indeterminados o número de repetições de um bloco de instruções só é conhecido no 
momento em que o programa está sendo executado, isto é, em tempo de execução. 
A seguir veremos os comandos disponíveis em Java para lidar com laços tanto 
determinados, quanto indeterminados. São três os comandos possíveis que podem ser 
aplicados em ambos os casos. 
 
3.1.1 O comando while 
Observe a sintaxe do comando while abaixo. While, em Inglês, significa enquanto. 
Então enquanto a 𝑐𝑜𝑛𝑑𝑖𝑐𝑎𝑜 for verdadeira o bloco de instruções interno será executado: 
 
Aqui também 𝑐𝑜𝑛𝑑𝑖𝑐𝑎𝑜 é uma expressão booleana como a dos testes condicionais. 
São expressões que retornam true ou false podendo incluir operadores aritméticos, 
relacionais e lógicos. A 𝑐𝑜𝑛𝑑𝑖𝑐𝑎𝑜 pode até mesmo ser uma única variável desde que seja do 
tipo 𝑏𝑜𝑜𝑙𝑒𝑎𝑛. Nesse caso enquanto a variável for igual a true o bloco é realizado. 
Veja o código para as mensagens usando while na Figura 31. Observe que a 
mensagem e o 𝑖 + + serão repetidos 5 vezes. 
 
 
 
22 Durante a programação, dizemos ‘em tempo de codificação’. Em oposição à “em tempo de execução” o qual depende 
da instância de execução. 
23 App forma resumida para aplicativo (apps de celular). 
while (condicao){ 
 // bloco de instruções do laço 
} 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
71 
 
Figura 31 – Laço determinado usando While 
Fonte: Elaborado pela autora 
 
No while o bloco de instruções só será executado a primeira vez se a condição for 
inicialmente verdadeira. Dizemos que 𝑐𝑜𝑛𝑑𝑖𝑐𝑎𝑜 é uma condição de permanência para 
permanecer executando o bloco interno. Então esta expressão deve se tornar falsa em 
algum momento. Caso contrário o que teremos é um laço infinito e a finalização do programa 
precisará ser forçada. 
Atenção ao que é necessário para construir corretamente um laço determinado: 
1. Dê valores inicias às variáveis usadas para controlar as repetições do laço. (Na 
Figura 31, este é o papel da variável i que é inicializada com 𝑖 = 1) 
2. Confira a condição de permanência do laço. Ela deve considerar os valores das 
variáveis que controlam o número de repetições. (Na Figura 31, para 5 
mensagens, se i é iniciado de 1 então o laço deve executar até que i seja igual a 
5. Quando i for igual a 6 a condição será falsa o que fará interromper o laço) 
3. Dentro do bloco atualize os valores das variáveis de controle. (Se o 𝑖 + + for 
esquecido a condição 𝑖 <= 5 será eternamente verdadeira, gerando um laço 
infinito) 
Vamos para outro exemplo. Suponha uma contagem regressiva para a largada de 
uma corrida de cavalos. O código Java para exibir a contagem regressiva a partir de 10 até 
0 será como o da Figura 32. Dos três aspectos anteriores, temos que: 
1. A variável de controle é a variável 𝑐𝑜𝑛𝑡𝑎𝑔𝑒𝑚 que foi iniciada de 10 
2. A condição está correta pois a contagem é regressiva de 10 até 0, portanto, o 
laço deve se repetir enquanto contagem for maior ou igual a 0 
3. A variável 𝑐𝑜𝑛𝑡𝑎𝑔𝑒𝑚 está sendo atualizada, nesse caso decrementada, dentro 
do bloco com a instrução 𝑐𝑜𝑛𝑡𝑎𝑔𝑒𝑚-- 
Se 𝑐𝑜𝑛𝑡𝑎𝑔𝑒𝑚 fosse incrementada ao invés de decrementada teríamos aqui também 
um loop infinito. Observe que o bloco de instruções do while (comandos nas linhas 13 e 14) 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
72 
serão executados onze vezes para: 𝑖 = 10, 𝑖 = 9, 𝑖 = 8, 𝑖 = 7, 𝑖 = 6, 𝑖 = 5, 𝑖 = 4, 𝑖 = 3,
𝑖 = 2, 𝑖 = 1 𝑒 𝑖 = 0. Quando o bloco for executado para 𝑖 = 0, a mensagem exibirá 0 e 
𝑐𝑜𝑛𝑡𝑎𝑔𝑒𝑚 será atualizada para −1. Após isso a condição será novamente avaliada 
resultando em falso, pois −1 <= 0 é igual 𝑓𝑎𝑙𝑠𝑒, o que irá interromper o while. 
 
 
Atenção: se o bloco de instruções do laço executa 
𝑛 vezes, então a condição do laço será avaliada 
𝑛 + 1 vezes! 
 
 
 
Figura 32 – Laço determinado usando While 
Fonte: Elaborado pela autora 
Vejamos como seria um laço indeterminado. Suponha que o funcionário de um 
estabelecimento comercial precise contabilizar o valor total em notas promissórias emitidas 
no mês. Ele coletou uma pilha e não tem ideia de quantas notas existem para somar. Um 
programa do tipo do da Figura 33 poderá ajudá-lo. Veja que o funcionário não será 
questionado antecipadamente sobre a quantidade de notas. Após cada nota registrada o 
programa pergunta se ele deseja continuar ou parar a contabilização. A depender da 
resposta do usuário o laço irá continuar ou terminar. Se o usuário responder com uma 
palavra cuja primeira letra seja ‘N’ ou ‘n’ a variável 𝑐𝑜𝑛𝑡𝑖𝑛𝑢𝑎 que controla o laço será 
atualizada para 𝑓𝑎𝑙𝑠𝑒 e a repetição irá terminar. Qualquer outro caractere digitado, diferente 
de ‘N’ ou ‘n’, fará o laço continuar. Atenção deve ser dada ao fato de que o programa realiza 
uma somatória. Os valores de cada nota são acumulados na variável 𝑣𝑎𝑙𝑜𝑟𝑇𝑜𝑡𝑎𝑙𝑁𝑜𝑡𝑎𝑠. Esta 
variável deve ser inicializada com 0 (linha 14). A cada iteração 𝑣𝑎𝑙𝑜𝑟𝑇𝑜𝑡𝑎𝑙𝑁𝑜𝑡𝑎𝑠 é atualizado 
somando-se seu valor atual ao valor da nota lida do usuário. Após sair do loop while a 
somatória é exibida na mensagem final. 
 
Atividade: pratique programação com os exercícios aqui 
propostos, na sequência. 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
73 
 
Figura 33 – Laço indeterminado usando While 
Fonte: Elaborado pela autora 
 
 
 
Mídia digital: assista a vídeos “Aula 10 - Laços de 
Repetição (parte 2) ”, disponível para a semana 3. 
 
3.1.2 O comando do..while 
Outra alternativa muito similar para estruturas de repetição é o comando do-while. 
Observe a sintaxe abaixo: 
 
A diferença aqui é que a condição de permanência é avaliada ao final do laço. Então 
o bloco de instruções do laço seráexecutado no mínimo uma vez. Basta ver que na primeira 
iteração (primeira execução do bloco de instruções) a entrada ocorrerá sem testes. 
Vamos a um exemplo. Imagine que o programa do status de aprovação precise 
avaliar as notas de 35 alunos de uma turma. Veja o laço determinado com o do-while no 
código da Figura 34. O mesmo cuidado é necessário. A variável que controla o número de 
repetições, 𝑖, recebe valor inicial igual a 1. Dentro do laço 𝑖 é incrementado. A condição está 
do{ 
 // bloco de instruções do laço 
}while(condicao); 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
74 
correta pois só será avaliada como 𝑓𝑎𝑙𝑠𝑒 quando 𝑖 for igual a 36. Ao todo serão 35 iterações 
(execuções do bloco) e 36 vezes que o teste da condição será avaliado. 
 
Figura 34 – Cálculo do status de aprovação para 35 alunos usando do-while 
Fonte: Elaborado pela autora 
Vamos supor a seguinte repetição indeterminada. Um programa lê os coeficientes a, 
b e c de uma dada equação de segundo grau, calcula e exibe s as raízes reais se existirem. 
Quando o usuário digitar um coeficiente 𝑎 = 0, o programa finaliza (vide Figura 35). 
O laço é indeterminado já que o número de vezes que serão calculadas as raízes é 
desconhecido no momento da codificação do programa. Esse número dependerá dos 
valores de a informados pelo usuário em cada iteração. Observe que dentro do laço, após a 
leitura de a, o delta e as raízes são calculadas, contanto que a condição do IF da linha 16 
seja verdadeira. Essa condição é necessária para não executar os cálculos uma vez que um 
a igual a 0 não define uma equação de segundo grau, mas define a saída do laço. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
75 
 
Figura 35 – Laço com do-while para o cálculo das raízes das equações 
Fonte: Elaborado pela autora 
3.1.3 Break e continue 
Há duas palavras-chave que podem ser usadas para mudar o comportamento em 
um laço de repetição: 𝑏𝑟𝑒𝑎𝑘 e 𝑐𝑜𝑛𝑡𝑖𝑛𝑢𝑒. O 𝑏𝑟𝑒𝑎𝑘 como já vimos é usado para interromper 
um case na seleção com switch. Dentro de um comando de repetição o 𝑏𝑟𝑒𝑎𝑘 interrompe o 
laço! Veja o programa da Figura 35 reescrito na Figura 36 a seguir. Se o valor digitado para 
𝑎 for igual a 0, o IF da linha 16 é executado e o 𝑏𝑟𝑒𝑎𝑘 faz interromper o do..while. A instrução 
seguinte ao do..while será executada. Como o programa exemplo não inclui instrução 
seguinte ao do..while, a execução é finalizada. Um detalhe aqui é que o comando de 
repetição poderia ser escrito, sem causar mudanças à lógica, como 𝑑𝑜{ . . . }𝑤ℎ𝑖𝑙𝑒(𝑡𝑟𝑢𝑒). Em 
ambos os casos, atenção deve ser dada para que o laço finalize em algum momento. A 
construção foi empregada apenas para ilustrar o uso do 𝑏𝑟𝑒𝑎𝑘. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
76 
 
Figura 36 – Laço com do-while interrompido com break 
Fonte: Elaborado pela autora 
A palavra-chave 𝑐𝑜𝑛𝑡𝑖𝑛𝑢𝑒 é usada para desviar para o teste da condição do laço, 
deixando de executar as instruções abaixo. Interessante é que para no programa das raízes, 
pela forma como está escrito na Figura 36, a substituição do 𝑏𝑟𝑒𝑎𝑘 pelo 𝑐𝑜𝑛𝑡𝑖𝑛𝑢𝑒 no mesmo 
ponto do código terá o mesmo efeito: a saída do do..while. Veja na Figura 37. Deve-se, no 
entanto, compreender que são comandos distintos! O 𝑏𝑟𝑒𝑎𝑘 interrompe a repetição 
independentemente da avaliação da condição do laço. O 𝑐𝑜𝑛𝑡𝑖𝑛𝑢𝑒 desvia para a para o teste 
condicional do loop deixando de executar as instruções seguintes a ele (das linhas 18 a 32 
da Figura 37). 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
77 
 
Figura 37 – Caso em que o laço é interrompido se continue for executado. 
Fonte: Elaborado pela autora 
 
3.1.4 Laços com o comando For 
O terceiro comando de repetição é o For que em Java tem a mesma sintaxe das 
linguagens C/C++. No cabeçalho, o For inclui três partes separadas por ponto-e-vírgula: 
 
 A primeira delas é usada para inicialização e declaração das variáveis de controle do 
laço. A inicialização é executada apenas na primeira iteração. A condição de permanência 
é definida na segunda seção do For. Na terceira se atualiza o valor das variáveis 
inicializadas, comumente com incrementos ou decrementos. Esta seção é executada da 
segunda iteração em diante. Resumindo, na primeira iteração é feita a execução da 
inicialização (1ª parte) e o teste da condição (2ª parte). Da segunda iteração em diante 
for(inicializacao; condicao; atualizacao){ 
 // bloco de instruções do laço 
} 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
78 
executa-se a atualização das variáveis (3ª parte) seguida do teste da condição (2ª parte). 
Aqui também o laço será executado como no comando while: zero ou mais vezes. 
O For pode ser usado tanto em laços determinados quanto em repetições 
indeterminadas. O uso mais comum é para laços determinados que envolvem contagens 
pois o comando facilita a escrita do programa. Veja o código para o cálculo do produtório da 
Figura 38. 
 
Figura 38 – Laço de contagem usando For. 
Fonte: Elaborado pela autora 
Três aspectos são importantes para serem destacados. Primeiro, a variável 𝑝𝑟𝑜𝑑𝑢𝑡𝑜 
é a que acumula o produtório. Ela deve ser inicializada de 1, o valor neutro para 
multiplicação. Em cada iteração o 𝑝𝑟𝑜𝑑𝑢𝑡𝑜 será atualizado multiplicando-se seu valor atual 
pela i-ésima parcela do produtório. O segundo é que, como a variável 𝑘 foi criada dentro do 
For ela só estará acessível dentro do bloco. O uso de 𝑘 após o For exige sua declaração 
fora do laço. Lembre-se: o escopo de variáveis é no bloco em que for declarada. 
 
Por último, não menos importante é a conversão do numerador de 𝑖𝑛𝑡 para 𝑑𝑜𝑢𝑏𝑙𝑒. 
Para isso uma coerção para o tipo indicado entre parênteses: (𝑑𝑜𝑢𝑏𝑙𝑒). Lembre-se que a 
conversão para double é necessária para que a divisão seja exata já que os operandos da 
divisão, (𝑘 + 1) e 2 ,são inteiros. 
A Figura 39 mostra o uso do For para o laço indeterminado do programa das raízes 
(Figura 36). O exemplo ilustra que cada seção (inicialização, condição e atualização) é 
opcional. É possível até mesmo omitir todas elas ao usar um 𝑓𝑜𝑟 ( ; ; ), como na linha 13 da 
int k; 
for(k = 1; k <= 5; k++){ 
 // … 
} 
// Aqui k estará acessível. Após o For k será igual a 6! 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
79 
Figura 39. Nesse caso, a repetição terá a forma de um 𝑤ℎ𝑖𝑙𝑒(𝑡𝑟𝑢𝑒)24 onde a interrupção do 
laço deverá ser feita por um 𝑏𝑟𝑒𝑎𝑘, p. ex.. Embora essa construção seja permitida é preciso 
atenção, pois essa estrutura dificulta a depuração do programa. Se o 𝑏𝑟𝑒𝑎𝑘 não for 
executado o laço se tornará infinito. 
 
Figura 39 – Laço indeterminado com For. 
Fonte: Elaborado pela autora 
 
3.2 Exercícios resolvidos 
1) É comum e necessário que um programa sempre faça a consistência ou validação de 
dados de entrada informados pelo usuário. Suponha por exemplo que o mesmo deva 
informar uma nota de 0 a 100. O código deve verificar o caso de nota inválida, exigindo 
 
 
24 while(true){ //bloco} ou do{ //bloco }while(true); 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
80 
nova digitação. Inclua este teste em um programa Java. A validação implica num laço 
indeterminado. 
 
Figura 40 – Exercício 1 – seção 2.6 
Fonte: Elaborado pela autora 
 
2) Faça um programa em Java que exiba todos os números pares entre 2 e X, onde X é um 
inteiro lido pelo usuário. Faça a verificação de X o qual deve ser maior que 2. 
 
Figura 41 – Exercício 2 – seção 2.6 
Fonte: Elaborado pela autora 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoriade Extensão 
81 
3) Dados três números fornecidos pelo usuário, use repetição para ordenar os números e 
exibi-los em ordem crescente. 
 
Figura 42 – Exercício 3 – seção 2.6 
Fonte: Elaborado pela autora 
 
4) Um processamento muito comum é realizar estatísticas do tipo maior valor, menor valor, 
média dos valores informados, etc. Faça um programa que leia 10 números do usuário, 
calcule e exiba o maior deles no console. 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
82 
 
Figura 43 – Exercício 4 – seção 2.6 
Fonte: Elaborado pela autora 
3.3 Pratique 
1) Simule a execução do programa abaixo e aponte sua saída. Para isso anote os valores 
de cada variável na tabela ao lado. A cada novo valor escreva-o abaixo na coluna e risque 
o valor anterior. 
 
Figura 44 – Exercício 1 – seção 2.7 
Fonte: Elaborado pela autora 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
83 
2) Simule a execução do programa que calcula o maior entre 5 números digitados pelo 
usuário. Suponha a digitação dos números na coluna à direita da tabela para a variável 
𝑣𝑎𝑙𝑜𝑟. Para cada valor de 𝑖 verifique e atualize o valor de 𝑚𝑎𝑖𝑜𝑟, se este mudar. 
 
Figura 45 – Exercício 2 – seção 2.7 
Fonte: Elaborado pela autora 
3) Altere o programa da Figura 45 para calcular o menor número digitado pelo usuário. 
Generalize o código para aceitar X números ao invés de apenas 5. Solicite inicialmente 
do usuário o valor de X. 
 
4) Escreva um programa que leia um número inteiro n, calcule e mostre o valor do seguinte 
somatório: ∑ 2𝑖𝑛𝑖=0 
 
5) Considere as seguintes faixas etárias: criança (de 0 a 10 anos), adolescente (de 11 a 16 
anos), Jovem (de 17 a 26 anos), adulto (de 27 a 59 anos) e idoso (acima de 60 anos). 
Faça um programa que leia a idade de 20 pessoas e mostre para cada uma qual a faixa 
etária que pertence. 
 
6) Faça um programa que leia uma quantidade indeterminada de valores inteiros do usuário. 
O programa deve exibir quantos são maiores que 82, quantos números são menores que 
18 e quantos números informados estão no intervalo [18, 82]. Faça uma versão do 
programa para cada uma das três estruturas de repetição estudadas: while, do..while e 
for. 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
84 
7) Escreva um programa que calcule o valor total a ser pago em uma compra no 
supermercado. O programa deve ler a quantidade e o preço unitário de cada produto, 
calcular e acumular o subtotal a cada iteração do laço. Considere que a compra só será 
encerrada quando o caixa que opera o programa digitar um valor menor ou igual a zero 
para a quantidade do produto. Ao final o programa deve apresentar o total a pagar. 
 
8) Construa um programa que leia a idade e o estado civil (C - casado, S - solteiro, O - 
outros) para uma pesquisa com um conjunto de pessoas. A quantidade de pessoas é 
desconhecida pelo pesquisador. Use um laço indeterminado. O programa deve calcular 
e exibir: 
a) Quantidade de pessoas solteiras 
b) Média da idade das pessoas casadas 
c) Qual é a idade da pessoa mais velha. 
 
Atividade: vá até a sala virtual e resolva a atividade 
“Programando em Java: exercício 2”, disponível na 
semana 3 
 
Mídia digital: assista aos vídeos 11 e 12 intitulados 
“Manipulando vetores em Java” disponíveis na sala 
virtual para a semana 3. 
 
Atividade: após estudar o conteúdo das seção a seguir 
resolva os exercícios propostos na sequência. 
 
3.4 Estruturas de dados indexadas: vetores 
Um vetor define um conjunto de variáveis que serão armazenadas em posições 
consecutivas na memória do computador. Todos esses dados devem ser do mesmo tipo 
de dado e o número deles define o tamanho do vetor. Vetores são úteis pois tratamos todo 
o conjunto de dados como uma unidade: uma variável do tipo vetor. Ao definir um vetor 
devemos definir o seu tamanho, isto é, o número máximo de elementos que poderão ser 
armazenados nele. Observe a sintaxe para declaração e definição de vetores. Os colchetes 
[ e ] na declaração são obrigatórios: 
//Declara e em seguida instancia o vetor v: 
int v[]; // ou int[] v; 
v= new int[15]; //cria um vetor para 15 elementos do tipo int 
 
//Declara e instancia o vetor nome na mesma linha: 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
85 
String[] nome= new String[3]; //um vetor para 3 elementos String 
 
//Declara e instancia o vetor x de double: 
double x[]= new double[20]; //cria um vetor de 20 posições de double 
 
Os colchetes na declaração podem vir após o tipo ou após o nome da variável: 
 < 𝑡𝑖𝑝𝑜 > [] 𝑣𝑎𝑟; ou < 𝑡𝑖𝑝𝑜 > 𝑣𝑎𝑟[]; 
Veja que ao declarar o tipo da variável estamos definindo que todos os elementos do 
vetor serão do mesmo tipo. Por esse motivo um vetor, ou array, do Inglês, é chamado de 
variável composta homogênea, ou estrutura de dados homogênea. O termo indexado 
também é usado, observe o título da seção. O motivo será explicado a seguir. 
Podemos declarar a variável vetor e posteriormente alocar a memória necessária ao 
informar o número de elementos entre colchetes, como em: 𝑑𝑜𝑢𝑏𝑙𝑒[20], 𝑆𝑡𝑟𝑖𝑛𝑔[3] e 𝑖𝑛𝑡[15]. 
Esta alocação nada mais é que a criação do vetor, propriamente dito. Afinal, o computador 
deve saber o tamanho para alocar espaço em memória o suficiente para abrigar todos os 
elementos. Além disso, é importante adiantar que vetores em Java são como objetos 
devendo ser instanciados ou criados previamente, com um 𝑛𝑒𝑤. Antes de instanciar um vetor 
com 𝑛𝑒𝑤 não será possível manipular seus elementos. 
Outro detalhe importante é a atribuição em linha para os elementos de um vetor. 
Nesse caso não precisamos definir o tamanho, este será deduzido pelo número de valores 
informados entre { e }, separados por vírgula. 
//Define e dá valores iniciais para os elementos do vetor x! 
// 0.1 será o 1º elemento, 1.5 o 2º, -0.98 o 3º e 0.09 o 4º elemento 
//A atribuição em linha é possível apenas na declaração de um vetor: 
double x[]= {0.1, 1.5, -0.98, .09}; 
 
//Define e dá valores iniciais para os elementos do vetor nome 
//nome poderá ter no máximo 5 elementos 
String nome[]= {“Josué do Carmo”,”Jeruza Silva”, 
 “Roberto Carlos”, “Ronaldo Barros”, 
 ”Francisco Franco”}; 
 
 
Para manipular os elementos de um vetor é simples: basta informar o nome do vetor 
e a posição do elemento que desejamos entre colchetes. Em Java, o primeiro elemento de 
um vetor é armazenado na posição 0, ou seja, no índice 0. Se um vetor possui 3 posições 
seus elementos serão armazenados nos índices de 0 à 2: 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
86 
//Atribuição de valores 
double x[] = new double[3]; 
x[0]= .1; 
x[1]= 1.5; 
x[2]= 100.5; 
 
//Uso dos valores 
double soma= x[0] + x[1] + x[2]; //soma = .1 + 1.5 + 100.5 =102.1 
int i = 0; 
System.out.println(nome[i]); // nome[0] que é Josué do Carmo 
Observe que o emprego de variável para indexar um elemento (𝑛𝑜𝑚𝑒[𝑖]) é válido e 
muito útil. Uma tentativa de acessar um índice fora dos limites de um vetor faz disparar um 
erro em tempo de execução. Erros de tempo de execução são chamados de exceção em 
Java. Ao executar, o programa da Figura 46 será interrompido e o aviso da exceção é exibido 
em vermelho. O índice acessado é exibido à frente da exceção 
ArrayIndexOutOfBoundException. A linha 14 que originou o erro é informada na mensagem. 
Para não correr o risco de acessar um índice fora de um array usamos o atributo 
𝑙𝑒𝑛𝑔𝑡ℎ que guarda o tamanho do vetor. A sintaxe é: < 𝑣𝑎𝑟𝑖𝑎𝑣𝑒𝑙𝑉𝑒𝑡𝑜𝑟 >. 𝑙𝑒𝑛𝑔𝑡ℎ. Para o vetor 
𝑥 da Figura 46, 𝑥. 𝑙𝑒𝑛𝑔𝑡ℎ retornará 3. Para 𝑥 só é possível acessar os elementos nas 
posições de 0 à 𝑥. 𝑙𝑒𝑛𝑔𝑡ℎ. 
Quando trabalhamos com vetores a vantagem é o uso de estruturas de repetiçãopara 
realizar a atribuição de valores aos elementos, varreduras, pesquisas, etc. A praticidade é 
devida à possibilidade de a mesma variável de controle do laço ser usada para indexar cada 
elemento. Observe o programa da Figura 47. Para cada elemento teremos uma mensagem 
seguida da entrada de dados para a idade. Há, portanto, uma repetição! Para generalizar 
basta indexar o vetor com a variável 𝑖, como na linha 18. 
Vamos continuar o programa incluindo o cálculo da média das idades e a 
contabilização de quantos valores estão acima da média. Obviamente, primeiro precisamos 
contabilizar a média para em seguida calcular a quantidade de pessoas com idade acima da 
média. Duas repetições serão necessárias aqui: a primeira para leitura e somatória das 
idades; a segunda, feita após o cálculo da média, será necessária para a segunda 
estatística. Veja o programa completo na Figura 48. 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
87 
 
Figura 46 – Exceção de acesso a índice fora dos limites do vetor 
Fonte: Elaborado pela autora 
 
Lembre-se! Devemos utilizar o mínimo de recursos computacionais, então 
precisamos varrer o vetor o menor número de vezes. 
 
 
Figura 47 – Preenchendo um vetor de inteiros 
Fonte: Elaborado pela autora 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
88 
 
 
Figura 48 – Calculando estatísticas com base em dados em vetor 
Fonte: Elaborado pela autora 
3.5 Exercícios resolvidos 
1) Altere o programa da Figura 48 para exibir também a menor e a maior idade. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
89 
 
Figura 49 – Cálculo do maior e menor valor em um vetor 
Fonte: Elaborado pela autora 
 
2) Após preencher dois vetores, A e B, de inteiros cujo número de elementos e valores serão 
informados pelo usuário. Crie um terceiro vetor para armazenar o produto: C = A x B. O 
programa deve exibir os três vetores, ao final. 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
90 
 
Figura 50 – Produto de dois vetores 
Fonte: Elaborado pela autora 
 
 
3) Leia um vetor de nomes para os convidados de uma festa. Em seguida o usuário 
informará um nome para pesquisa na lista. Se o nome informado estiver no vetor o 
programa deverá exibir a mensagem “Foi convidado”, caso contrário exibirá “Não foi 
convidado”. Lembre-se de realizar a pesquisa pelo nome desconsiderando maiúsculas e 
minúsculas. 
 
 
Atenção: o programa a seguir usa dois objetos 
Scanner: um para a leitura do inteiro e outro para a 
leitura dos nomes. Esse artifício resolve o problema da 
leitura com objetos Scanner que vem após chamadas 
ao método nextLine(). Isso evita que algumas entradas 
de dados sejam ‘desconsideradas’. 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
91 
 
Atenção: embora não seja fonte de erros para 
programas menores, após a leitura de dados com 
Scanner, uma chamada ao método close() é 
necessária. O fechamento do stream de leitura devolve 
o recurso de entrada/saída ao sistema operacional. 
 
Figura 51 – Pesquisa um nome em um vetor de nomes 
Fonte: Elaborado pela autora 
 
Plataforma +IFMG 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
92 
3.6 Pratique 
1) Leia um vetor de 10 números inteiros dados pelo usuário. Exiba os elementos do vetor 
na ordem inversa à leitura: do último ao primeiro número elemento. 
 
2) Dado um vetor de inteiros de x posições informadas pelo usuário, calcule e exiba a soma 
dos elementos do vetor. 
 
3) Um técnico deseja convocar um time jogadores anotando os nomes dos 11 titulares e 
dos 11 reservas para um torneio regional. Seu programa deve armazenar os nomes em 
dois vetores distintos: um para titulares e outro para reservas. Em seguida o programa 
deve obter um nome de jogador para uma pesquisa em ambos os vetores. O técnico 
deseja saber se o nome informado é titular, reserva ou não foi convocado. Faça 
comparação ignorando maiúsculas e minúsculas. 
 
4) Leia para um conjunto de alunos seus nomes e suas notas finais. Armazene os valores 
em dois vetores: uma para nomes e outro para notas. O número de alunos na turma será 
informado pelo usuário. O programa deve calcular a média das notas e exibir o nome e 
a nota final dos alunos com notas inferiores à média da turma. Também deve exibir os 
nomes e notas dos que alcançaram rendimento igual ou acima da média. Por fim, o 
programa deve informar o nome do aluno que obteve a menor nota da turma e o nome 
do aluno que obteve a maior nota. 
 
Atividade: Após concluir a terceira semana de estudos 
vá até a sala virtual e realize a atividade “Programando 
em Java: final da 3ª etapa”. 
 
 
Nos encontramos na próxima semana. 
Bons estudos! 
 
 
 
 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 93 
 
 
 
 
 
 
 
“A arte de programar consiste na arte de organizar e dominar a complexidade dos 
sistemas” (Dijkstra, 1972) 
4.1 Evolução da programação 
Desde a época inicial a programação de computadores passa por evoluções 
tecnológicas significativas. Na época dos primeiros computadores digitais a atividade de 
programar era realizada pela manipulação direta de cabos e chaves. Em seguida, os 
programas passaram a ser digitalizados e armazenados na memória do computador, assim 
como os dados. No entanto, a programação ainda era feita em linguagem de máquina, algo 
muito trabalhoso para sistemas complexos. 
Um grande avanço veio com a concepção de linguagens de programação de alto 
nível. FORTRAN e COBOL são alguns exemplos das primeiras linguagens importantes. Aqui 
já não é mais necessário se preocupar com detalhes de funcionamento do hardware para 
poder programá-lo. Daqui em diante o programador pôde se dedicar ao processamento de 
informações para a solução do problema, abstraindo-se dos detalhes de operação da 
máquina. 
À medida que a programação se expandiu da academia e indústria para a atividade 
comercial os sistemas foram crescendo em complexidade. A engenharia de software surge 
na tentativa de buscar soluções aos altos custos de desenvolvimento e manutenções 
frequentes. Muitos softwares em processo de desenvolvimento nem chegaram a ser 
concluídos. 
As linguagens de programação também necessitavam de evolução. Desta crise, um 
primeiro paradigma de programação que surgiu foi a programação imperativa que passou a 
incorporar a modularização. A programação modular foi uma técnica que proporcionou um 
certo controle da complexidade das soluções. Ela se baseia na decomposição de um 
processamento em partes menores, denominadas de módulos. Cada módulo fica 
responsável por executar uma porção da funcionalidade do sistema. 
Com a programação modular as linguagens como C/C++ passam a incluir recursos 
para permitir a definição de subprogramas ou sub-rotinas. Uma sub-rotina é escrita uma 
Objetivos 
Definindo funções e procedimentos em métodos estáticos 
Java. Treinando sintaxe Java em aplicações com interface 
gráfica (conteúdo em formato de videoaulas). Introdução aos 
conceitos e à sintaxe para definição de classes e objetos. 
Semana 4 – Modularização: uma introdução 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 94 
única vez pelo programador podendo ser chamada à execução quantas vezes for 
necessário. Aqui o foco está em conceber soluções com base na decomposição das 
funcionalidades do programa. 
As próximas seções abordam sobre a definição e o uso de sub-rotinas as quais 
chamamos de funções e procedimentos. A compreensão deste tema é de extrema 
importância para a orientação a objetos, outra evolução em termos de paradigma de 
programação. A linguagem Java foi concebida para a programação orientada a objetos, um 
assunto que apenas introduzimos na última seção. 
4.2 Sub-rotinas e os desvios no fluxode execução 
Suponha que um programa precise calcular o número de combinações a partir de ‘n’ 
elementos tomados ‘p’ a ‘p’. A necessidade é calcular o número de subconjuntos de ‘p’ 
elementos formatos a partir de ‘n’ elementos onde cada elemento ocorra uma única vez no 
subconjunto. Conhecemos a fórmula para o cálculo: 𝑐𝑝,𝑛 =
𝑛!
𝑝!(𝑛−𝑝)!
. A fórmula usa três 
cálculos de fatorial. 
O cálculo do fatorial de um número exige repetições para as multiplicações 
sucessivas de 1 até o número inteiro dado. O fatorial de 5, p. ex., é calculado como: 5 ∗ 4 ∗
3 ∗ 2 ∗ 1 = 120 . Analise o que muda em cada cálculo de fatorial da Figura 52. A única 
diferença aqui é o limite do laço de cada For: 𝑛 , (𝑛 − 𝑝) e 𝑝. Se construirmos uma sub-rotina 
que dado um valor 𝑥 qualquer ela calcule e retorne o fatorial de 𝑥 eliminamos esta repetição 
desnecessária. 
 
Figura 52 – Fatoriais envolvidos no cálculo de combinações 
Fonte: Elaborado pela autora 
 
Para o código da sub-rotina a qual será desenvolvida a parte é dado um nome, 
digamos: 𝑓𝑎𝑡. Escrevemos o código de 𝑓𝑎𝑡 uma vez. No código iremos definir que essa sub-
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 95 
rotina deve receber um valor inteiro, calcular o fatorial desse inteiro e retornar o resultado. 
Fazemos isso ao definir que 𝑓𝑎𝑡 recebe do código chamador (o código cliente que precisa 
do processamento de fatorial) um valor inteiro como parâmetro para seus cálculos. Todas 
as vezes que o programa necessitar calcular o fatorial, basta chamar a sub-rotina pelo nome 
informando o parâmetro. 
Desse modo, o cálculo de combinações no programa não virá após três repetições 
para o cálculo dos três fatoriais. Ao invés disso, será possível até mesmo invocar três vezes 
a sub-rotina 𝑓𝑎𝑡() dentro da própria fórmula de combinações, como o código abaixo: 
 
Veremos a seguir como construir e chamar sub-rotinas em Java, sem fazer uso da 
programação orientada a objetos. Antes precisamos compreender mais detalhes. 
Uma sub-rotina nada mais é que um subprograma, isto é, um bloco de instruções com 
um único objetivo de processamento. É um código desenvolvido à parte e identificado por 
um nome. Uma sub-rotina é executada sempre que for invocada ou chamada à execução 
pelo código cliente. O código cliente, ou código chamador, é o código dentro do qual haverá 
a chamada à sub-rotina. É cliente uma vez que solicita o serviço oferecido pela sub-rotina 
(código chamado). 
Como um subprograma, toda sub-rotina irá processar dados! Quando um ou mais 
desses dados são conhecidos do código chamador, então esse deve transmiti-los à sub-
rotina. Essa comunicação de dados à sub-rotina é feita por meio da passagem de 
parâmetros. Então, parâmetros são áreas de memória preenchidas pelo código chamador 
e manipuladas pelo código chamado, em cada invocação. Cada parâmetro se refere a um 
dado que será tratado como uma variável local dentro da sub-rotina. Após a execução, toda 
a área de memória utilizada pela sub-rotina, incluindo parâmetros e variáveis locais, será 
desalocada, isto é, será devolvida ao sistema operacional. 
Então veja, estamos nos referindo a um código com estrutura semelhante ao de um 
programa (entrada, processamento, saída) que é identificado por um nome, executa uma 
única tarefa claramente definida e é escrito uma única vez. A vantagem, aqui, além da 
reutilização, é que podemos construir e testar sub-rotinas independentemente do resto da 
aplicação. Além disso, a aplicação terá um código mais limpo uma vez que se decompõe a 
funcionalidade como um todo em módulos coesos, chamando-os à execução sempre que 
necessário. 
Toda vez que um código chamador X invocar uma sub-rotina Y, haverá um desvio no 
fluxo de execução de X para Y. Observe a Figura 53. A execução de X segue sem desvios 
até a chamada à Y. Esta chamada deverá ser resolvida pelo computador. Antes de executar 
Y, o computador salva o estado atual de X (suas variáveis locais e demais recursos) e um 
endereço de retorno para reiniciar a execução após Y. Então, a execução de X é suspensa 
e o fluxo é desviado para Y. Y é executado até finalizar. O retorno é feito de acordo com o 
endereço salvo anteriormente, para a instrução seguinte à invocação em X. 
double combinacoes; 
combinacoes = fat(n)/(fat(p)*fat(n-p)); 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 96 
 
Figura 53 – Desvio do fluxo para execução de sub-rotina 
Fonte: Elaborado pela autora 
 
É muito comum que exista mais de um código cliente suspenso aguardando a 
resolução de chamadas em um programa em execução. Esse cenário é ilustrado na Figura 
54. 
 
Figura 54 – Pilha de execução entre chamadas. 
Fonte: Elaborado pela autora 
 
O programa principal (main) invocou a sub-rotina A e foi suspenso. Ao executar, A 
fez uma chamada à B. A foi suspensa e o fluxo de execução foi desviado para B. Enquanto 
B não finalizar A não será retomada. Durante a execução de B uma de suas instruções é 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 97 
uma chamada à C. Então B também foi suspenso e o fluxo agora está executando C. Nesse 
momento, B, A e o programa principal estão todos parados, aguardando cada qual a sub-
rotina que chamaram retornar. O programa principal aguarda A, A aguarda B que aguarda 
C. Quando C finalizar, o fluxo volta para B. Assim que B terminar, a execução de A será 
retomada. Por fim, quando A finalizar a execução será desviada de volta ao programa 
principal. 
Precisamos compreender como ocorre o fluxo de execução de um programa. O 
controle dessa execução é feito pelo computador. Observe o estado da pilha de chamadas 
ilustrada na Figura 54. Será sempre a sub-rotina do topo da pilha aquela que o computador 
irá retomar primeiro. O estado da pilha após a retomada à B terá A no topo, então após B o 
computador vai desviar para A, e assim sucessivamente, até voltar ao programa principal. 
 
Mídia digital: assista aos vídeos 13 e 14 intitulados 
“Criando sub-rotinas com métodos estáticos”, disponível 
na semana 4. 
 
Atividade: após estudo da seção a seguir, resolva os 
exercícios propostos na sequência. 
 
4.3 Procedimentos e funções em métodos estáticos 
Há duas categorias de sub-rotinas: funções e procedimentos. Tanto funções quanto 
procedimentos podem receber ou não parâmetros. A diferença está no retorno. Funções 
devem retornar algum dado ao código cliente. Esse é o caso da função 𝑓𝑎𝑡 da seção anterior 
que calcula e retorna o resultado do fatorial. Já um procedimento não retorna nenhum valor 
ao código chamador. 
Definimos procedimentos e funções como métodos em Java. O tipo de retorno de um 
método função é qualquer tipo válido da linguagem, inclusive os tipos de dados primitivos. 
Definimos que um método é um procedimento quando no lugar do tipo de retorno inserimos 
a palavra-chave void, que significa vazio ou ausência de dados. Procedimento e função são 
conceitos. Quando não for necessário diferenciar o termo empregado será apenas método. 
Há métodos de objetos e métodos de classes. Métodos no escopo de classes são 
marcados com static. Esse é o caso do método main que faz da classe uma classe 
executável (Figura 3). Trabalhamos com métodos estáticos nesta iniciação já que não 
aprofundamos na programação orientada a objetos. Para chamar um método estático 
incluímos o nome da classe seguido de ponto e do nome do método: 
 < 𝑁𝑜𝑚𝑒𝐷𝑎𝐶𝑙𝑎𝑠𝑠𝑒 >. < 𝑛𝑜𝑚𝑒𝐷𝑜𝑀𝑒𝑡𝑜𝑑𝑜 > ( ) 
Se o código chamador é um método da mesma classe do método chamado <
𝑁𝑜𝑚𝑒𝐷𝑎𝐶𝑙𝑎𝑠𝑠𝑒 > pode ser omitido usando-se apenas: < 𝑛𝑜𝑚𝑒𝐷𝑜𝑀𝑒𝑡𝑜𝑑𝑜 > ( ) 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 98 
Observe a sintaxe para definição de métodos estáticos: 
 
Um método público fica acessível para toda a aplicação. Há outros modificadores de 
acesso além de 𝑝𝑢𝑏𝑙𝑖𝑐 como o acesso privado, o restritoa pacotes ou o acessível pela 
hierarquia de classes. Esses detalhes são importantes na programação orientada a objetos 
que é apenas introduzida ao final deste curso. 
Para nomear um método siga as mesmas regras de identificadores da seção 1.2.1. 
Se não houver parâmetros os parênteses ficam vazios. Se houver mais de um parâmetro 
eles devem vir separados por vírgula. Para cada parâmetro deve-se informar tipo de dados 
e nome: 
A Figura 55 mostra o método 𝑓𝑎𝑡 para cálculo do fatorial do parâmetro 𝑥. O método 
define a variável local 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 para acumular o produtório que é iniciado de 1. O valor de 
𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙 será retornado ao código chamador com o uso da palavra-chave 𝑟𝑒𝑡𝑢𝑟𝑛. Todos os 
métodos do tipo função devem incluir um 𝑟𝑒𝑡𝑢𝑟𝑛. Se o retorno declarado no cabeçalho do 
método é do tipo 𝑖𝑛𝑡 então a expressão após o 𝑟𝑒𝑡𝑢𝑟𝑛 (nesse caso, a variável 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙) deve 
ser do mesmo tipo, caso contrário ocorre erro de incompatibilidade de tipos, em tempo de 
compilação. 
 
Figura 55 – Método do tipo função para o cálculo do fatorial 
Fonte: Elaborado pela autora 
 
Agora podemos chamar 𝑓𝑎𝑡 para calcular as combinações da seção anterior. Veja a 
classe 𝐶𝑜𝑚𝑏𝑖𝑛𝑎𝑐𝑜𝑒𝑠 da Figura 56. Nela 𝑓𝑎𝑡 é um método definido dentro da mesma classe 
do código cliente: o método 𝑚𝑎𝑖𝑛. Toda chamada à 𝑓𝑎𝑡 deve informar o parâmetro esperado, 
do tipo inteiro. Os valores de 𝑛 e 𝑝 são lidos do usuário antes de serem passados nas 
chamadas. 
A passagem de parâmetros em Java é por cópia. Isso significa que o valor de cada 
parâmetro real nas chamadas (𝑛, 𝑝 ou 𝑛 – 𝑝) é copiado para o parâmetro formal (𝑥). 
Chamamos de parâmetro real aquele cujo valor é realmente comunicado ao método. O 
parâmetro formal 𝑥 é apenas um rótulo para o valor passado. O rótulo é necessário para que 
public static <tipoDeRetorno> <nome> (<listaDeParâmetros>) 
 
public static <tipoDeRetorno> <nome> (<tipoDeDado> par1,...,<tipoDeDado> parN) 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 99 
o dado seja internamente manipulado pelo método tal como as variáveis locais como é o 
caso da variável 𝑓𝑎𝑡𝑜𝑟𝑖𝑎𝑙. 
Parâmetros formais e variáveis locais só existem enquanto o método está sendo 
executado. Após a execução de cada chamada a área de memória ocupada será destruída. 
Tenha em mente que é apenas quando escrevemos o código do método que definimos os 
parâmetros (formais) com nome e tipo. Na chamada apenas informamos os parâmetros 
reais sem indicar tipo. O tipo dos parâmetros nas chamadas é deduzido pelo compilador. 
 
Figura 56 – Chamada do método fat pelo método main 
Fonte: Elaborado pela autora 
 
Observe a chamada à 𝑓𝑎𝑡 na linha 18. Nessa chamada o conteúdo da variável 𝑛 é 
copiado para o parâmetro 𝑥 de 𝑓𝑎𝑡. Note que, sendo 𝑓𝑎𝑡 uma função é como se o método 
‘armazenasse’, após sua execução, o seu resultado. Veja a atribuição de 𝑓𝑎𝑡(𝑛) à variável 
𝑓𝑎𝑡𝑁. As linhas 19 e 20 fazem o mesmo. Funções são chamadas dentro de expressões. De 
fato, a sentença da linha 22 poderia ser reescrita assim: 
𝑐𝑜𝑚𝑏𝑖𝑛𝑎çõ𝑒𝑠 = 𝑓𝑎𝑡(𝑛)/(𝑓𝑎𝑡(𝑝) ∗ 𝑓𝑎𝑡(𝑛 − 𝑝)); 
Quanto ao fluxo de execução, observe que haverá três desvios, um para cada 
chamada da função: linha 18, 19 e 20. Em cada execução o método main ficará suspenso 
e o fluxo será desviado para o método 𝑓𝑎𝑡 (linhas de 27 à 33) que executa até o 𝑟𝑒𝑡𝑢𝑟𝑛. 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
100 
Vamos a um exemplo de método da categoria de procedimentos. Suponha um 
método responsável pelo seguinte processamento. Dado um arquivo de texto e uma String 
ele deve escrever uma linha contendo a cadeia informada ao final do arquivo. Observe o 
código do método 𝑖𝑚𝑝𝑟𝑖𝑚𝑒𝐿𝑖𝑛ℎ𝑎() destacado na Figura 57. Embora o procedimento realize 
saída em arquivo ele não retorna dados ao código chamador, por isso o uso de void. 
Observe também que a chamada de um método void gera uma sentença independente, 
diferente de métodos que retornam valor (função) que aparecem dentro de expressões. A 
sentença da linha 25 é apenas a invocação do procedimento: 
 𝑖𝑚𝑝𝑟𝑖𝑚𝑒𝐿𝑖𝑛ℎ𝑎(𝑎𝑟𝑞𝑢𝑖𝑣𝑜, 𝑒𝑛𝑡𝑟𝑎𝑑𝑎);. 
A classe 𝑃𝑟𝑖𝑛𝑡𝑊𝑟𝑖𝑡𝑒𝑟 foi usada para escrever caracteres no arquivo “arquivo.txt”. A 
cada linha digitada pelo usuário o procedimento é invocado. Ao executar o programa o 
arquivo será criado no diretório raiz do projeto Java. É importante destacar que para realizar 
entrada/saída o primeiro passo é abrir o arquivo (linha 17). O último passo deve ser esvaziar 
o buffer com 𝑓𝑙𝑢𝑠ℎ (para transferir os dados restantes em memória para o armazenamento 
permanente) e fechar o arquivo (linha 29). Como a realização de entrada/saída está sujeita 
a erros de tempo de execução é necessário informar a exceção no cabeçalho do método 
main (linha 12), ou inserir o tratamento do erro dentro do programa25. 
 
Figura 57 – Método com retorno void para escrita em arquivo 
Fonte: Elaborado pela autora 
 
 
25 O tratamento de exceções está fora do escopo deste curso. 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 101 
4.4 Exercícios resolvidos 
1) Faça um método estático do tipo procedimento para exibir no console as linhas abaixo. 
Observe que não é necessário passar parâmetros. Teste invocando uma vez o 
procedimento dentro do método main: 
1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 
 
 
Figura 58 – Seção 3.4 – Exercício 1 
Fonte: Elaborado pela autora 
 
2) Em uma classe inclua um método estático que recebe um vetor de inteiros, calcula e 
retorna a média dos elementos do vetor. Chame-o do método de main: 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 102 
 
Figura 59 – Seção 3.4 – Exercício 2 
Fonte: Elaborado pela autora 
 
3) Suponha que o vetor da questão anterior armazene a idade de 20 pessoas. Use o 
método média já construído na Figura 59. O programa deve calcular e exibir quantas 
pessoas possuem idade acima da média. Faça esse cálculo em outro método estático 
que será chamado a partir do main. Exiba a média e a quantidade de pessoas com idade 
acima da média ao final. 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 103 
 
 Figura 60 – Seção 3.4 – Exercício 3 
 Fonte: Elaborado pela autora 
4.5 Pratique 
1) Cite e explique a(s) vantagem(ns) de definir procedimentos e/ou funções em programas. 
 
2) Faça um método estático do tipo procedimento para exibir no console as linhas abaixo. 
Observe que não é necessário passar parâmetros. Teste invocando uma vez o 
procedimento dentro do método main: 
5 
5 4 
5 4 3 
5 4 3 2 
5 4 3 2 1 
 
3) Generalize o método estático da questão anterior para exibir no console as linhas abaixo. 
Nesse caso, o procedimento receberá como parâmetro o valor de x. Teste invocando 
uma vez o procedimento dentro do método main: 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 104 
𝑥 
𝑥 𝑥 − 1 
𝑥 𝑥 − 1 𝑥 − 2 
𝑥 𝑥 − 1 𝑥 − 2 𝑥 − 3 
𝑥 𝑥 − 1 𝑥 − 2 𝑥 − 3 𝑥 − 4 
. . . 
𝑥 𝑥 − 1 𝑥 − 2 𝑥 − 3 𝑥 − 4 … 1 
 
4) Escreva uma classe Java executável que defina e teste um método estático do tipo 
função que dado dois inteiros como parâmetro, calcule e retorne valor do primeiro inteiro 
elevado ao segundo. Tente resolver a potenciação aplicando multiplicações sucessivas. 
 
5) Desenvolva um método para validar o CPF passado via parâmetro. Pesquise sobre a 
validação de CPF. O método deve retornar true se o CPF for válido ou false, caso 
contrário. Teste invocando o método com seu CPF dentro do método main. 
 
6) Faça um método estático do tipo função, chamado Aumento. O método irá receber dois 
valores reais (X e Y) como parâmetros, calcular e retornar o aumento de X em Y%. Teste 
o método em main no qual o valor de X representará o preço à vista deuma mercadoria 
em uma loja de roupas e Y o percentual de acréscimo para o pagamento com cartão. 
 
7) Faça um método que receba como parâmetro três números inteiros: a, b e c. O método 
deve calcular e retornar o maior dos três. Chame esse método a partir do método main 
da classe para testá-lo. 
 
8) Faça uma classe Java executável para resolver o seguinte problema. Dados dois vetores, 
um para as idades e outro para os respectivos salários de 27 funcionários de uma 
empresa, o programa deve calcular e exibir a média dos salários dos funcionários com 
mais de 40 anos. O método main deve ler os dois vetores do usuário e chamar o seguinte 
método estático para realizar o cálculo: 
𝑝𝑢𝑏𝑙𝑖𝑐 𝑠𝑡𝑎𝑡𝑖𝑐 𝑑𝑜𝑢𝑏𝑙𝑒 𝑚𝑒𝑑𝑖𝑎(𝑑𝑜𝑢𝑏𝑙𝑒 𝑠𝑎𝑙𝑎𝑟𝑖𝑜[], 𝑖𝑛𝑡 𝑖𝑑𝑎𝑑𝑒[], 𝑖𝑛𝑡 𝑖𝑑𝑎𝑑𝑒𝑇𝑒𝑠𝑡𝑒) 
 
 
Dica do professor: armazene a idade e o salário dos 
funcionários em vetores diferentes, mas, de maneira 
que, o indivíduo com idade[0] terá o salário 
armazenado na mesma posição 0 do vetor salário (ou 
seja, salario[0]), o de idade[1] o salário ficará em 
salario[1], e assim por diante. 
 
9) Faça um método estático que dado um inteiro i informado, via parâmetro, calcule e 
retorne o i-ésimo número da sequência de Fibonacci. O cálculo da sequência de 
Fibonacci é feito como abaixo: 
𝑓0 = 0, 𝑓1 = 1, 𝑓2 = 1, . . , 𝑓𝑛 = 𝑓𝑛 − 1 + 𝑓𝑛 − 2 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 105 
Os seis primeiros números da sequência são: 0, 1, 1, 2, 3, 5. Temos que, 𝑓5 = 5. 
 
 
Atividade: vá até a sala virtual e resolva a atividade 
“Programando em Java: exercício 3”, disponível na 
semana 4. 
4.6 POO, classes e objetos 
Chegamos a última seção do curso e o que pretendemos aqui é apenas uma 
abordagem inicial sobre classes e objetos. A motivação é a linguagem Java a qual foi 
concebida para ser orientada a objetos. 
A programação orientada a objetos (POO) é um paradigma de programação que 
surgiu para resolver problemas associados à softwares grandes e complexos. Havia 
problemas relacionados a todo o ciclo de vida. O paradigma possibilitou uma conexão firme 
entre análise e projeto, bem como favoreceu muito a evolução e manutenção dos softwares. 
Isso ocorre devido o fato de as linguagens orientada a objetos serem concebidas sob pilares 
que promovem a abstração e o encapsulamento na construção dos componentes do 
software e também oferecem recursos que permitem a objetos um comportamento 
polimórfico. 
Um paradigma determina qual é a visão que você, programador, deve ter sobre a 
estruturação e execução dos programas. No caso da orientação a objetos essa visão deixa 
de ser nas funções (na decomposição funcional) e passa a ser nos dados. 
A POO aproveitou os avanços do paradigma imperativo anterior mas avançou ao 
propor modelar as instruções (sub-rotinas/funções) junto com os dados. Instruções e dados 
são definidos numa unidade de programação que chamados de classe. Criamos uma classe 
e a partir dela criamos (instanciamos) um ou mais objetos. Por essa razão a classe é vista 
como a ‘forma’, o projeto para criar os objetos. 
Veja um exemplo. Suponha um sistema para controlar um estacionamento. O projeto 
deve começar definindo quais serão os objetos do domínio do problema, reais ou abstratos, 
que devem fazer parte da solução. Esses objetos darão origem a classes no programa. Para 
o exemplo os objetos seriam: carros, vagas, clientes, etc. O projetista deve levantar para 
essas entidades quais são as características, em termos de dados e comportamento, 
necessárias para serem incorporadas às respectivas classes da solução. 
É importante para um estacionamento registrar para um carro que entra a placa, cor, 
modelo, data/horário de entrada, data/horário de saída, etc. Certamente não será relevante 
saber o preço de compra ou o tipo do material dos bancos dos carros. Os dados que 
caracterizam os objetos de uma classe são chamados de atributos da classe. Já as funções 
que definem o comportamento dos objetos chamamos de métodos. O comportamento de 
um carro para esse software não é ligar, deligar. O comportamento dos objetos da classe 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 106 
carro para esse caso seriam métodos como: entrar, sair, calcular tempo de permanência, 
etc. 
Na Figura 61 está o código da classe Carro. Lembre-se, classes são escritas com 
letra inicial maiúscula. Não usamos static nos métodos aqui pois esses serão agora de 
escopo dos objetos. Os atributos são bem definidos como privados, assim só serão 
acessados de dentro da própria classe. Observe o ‘−‘ no diagrama de classes e o 
modificador 𝑝𝑟𝑖𝑣𝑎𝑡𝑒 na declaração dos atributos. Atributos privados impedem acessos 
diretos por parte do código cliente, o que reduz o acoplamento. Para o caso quando o código 
cliente necessitar informar ou acessar os atributos a convenção é definir métodos públicos 
chamados de modificadores (setters) e acessadores (getters). Observe o método 𝑔𝑒𝑡𝑃𝑙𝑎𝑐𝑎() 
na Figura 61. 
O construtor da classe é um método especial que tem o mesmo nome: 𝐶𝑎𝑟𝑟𝑜. O 
construtor é usado para dar um estado inicial ao objeto. O estado de um objeto é definido 
pelos valores dos seus atributos. A palavra-chave 𝑡ℎ𝑖𝑠 significa ‘este’ ou desta classe. Ela é 
usada para se referir a atributos e métodos da própria classe. O 𝑡ℎ𝑖𝑠 é necessário para 
desambiguar identificadores diferentes com o mesmo nome. No método construtor, p. ex., 
há o parâmetro 𝑝𝑙𝑎𝑐𝑎 e o atributo 𝑝𝑙𝑎𝑐𝑎, então será necessário referenciar o atributo com o 
𝑡ℎ𝑖𝑠 para diferenciá-lo do parâmetro na atribuição. Para trabalhar com data, hora, data e 
hora, etc., usamos as classes do pacote java.time. Veja a importação do pacote no início do 
código. 
Escrito o código da classe podemos criar os objetos. A criação ou instanciação de um 
objeto é feita usando a palavra-chave new e invocando o construtor da classe. Veja a 
sentença abaixo: 
𝐶𝑎𝑟𝑟𝑜 𝑐𝑎𝑟𝑟𝑜1 = 𝑛𝑒𝑤 𝐶𝑎𝑟𝑟𝑜(“𝐼𝐹𝑀 − 9090”, “𝐵𝑟𝑎𝑛𝑐𝑜”, “𝐺𝑜𝑙 𝑅𝑎𝑙𝑙𝑦”); 
O comando criou na memória o objeto 𝑐𝑎𝑟𝑟𝑜1. 𝑐𝑎𝑟𝑟𝑜1 é definido como uma variável 
que faz referência a um objeto da classe 𝐶𝑎𝑟𝑟𝑜, então o tipo é a própria classe. Os valores 
dos atributos após a instanciação serão: placa = “IFM-9090”, cor = “Branco”, modelo = “Gol 
Rally”. Observe que não basta declarar a variável: 
 𝐶𝑎𝑟𝑟𝑜 𝑐𝑎𝑟𝑟𝑜1; 
Aqui o objeto é uma referência 𝑛𝑢𝑙𝑙. Para invocar métodos sobre o objeto ele deve 
ser instanciado. Portanto, antes de usar o objeto será preciso fazer: 
𝑐𝑎𝑟𝑟𝑜1 = 𝑛𝑒𝑤 𝐶𝑎𝑟𝑟𝑜(“𝐼𝐹𝑀 − 9090”, “𝐵𝑟𝑎𝑛𝑐𝑜”, “𝐺𝑜𝑙 𝑅𝑎𝑙𝑙𝑦”); 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 107 
 
Figura 61 – Definindo a classe Carro 
Fonte: Elaborado pela autora 
Agora podemos interagir com o objeto. Um software orientado a objetos implementa 
suas funcionalidades através da interação entre os objetos na memória. Um objeto A envia 
mensagem a um objeto B quando A chama um método de B. 
Para solicitar que um objeto execute um método basta incluir o nome da variável do 
objeto seguido do nome do método, informando, se houver, os parâmetros entre parênteses. 
O comando abaixo chama o método 𝑒𝑛𝑡𝑟𝑎𝑟 em 𝑐𝑎𝑟𝑟𝑜1 informando a data e a hora do 
sistema com 𝐿𝑜𝑐𝑎𝑙𝐷𝑎𝑡𝑒𝑇𝑖𝑚𝑒. 𝑛𝑜𝑤(). Veja que o método agora preenche o atributo 𝑒𝑛𝑡𝑟𝑎𝑑𝑎: 
𝑐𝑎𝑟𝑟𝑜1. 𝑒𝑛𝑡𝑟𝑎𝑟(𝐿𝑜𝑐𝑎𝑙𝐷𝑎𝑡𝑒𝑇𝑖𝑚𝑒. 𝑛𝑜𝑤()); 
Para obter a placa invocamos, 𝑐𝑎𝑟𝑟𝑜1. 𝑔𝑒𝑡𝑃𝑙𝑎𝑐𝑎() atribuindo o resultado para uma 
variável do tipo String: 
𝑆𝑡𝑟𝑖𝑛𝑔 𝑝𝑙𝑎𝑐𝑎 = 𝑐𝑎𝑟𝑟𝑜1. 𝑔𝑒𝑡𝑃𝑙𝑎𝑐𝑎(); 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 108 
O código da classe 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 segue a seguir. Esta classe depende da classe 
𝐶𝑎𝑟𝑟𝑜 uma vez que dentro dos seus métodos há chamadas a métodosde 𝐶𝑎𝑟𝑟𝑜. De fato, 
haverá em tempo de execução uma associação entre um objeto 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 e um ou 
mais objetos 𝐶𝑎𝑟𝑟𝑜. A classe 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 inclui o método 𝑚𝑎𝑖𝑛 para exemplificar a 
comunicação entre os objetos. 
𝑖𝑚𝑝𝑜𝑟𝑡 𝑗𝑎𝑣𝑎. 𝑡𝑖𝑚𝑒. 𝐿𝑜𝑐𝑎𝑙𝐷𝑎𝑡𝑒𝑇𝑖𝑚𝑒; 
𝑖𝑚𝑝𝑜𝑟𝑡 𝑗𝑎𝑣𝑎. 𝑢𝑡𝑖𝑙.∗; 
𝑝𝑢𝑏𝑙𝑖𝑐 𝑐𝑙𝑎𝑠𝑠 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 { 
 𝑝𝑟𝑖𝑣𝑎𝑡𝑒 𝑖𝑛𝑡 𝑐𝑜𝑑𝑖𝑔𝑜𝐹𝑖𝑙𝑖𝑎𝑙, 𝑛𝑢𝑚𝑉𝑎𝑔𝑎𝑠; 
 𝑝𝑟𝑖𝑣𝑎𝑡𝑒 𝑑𝑜𝑢𝑏𝑙𝑒 𝑝𝑟𝑒𝑐𝑜𝐻𝑜𝑟𝑎; 
 //𝑎𝑡𝑟𝑖𝑏𝑢𝑡𝑜 𝑝𝑎𝑟𝑎 𝑢𝑚𝑎 𝑙𝑖𝑠𝑡𝑎 𝑑𝑒 𝑜𝑏𝑗𝑒𝑡𝑜𝑠 𝑑𝑎 𝑐𝑙𝑎𝑠𝑠𝑒 𝐶𝑎𝑟𝑟𝑜: 
 𝑝𝑟𝑖𝑣𝑎𝑡𝑒 𝐴𝑟𝑟𝑎𝑦𝐿𝑖𝑠𝑡 < 𝐶𝑎𝑟𝑟𝑜 > 𝑐𝑎𝑟𝑟𝑜𝑠𝑃𝑎𝑟𝑎𝑑𝑜𝑠; 
 
 //𝐶𝑜𝑛𝑠𝑡𝑟𝑢𝑡𝑜𝑟 𝑑𝑒 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 
 𝑝𝑢𝑏𝑙𝑖𝑐 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜(𝑖𝑛𝑡 𝑓𝑖𝑙𝑖𝑎𝑙, 𝑖𝑛𝑡 𝑣𝑎𝑔𝑎𝑠, 𝑑𝑜𝑢𝑏𝑙𝑒 𝑝𝑟𝑒𝑐𝑜){ 
 𝑡ℎ𝑖𝑠. 𝑐𝑜𝑑𝑖𝑔𝑜𝐹𝑖𝑙𝑖𝑎𝑙 = 𝑓𝑖𝑙𝑖𝑎𝑙; 
 𝑡ℎ𝑖𝑠. 𝑛𝑢𝑚𝑉𝑎𝑔𝑎𝑠 = 𝑣𝑎𝑔𝑎𝑠; 
 𝑡ℎ𝑖𝑠. 𝑝𝑟𝑒𝑐𝑜𝐻𝑜𝑟𝑎 = 𝑝𝑟𝑒𝑐𝑜; 
 𝑡ℎ𝑖𝑠. 𝑐𝑎𝑟𝑟𝑜𝑠𝑃𝑎𝑟𝑎𝑑𝑜𝑠 = 𝑛𝑒𝑤 𝐴𝑟𝑟𝑎𝑦𝐿𝑖𝑠𝑡(); //𝐶𝑟𝑖𝑎 𝑎 𝑙𝑖𝑠𝑡𝑎 𝑑𝑒 𝑐𝑎𝑟𝑟𝑜𝑠 𝑣𝑎𝑧𝑖𝑎 
 } 
 
 //𝑅𝑒𝑔𝑖𝑠𝑡𝑟𝑎 𝑒𝑛𝑡𝑟𝑎𝑑𝑎 𝑑𝑒 𝑢𝑚 𝑐𝑎𝑟𝑟𝑜 𝑛𝑜 𝑒𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 𝑠𝑒 ℎ𝑜𝑢𝑣𝑒𝑟 𝑣𝑎𝑔𝑎 
 //𝑆𝑒 𝑒𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑟 𝑟𝑒𝑡𝑜𝑟𝑛𝑎 𝑡𝑟𝑢𝑒, 𝑐𝑎𝑠𝑜 𝑐𝑜𝑛𝑡𝑟á𝑟𝑖𝑜, 𝑟𝑒𝑡𝑜𝑟𝑛𝑎 𝑓𝑎𝑙𝑠𝑒 
 𝑝𝑢𝑏𝑙𝑖𝑐 𝑏𝑜𝑜𝑙𝑒𝑎𝑛 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝐸𝑛𝑡𝑟𝑎𝑑𝑎(𝐶𝑎𝑟𝑟𝑜 𝑐){ 
 //𝑠𝑒 ℎá 𝑢𝑚𝑎 𝑣𝑎𝑔𝑎 𝑑𝑖𝑠𝑝𝑜𝑛í𝑣𝑒𝑙: 
 𝑖𝑓 (𝑡ℎ𝑖𝑠. 𝑐𝑎𝑟𝑟𝑜𝑠𝑃𝑎𝑟𝑎𝑑𝑜𝑠. 𝑠𝑖𝑧𝑒() < 𝑡ℎ𝑖𝑠. 𝑛𝑢𝑚𝑉𝑎𝑔𝑎𝑠){ 
 𝑐. 𝑒𝑛𝑡𝑟𝑎𝑟(𝐿𝑜𝑐𝑎𝑙𝐷𝑎𝑡𝑒𝑇𝑖𝑚𝑒. 𝑛𝑜𝑤()); 
 𝑡ℎ𝑖𝑠. 𝑐𝑎𝑟𝑟𝑜𝑠𝑃𝑎𝑟𝑎𝑑𝑜𝑠. 𝑎𝑑𝑑(𝑐); 
 𝑟𝑒𝑡𝑢𝑟𝑛 𝑡𝑟𝑢𝑒; 
 }𝑒𝑙𝑠𝑒 
 𝑟𝑒𝑡𝑢𝑟𝑛 𝑓𝑎𝑙𝑠𝑒; //𝑛ã𝑜 ℎá 𝑣𝑎𝑔𝑎𝑠 
 } 
 
 //𝑅𝑒𝑔𝑖𝑠𝑡𝑟𝑎 𝑠𝑎í𝑑𝑎 𝑑𝑒 𝑢𝑚 𝑐𝑎𝑟𝑟𝑜 𝑑𝑜 𝑒𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 
 //𝑆𝑒 𝑎 𝑝𝑙𝑎𝑐𝑎 𝑛ã𝑜 𝑒𝑥𝑖𝑠𝑡𝑖𝑟 𝑟𝑒𝑡𝑜𝑟𝑛𝑎 𝑛𝑢𝑙𝑙, 𝑐𝑎𝑠𝑜 𝑐𝑜𝑛𝑡𝑟á𝑟𝑖𝑜 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎 𝑎 𝑠𝑎í𝑑𝑎 
 //𝑛𝑜 ℎ𝑜𝑟á𝑟𝑖𝑜 𝑑𝑜 𝑠𝑖𝑠𝑡𝑒𝑚𝑎 𝑒 𝑟𝑒𝑡𝑜𝑟𝑛𝑎 𝑜 𝑜𝑏𝑗𝑒𝑡𝑜 𝐶𝑎𝑟𝑟𝑜 
 𝑝𝑢𝑏𝑙𝑖𝑐 𝐶𝑎𝑟𝑟𝑜 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑆𝑎𝑖𝑑𝑎(𝑆𝑡𝑟𝑖𝑛𝑔 𝑝𝑙𝑎𝑐𝑎){ 
 𝑓𝑜𝑟(𝐶𝑎𝑟𝑟𝑜 𝑐: 𝑡ℎ𝑖𝑠. 𝑐𝑎𝑟𝑟𝑜𝑠𝑃𝑎𝑟𝑎𝑑𝑜𝑠){ 
 𝑖𝑓(𝑐. 𝑔𝑒𝑡𝑃𝑙𝑎𝑐𝑎(). 𝑒𝑞𝑢𝑎𝑙𝑠(𝑝𝑙𝑎𝑐𝑎)){ 
 𝑐. 𝑠𝑎𝑖𝑟(𝐿𝑜𝑐𝑎𝑙𝐷𝑎𝑡𝑒𝑇𝑖𝑚𝑒. 𝑛𝑜𝑤()); 
 𝑟𝑒𝑡𝑢𝑟𝑛 𝑐; 
 } 
 } 
 𝑟𝑒𝑡𝑢𝑟𝑛 𝑛𝑢𝑙𝑙; //𝑝𝑙𝑎𝑐𝑎 𝑛ã𝑜 𝑒𝑛𝑐𝑜𝑛𝑡𝑟𝑎𝑑𝑎 𝑛𝑜 𝑒𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜! 
 } 
 
 𝑝𝑢𝑏𝑙𝑖𝑐 𝑑𝑜𝑢𝑏𝑙𝑒 𝑐𝑎𝑙𝑐𝑢𝑙𝑎𝑉𝑎𝑙𝑜𝑟𝐴𝑃𝑎𝑔𝑎𝑟(𝐶𝑎𝑟𝑟𝑜 𝑐){ 
 𝑑𝑜𝑢𝑏𝑙𝑒 ℎ𝑜𝑟𝑎𝑠 = 𝑐. 𝑐𝑎𝑙𝑐𝑢𝑙𝑎𝑇𝑒𝑚𝑝𝑜𝑃𝑒𝑟𝑚𝑎𝑛𝑒𝑛𝑐𝑖𝑎()/60.0; 
 𝑑𝑜𝑢𝑏𝑙𝑒 𝑣𝑎𝑙𝑜𝑟 = ℎ𝑜𝑟𝑎𝑠 ∗ 𝑡ℎ𝑖𝑠. 𝑝𝑟𝑒𝑐𝑜𝐻𝑜𝑟𝑎; 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 109 
 𝑟𝑒𝑡𝑢𝑟𝑛 𝑣𝑎𝑙𝑜𝑟; 
 } 
 
 𝑝𝑢𝑏𝑙𝑖𝑐 𝑠𝑡𝑎𝑡𝑖𝑐 𝑣𝑜𝑖𝑑 𝑚𝑎𝑖𝑛(𝑆𝑡𝑟𝑖𝑛𝑔[] 𝑎𝑟𝑔𝑠) 𝑡ℎ𝑟𝑜𝑤𝑠 𝐼𝑛𝑡𝑒𝑟𝑟𝑢𝑝𝑡𝑒𝑑𝐸𝑥𝑐𝑒𝑝𝑡𝑖𝑜𝑛 { 
 //𝐶𝑟𝑖𝑎 𝑢𝑚 𝑜𝑏𝑗𝑒𝑡𝑜 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 𝑝𝑎𝑟𝑎 𝑡𝑒𝑠𝑡𝑎𝑟 𝑎𝑠 𝑐𝑙𝑎𝑠𝑠𝑒𝑠: 
 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 𝑝𝑎𝑟𝑒𝐵𝑎𝑟𝑎𝑡𝑜 = 𝑛𝑒𝑤 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜(12783, 12, 10.00); 
 
 //𝑅𝑒𝑔𝑖𝑠𝑡𝑟𝑎 𝑒𝑛𝑡𝑟𝑎𝑑𝑎 𝑑𝑒 𝑐𝑎𝑟𝑟𝑜 𝑛𝑜 𝑒𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜: 
 𝐶𝑎𝑟𝑟𝑜 𝑐1 = 𝑛𝑒𝑤 𝐶𝑎𝑟𝑟𝑜("𝑃𝑋𝐴9980", "𝑃𝑟𝑒𝑡𝑜", "𝐹𝑖𝑒𝑠𝑡𝑎"); 
 𝑝𝑎𝑟𝑒𝐵𝑎𝑟𝑎𝑡𝑜. 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝐸𝑛𝑡𝑟𝑎𝑑𝑎(𝑐1); 
 
 //𝑆𝑢𝑠𝑝𝑒𝑛𝑑𝑒 𝑎 𝑒𝑥𝑒𝑐𝑢çã𝑜 𝑑𝑜 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎 𝑝𝑜𝑟 5 𝑚𝑖𝑛𝑢𝑡𝑜𝑠 (300.000 𝑚𝑖𝑙𝑖𝑠𝑠𝑒𝑔𝑢𝑛𝑑𝑜𝑠) 
 //𝑝𝑎𝑟𝑎 𝑠𝑖𝑚𝑢𝑙𝑎𝑟 𝑎 𝑝𝑎𝑠𝑠𝑎𝑔𝑒𝑚 𝑑𝑒 𝑡𝑒𝑚𝑝𝑜: 
 𝑇ℎ𝑟𝑒𝑎𝑑. 𝑠𝑙𝑒𝑒𝑝(300000); 
 
 //𝑅𝑒𝑔𝑖𝑠𝑡𝑟𝑎 𝑠𝑎𝑖𝑑𝑎 𝑑𝑜 𝑚𝑒𝑠𝑚𝑜 𝑐𝑎𝑟𝑟𝑜, 𝑖𝑛𝑓𝑜𝑟𝑚𝑎𝑛𝑑𝑜 𝑎 𝑝𝑙𝑎𝑐𝑎: 
 𝐶𝑎𝑟𝑟𝑜 𝑐𝑎𝑟𝑟𝑜𝑆𝑎𝑖𝑛𝑑𝑜 = 𝑝𝑎𝑟𝑒𝐵𝑎𝑟𝑎𝑡𝑜. 𝑟𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑆𝑎𝑖𝑑𝑎("𝑃𝑋𝐴9980"); 
 𝑖𝑓 (𝑐𝑎𝑟𝑟𝑜𝑆𝑎𝑖𝑛𝑑𝑜 == 𝑛𝑢𝑙𝑙){ 
 𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡𝑙𝑛("𝑃𝑙𝑎𝑐𝑎 𝑛ã𝑜 𝑒𝑥𝑖𝑠𝑡𝑒! "); 
 }𝑒𝑙𝑠𝑒{ 
 //𝐶𝑎𝑙𝑐𝑢𝑙𝑎 𝑜 𝑝𝑟𝑒ç𝑜 𝑝𝑒𝑙𝑎 𝑝𝑒𝑟𝑚𝑎𝑛ê𝑛𝑐𝑖𝑎 𝑑𝑜 𝑣𝑒í𝑐𝑢𝑙𝑜 
 𝑑𝑜𝑢𝑏𝑙𝑒 𝑝𝑟𝑒𝑐𝑜𝑇𝑜𝑡𝑎𝑙 = 𝑝𝑎𝑟𝑒𝐵𝑎𝑟𝑎𝑡𝑜. 𝑐𝑎𝑙𝑐𝑢𝑙𝑎𝑉𝑎𝑙𝑜𝑟𝐴𝑃𝑎𝑔𝑎𝑟(𝑐𝑎𝑟𝑟𝑜𝑆𝑎𝑖𝑛𝑑𝑜); 
 𝑆𝑦𝑠𝑡𝑒𝑚. 𝑜𝑢𝑡. 𝑝𝑟𝑖𝑛𝑡𝑙𝑛("𝑉𝑎𝑙𝑜𝑟 𝑎 𝑝𝑎𝑔𝑎𝑟: " + 𝑝𝑟𝑒𝑐𝑜𝑇𝑜𝑡𝑎𝑙); 
 } 
 } 
} 
4.7 Pratique 
1) Altere o método main da classe 𝐸𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑚𝑒𝑛𝑡𝑜 para incluir e tratar as seguintes opções 
menu: 
1. 𝑅𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑟 𝑒𝑛𝑡𝑟𝑎𝑑𝑎 𝑑𝑒 𝑣𝑒í𝑐𝑢𝑙𝑜 
2. 𝑅𝑒𝑔𝑖𝑠𝑡𝑟𝑎𝑟 𝑠𝑎í𝑑𝑎 𝑒 𝑎𝑝𝑟𝑒𝑠𝑒𝑛𝑡𝑎𝑟 𝑡𝑜𝑡𝑎𝑙 𝑎 𝑝𝑎𝑔𝑎𝑟 
3. 𝑉𝑒𝑟𝑖𝑓𝑖𝑐𝑎𝑟 𝑝𝑒𝑙𝑎 𝑝𝑙𝑎𝑐𝑎 𝑠𝑒 𝑜 𝑐𝑎𝑟𝑟𝑜 𝑒𝑠𝑡á 𝑒𝑠𝑡𝑎𝑐𝑖𝑜𝑛𝑎𝑑𝑜 
4. 𝐼𝑚𝑝𝑟𝑖𝑚𝑖𝑟 𝑟𝑒𝑙𝑎çã𝑜 𝑑𝑒 𝑣𝑒í𝑐𝑢𝑙𝑜𝑠 𝑝𝑎𝑟𝑎𝑑𝑜𝑠 
5. 𝐹𝑖𝑛𝑎𝑙𝑖𝑧𝑎𝑟 𝑜 𝑝𝑟𝑜𝑔𝑟𝑎𝑚𝑎 
 
Observações: 
 Pesquise sobre como percorrer os elementos de um ArrayList na documentação 
da API Java. Outra alternativa é criar um vetor de objetos da classe Carro. Nesse 
caso, o vetor terá o tamanho do número de vagas no estacionamento e o controle 
de crescimento do vetor poderia ser feito por atributo do tipo inteiro, como, p. ex., 
𝑣𝑎𝑔𝑎𝑠𝑂𝑐𝑢𝑝𝑎𝑑𝑎𝑠. 
 Considere utilizar laços de repetição, identificar e definir sub-rotinas de apoio para 
execução do programa. 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 110 
 
Mídia digital: Assista aos vídeos 15, 16 e 17 nomeados 
“Treinando sintaxe com interface gráfica” disponíveis na 
sala virtual para a semana 4. Além de aprender esse 
novo tópico aproveite para rever a sintaxe e se preparar 
para a Avaliação Geral. 
 
 
Atividade: para concluir o curso e gerar o seu 
certificado, vá até a sala virtual e responda ao 
Questionário “Avaliação geral”, disponível ao final da 
semana 4. O teste inclui 10 questões relacionadas à 
sintaxe básica Java para averiguar os conhecimentos e 
a prática de programação adquiridos. 
 
 
 
 
 
 
 
 Parabéns pela conclusão do curso! Foi um prazer tê-lo conosco! 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
111 
Referências 
 
HORSTMANN, Cay S.. Core Java: Volume I - Fundamentals. 11 ed. Pearson Education, 
2019. 
INFOWORLD. Java programming language celebrates 25 years. Disponível em: 
<https://www.infoworld.com/article/3544229/java-programming-language-celebrates-25-
years.html>. Acesso em: 1 jul. 2020. 
JAVA. In: Wikipedia, the free encyclopedia.Wikimedia, 2020. Disponível em: 
<https://en.wikipedia.org/wiki/Java>. Acesso em: 1 jul. 2020. 
PYPL. PYPL PopularitY of Programming Language. Disponível em: 
<http://pypl.github.io/PYPL.html>. Acesso em: 1 jul. 2020. 
REDMONK. The RedMonk Programming Language Rankings: January 2020. Disponível 
em: <https://redmonk.com/sogrady/2020/02/28/language-rankings-1-20/>. Acesso em: 1 jul. 
2020. 
SCHILDT, Herbert. Java: A Beginner’s Guide Eighth Edition. 8 ed. McGrawHill Education, 
2018. 
TIOBE. TIOBE Index for July 2020. Disponível em: <https://www.tiobe.com/tiobe-index>. 
Acesso em: 1 jul. 2020. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
112 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
113 
Apêndice I – Manuais de instalação 
Introdução 
O Java Development Kit (JDK) é o kit de ferramentas do desenvolvedor de aplicações 
Java que contém, além da máquina virtual (JVM), bibliotecas e ferramentas necessáriaspara 
compilar e executar programas. As ferramentas do JDK são necessárias para a 
programação Java, inclusive usadas pelas IDE’s de desenvolvimento como NetBeans, 
Eclipse, IntelliJ, BlueJ, etc. A instalação do JDK deve ser feita a parte se ele não for incluso 
no pacote de instalação da IDE escolhida. Nesse momento, p. ex., nenhum pacote de 
instalação do NetBeans vem acompanhado do JDK. 
Saiba que a plataforma Java SE também é uma especificação. É preciso baixar uma 
de suas implementações. Há muitas empresas envolvidas na implementação do JDK além 
da própria Oracle, como a IBM, a Apache, Azul Systems, etc. Entre as opções Java SE 
disponíveis as mais comuns são: 
 Oracle JDK: implementação oficial da Oracle sob licença comercial (BCL) que 
permite uso sem taxas para desenvolvimento interno se for com o objetivo apenas de 
projetar, desenvolver e testar programas. 
 OpenJDK: implementação gratuita sob licença GPL (GPLv2+CE) realizada da 
OpenJDK Community, com apoio direto da Oracle. Segundo o site da comunidade o 
OpenJDK é a única implementação Java SE de código aberto para a qual a Oracle 
planeja continuar contribuindo. É o JDK de código aberto adotado pelas distribuições 
Linux mais populares. Do Java 11 em diante, as compilações do Oracle JDK e 
OpenJDK são essencialmente idênticas. 
 AdoptOpenJDK: outra implementação gratuita sob a mesma licença GPL. É 
realizada pela comunidade de membros do Java User Group (JUG), desenvolvedores 
e fornecedores de Java incluindo Azul, Amazon, GoDaddy, IBM, jClarity, Microsoft, 
New Relic, Pivotal e Red Hat. 
Qualquer das implementações acima pode ser baixada e instalada para fins de estudos. 
Se pretende fazer uso comercial sem pagar taxas, opte por uma das implementações 
gratuitas. A Oracle, a partir do Java SE 9, em 2017, passou a entregar novas versões do 
Java a cada seis meses. Uma em cada três dessas versões oferece suporte LTS, com 
lançamento de três em três anos. Para uso comercial opte pelas versões LTS que terão 
suporte por um período maior de tempo. 
É importante lembrar que o Java SE 8 foi lançado em 2014 e continuará recebendo 
atualizações até o final de 2020, tendo suporte estendido até 2025. O Java SE 11 é a última 
versão LTS lançada pela Oracle. 
Dado o aspecto introdutório deste curso qualquer versão Java SE a partir da 8 poderá 
ser utilizada. Sendo assim, a instalação será feito para a versão 8, mas o processo é o 
mesmo para qualquer outra versão 
Observação: é necessário fazer a instalação do JDK antes de instalar a IDE Netbeans. 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
114 
Instalando o Oracle JDK 8 no Windows 
Para instalar o JDK do site da Oracle (apenas para fins de estudo), basta seguir os 
passos abaixo. 
1. Na página de downloads do Java Oracle, 
https://www.oracle.com/br/java/technologies/javase-downloads.html , clique no link 
indicado. 
 
 
 Figura 62 – Instalação JDK 8 no Windows (passo 1) 
 Fonte: adaptado de www.oracle.com.br/java/technologies/javase-downloads.html 
 
 
2. Na página seguinte escolha a opção de acordo com sua instalação do Windows: x86 
(sistema operacional de 32 bits) ou x64 (sistema operacional de 64 bits) 
 
ou 
https://www.oracle.com/br/java/technologies/javase-downloads.html
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
115 
 
 Figura 63 – Instalação JDK 8 no Windows (passo 2) 
 Fonte: adaptado de www.oracle.com.br/java/technologies/javase-downloads.html 
 
No diálogo aberto marque a caixa de verificação e clique no botão de download: 
 
 
 
 Figura 64 – Instalação JDK 8 no Windows (passo 2.1) 
 Fonte: adaptado de www.oracle.com.br/java/technologies/javase-downloads.html 
 
3. A página seguinte solicitará o seu login. Forneça seu usuário e senha e clique no 
botão “Iniciar sessão”. Caso ainda não possua uma conta Oracle clique no botão 
“Criar Conta”, siga as instruções e refaça os passos anteriores 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
116 
 
 Figura 65 – Instalação JDK 8 no Windows (passo 3) 
 Fonte: adaptado de www.oracle.com.br/java/technologies/javase-downloads.html 
4. Se usuário e senha estiverem corretos, clique no botão “Salvar arquivo” e aguardo o 
download ser concluído 
 
 
 Figura 66 – Instalação JDK 8 no Windows (passo 4) 
 Fonte: adaptado de www.oracle.com.br/java/technologies/javase-downloads.html 
5. Execute o arquivo .exe baixado e siga as sugestões clicando em “Next” 
 
 
 Figura 67 – Instalação JDK 8 no Windows (passo 5) 
 Fonte: adaptado de www.oracle.com.br/java/technologies/javase-downloads.html 
 Se desejar alterar a pasta de instalação, clique no botão ‘Alterar’ abaixo e 
informe uma pasta. Obs.: a pasta selecionada deve estar vazia. 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
117 
6. Finalizada a instalação, as variáveis de ambiente do Windows já estarão 
configuradas. 
Observação: se desejar em seguida instalar o NetBeans (versão Apache) o Java Oracle 
JDK será automaticamente identificado. 
Instalando o OpenJDK 8 no Windows 
Para instalar a versão gratuita do OpenJDK siga os passos abaixo. 
1. Vá até a página de download do OpenJDK, https://jdk.java.net/. Selecione o link da 
versão desejava na lista Reference implementations 
 
 
 Figura 68 – Instalação OpenJDK 8 no Windows (passo 1) 
 Fonte: adaptado de https://jdk.java.net 
2. Na página aberta clique na opção de instalação indicada 
 
 
 Figura 69 – Instalação OpenJDK 8 no Windows (passo 2) 
 Fonte: adaptado de https://jdk.java.net 
https://jdk.java.net/
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
118 
 
3. Selecione “Salvar arquivo” e dê Ok para fazer o download 
 
 
 Figura 70 – Instalação OpenJDK 8 no Windows (passo 3) 
 Fonte: adaptado de https://jdk.java.net 
 
4. Mova o arquivo .zip baixado para a pasta desejada e extraia seu conteúdo. 
 
 
 Figura 71 – Instalação OpenJDK 8 no Windows (passo 4) 
 Fonte: adaptado de https://jdk.java.net 
 
5. Verifique a pasta gerada após a extração. 
 
 
 Figura 72 – Instalação OpenJDK 8 no Windows (passo 5) 
 Fonte: adaptado de https://jdk.java.net 
 
6. Anote o caminho \bin da pasta gerada. Para o exemplo acima será C:\java\java-se-
8u41-ri\bin 
 
7. O último passo é importante para a identificação da versão de instalação da 
plataforma Java necessária para o funcionamento do Netbeans. Trata-se de 
configurar a variável path do Windows para incluir a pasta \bin como anteriormente 
indicado: 
 
a) No Windows 10 abra o em Painel de Controle e escolha Sistema 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
119 
 
 
Figura 73 – Instalação OpenJDK 8 no Windows (passo 7.a) 
Fonte: adaptado de https://jdk.java.net 
b) Na janela aberta, no canto à esquerda escolha “Configurações avançadas do 
sistema” 
 
 
Figura 74 – Instalação OpenJDK 8 no Windows (passo 7.b) 
Fonte: adaptado de https://jdk.java.net 
c) Clique no botão ‘Variáveis de Ambiente’ da aba ‘Avançado’ 
 
https://jdk.java.net/
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
120 
 
 
Figura 75 – Instalação OpenJDK 8 no Windows (passo 7.c) 
Fonte: adaptado de https://jdk.java.net 
 
d) Na janela ‘Variáveis de Ambiente’, vá para a seção ‘Variáveis do sistema’ e clique 
no botão ‘Novo’. Em Seguida preencha o diálogo mostrado para criar a variável 
javahome, conforme o exemplo abaixo. 
 
 Nome da variável: javahome 
 Valor da variável: C:\java\java-se-8u41-ri (ou o caminho raiz do jdk instalado) 
 
 
 
Figura 76 – Instalação OpenJDK 8 no Windows (passo 7.d) 
Fonte: adaptado de https://jdk.java.net 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
121 
e) Em seguida, clique no botão ‘Ok’ do diálogo ‘Editar Variável de Sistema’ Agora selecioneem ‘Variáveis do sistema’ a variável Path. Clique no botão ‘Editar’ ou dê duplo 
clique na seleção 
 
 
Figura 77 – Instalação OpenJDK 8 no Windows (passo 7.e) 
Fonte: adaptado de https://jdk.java.net 
f) Pressione o botão ‘Novo’ para incluir o caminho da pasta \bin usando a variável 
javahome. Insira a linha como destacado na janela da direita: 
%javahome%\bin (Figura 78). 
 
Em seguida dê OK em todas as janelas. 
 
g) Para testar a configuração, abra o shell de comandos do Windows 
pressionando as teclas Win+R . No diálogo da Figura 79 digite cmd e pressione 
<Enter>. 
 
Com o terminal aberto digite java –version (ou javac –version) seguido de 
<Enter>. Confira a versão de instalação do JDK. 
Se a resposta for “Java não é reconhecido...” algo de errado ocorreu. Nesse caso, confira 
a variável ‘path’ ou repita o processo seguindo os passos descritos anteriores. 
Concluído o passo 7 será possível executar o instalador do Apache NetBeans que 
identificará o OpenJDK acima configurado. 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
122 
 
Figura 78 – Instalação OpenJDK 8 no Windows (passo 7.f) 
Fonte: adaptado de https://jdk.java.net 
 
O instalador irá sugerir uma versão do Java de 64 bits, já que a versão instalada para 
os passos acima, a 8u41, é de 32 bits. Caso deseje, baixe e descompacte o OpenJDK 11, 
versão de 64 bits, para usar com o Netbeans. Para instalar o OpenJDK11 siga os mesmos 
passos. Todavia essa alteração não é necessária, basta aceitar e continuar a instalação 
normalmente com a versão 8u41 de 32 bits. 
 
 
Figura 79 – Testanto a instalação OpenJDK 8 no Windows (passo 7.g) 
Fonte: adaptado de https://jdk.java.net 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
123 
Instalando o Apache NetBeans no Windows 
1. Vá até a página de download do NetBeans 
https://netbeans.apache.org/download/index.html 
 
2. Clique no botão “Download” na versão desejada. É exemplificada a instalação da 
última versão 12.0. 
 
 
Figura 80 – Instalando o Apache NetBeans (passo 2) 
Fonte: adaptado de https://netbeans.apache.org/download/index.html 
 
3. Na próxima página clique no link indicado. Observe que a versão Windows é apenas 
para 64 bits. 
 
 
 
Figura 81 – Instalando o Apache NetBeans (passo 3) 
Fonte: adaptado de https://netbeans.apache.org/download/index.html 
https://netbeans.apache.org/download/index.html
https://netbeans.apache.org/download/index.html
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
124 
4. A próxima página sugere um site para download. Siga o link sugerido. 
 
 
Figura 82 – Instalando o Apache NetBeans (passo 4) 
Fonte: adaptado de https://netbeans.apache.org/download/index.html 
 
5. Na caixa de diálogo que será aberta pressione “Salvar arquivo”. Aguarde a conclusão 
do download. 
 
 
Figura 83 – Instalando o Apache NetBeans (passo 5) 
Fonte: adaptado de https://netbeans.apache.org/download/index.html 
6. Execute o arquivo baixado, aceitando a licença. No terceiro passo, no diálogo abaixo, 
é possível selecionar o JDK desejado pressionando o botão “Browse...” ou aceitar a 
seleção. 
 
7. Observe na Figura 84 a mensagem de aviso relacionada à versão JDK de 32 bits 
instalada (OpenJDK 8). Não se trata de uma mensagem de erro é apenas um alerta 
para melhorar a performance. Basta ignorar e pressionar “Next”. 
 
8. No restante das telas de instalação aceite as configurações dadas pressionando 
“Next” e ao final “Finish”. 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
125 
 
Figura 84 – Instalando o Apache NetBeans (passo 6) 
Fonte: adaptado de https://netbeans.apache.org/download/index.html 
Instalando o OpenJDK 8 no Linux Ubuntu 
 
Para instalar a versão gratuita no Debian/Ubuntu, basta usar o gerenciador de pacotes 
Apt. Siga os passos abaixo: 
1. Abra um terminal (teclas CTRL + ALT + T); 
2. Use o comando abaixo para atualizar a lista de pacotes 
 
 
Figura 85 – Instalando o OpenJDK no Linux (passo 2) 
Fonte: print de tela de usuário Linux. Adaptado pela Autora 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
126 
3. O próximo comando irá instalar a versão 8 do OpenJDK. Se desejar instalar a versão 
11 altere o nome do pacote para openjdk-11-jdk. 
 
 
Figura 86 – Instalando o OpenJDK no Linux (passo 3) 
Fonte: print de tela de usuário Linux. Adaptado pela Autora 
 
4. Para verificar a versão do compilador java, o javac, digite: 
 
 
Figura 87 – Instalando o OpenJDK no Linux (passo 4) 
Fonte: print de tela de usuário Linux. Adaptado pela Autora 
 
5. Para configurar a variável de ambiente JAVA_HOME no Linux use o comando update-
alternatives para consultar o diretório das versões Java existentes. 
 
No exemplo apenas a versão 8 foi instalada. Copie o caminho da pasta de 
instalação, como abaixo. 
 
 
Figura 88 – Instalando o OpenJDK no Linux (passo 5) 
Fonte: print de tela de usuário Linux. Adaptado pela Autora 
 
A configuração da variável JAVA_HOME é importante não só para as 
execuções em linha de comando mas também porque é referenciada por programas 
que fazem uso do Java em tempo de execução. 
 
6. Abra o arquivo /etc/environment digitando. 
 
 
Figura 89 – Instalando o OpenJDK no Linux (passo 6) 
Fonte: print de tela de usuário Linux. Adaptado pela Autora 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
127 
7. Inclua o caminho do JDK ao valor da variável JAVA_HOME como ilustrado abaixo. 
Em seguida salve o arquivo. Para salvar dê Ctrl+O. 
 
 
Figura 90 – Instalando o OpenJDK no Linux (passo 7) 
Fonte: print de tela de usuário Linux. Adaptado pela Autora 
Você pode incluir também o valor de JRE_HOME <pastaRootJDK>/jre se esta 
variável não existir. 
Instalando o Apache NetBeans no Linux Ubuntu 
1. Abra a Central de Software do Ubuntu. Na aba ‘Todos’, dê Ctrl+F e busque por NetBeans 
 
 
 Figura 91 – Instalando o Apache NetBeans no Linux (passo 1) 
 Fonte: print de tela de usuário Linux. Adaptado pela Autora 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
128 
2. Selecione a primeira versão exibida na janela anterior. Clique em ‘Instalar’ na próxima 
janela. 
 
 
Figura 92 – Instalando o Apache NetBeans no Linux (passo 2) 
Fonte: print de tela de usuário Linux. Adaptado pela Autora 
 
3. Aguarde o processo de instalação finalizar. 
 
 
 
 
 
 
 
 
 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
129 
Apêndice II – Tutorial rápido do NetBeans 
Criando um projeto Java 
Siga os passos a seguir para criar um novo projeto Java no NetBeans: 
1. Com o NetBeans aberto ative o menu “File” opção “New Project...” Na janela abaixo 
clique em “Next” 
 
 
Figura 93 – Criando um projeto no Apache NetBeans (passo 1) 
Fonte: print de tela adaptado pela Autora 
2. Na próxima janela preencha os campos: nome do projeto (ProjectName) e a local do 
projeto (ProjectLocation). Se desejar altere o campo Group Id para informar uma URL 
invertiva para compor o nome inicial dos pacotes de sua aplicação. O campo Version 
também pode ser alterado. Ao final clique no botão Finish. 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
130 
 
Figura 94 – Criando um projeto no Apache NetBeans (passo 2) 
Fonte: print de tela adaptado pela Autora 
 
3. Se a janela Projects não estiver ativa pressione Ctrl+1 para visualizar o projeto 
criado na árvore de projetos 
 
Figura 95 – Criando um projeto no Apache NetBeans (passo 3) 
Fonte: print de tela adaptado pela Autora 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
131 
Inserindo Classes a um projeto 
1. Selecione o pacote onde deseja inserir a classe. Clique com o botão direito do 
mouse e escolha a opção “New” e depois “Java Class...” 
 
Figura 96 – Criando uma classe no Apache NetBeans (passo 1) 
Fonte: print de tela adaptadopela Autora 
2. No diálogo “New Java Class” informe o nome da Classe no primeiro campo e 
clique no botão Finish. 
 
Figura 97 – Criando uma classe no Apache NetBeans (passo 2) 
Fonte: print de tela adaptado pela Autora 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
132 
3. Veja na Janela Projects a classe criada. Clique 2 vezes no nome da classe para 
abrir a janela de edição. 
 
 
Figura 98 – Criando uma classe no Apache NetBeans (passo 2) 
Fonte: print de tela adaptado pela Autora 
Executando um programa no NetBeans 
1. Após digitar o código, salva os arquivos do seu projeto clicando no botão da Figura 
99. 
2. Com o cursor no código da classe executável que deseja verificar o funcionamento, 
p. ex., a classe HelloWorld, pressione as teclas Shift+F6 juntas. Antes, elimine os 
erros de compilação, sublinhados em vermelho, pois esses vão impedir a execução 
de seu código. 
3. Para outras opções de execução acesse o menu Run. Se a saída do programa for 
para o console, verifique sua execução na janela Output (Figura 100). Se esta janela 
não for exibida pressione Ctrl+4. Veja também no menu ‘Windows’ as teclas de atalho 
para todas as visões disponíveis. 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
133 
 
Figura 99 – Executando uma classe (executável!) no Apache NetBeans (passo 1) 
Fonte: print de tela adaptado pela Autora 
 
 
Figura 100 – Exibição da janela “Output” para o console NetBeans. 
Fonte: print de tela adaptado pela Autora 
 
 
 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
134 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
135 
Currículo do autor 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Feito por (professor-autor) Data Revisão de layout Data Versão 
Daniela Costa Terra 29/10/2020 Viviane Lima Martins 09/09/2021 1.0 
 
 
Daniela Costa Terra possui graduação em Ciência da Computação, pós-graduação em 
Gestão Financeira de Empresas, mestrado em Modelagem Matemática e Computacional 
pelo CEFET/MG e doutoranda em Ciência da Computação pela UFOP. Atuou por seis 
anos em desenvolvimento de software, três deles com sistemas legados em 
multinacional. Há mais de 10 anos se dedica ao ensino de programação de 
computadores. Professora efetiva do Instituto Federal de Educação, Ciência e 
Tecnologia de Minas Gerais, desde 2010. Desde 2015 é parte do corpo docente da área 
de Computação no Campus Ouro Branco, ministrando disciplinas relacionadas à 
programação, algoritmos e arquitetura de computadores. Realizou trabalhos na área de agentes 
cognitivos/emocionais e aplicações acessíveis para deficientes visuais para Android. Atualmente 
desenvolve pesquisa em visão computacional e aprendizagem de máquina aplicadas ao processamento 
de imagens médicas. 
Currículo Lattes: http://lattes.cnpq.br/5745086306252542 
http://lattes.cnpq.br/5745086306252542
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
136 
 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
137 
Glossário de códigos QR (Quick Response) 
 
 
Mídia digital 
Aula 1 - 
Apresentação do 
curso 
 
 
Mídia digital 
Aula 2 - Um Hello 
World em Java 
 
 
 
 
 
Mídia digital 
Aula 3 - 
Variáveis/Constantes 
 
 
Mídia digital 
Aula 4 - Entrada e 
saída 
 
 
 
 
 
Mídia digital 
Aula 5 - Aritmética e 
funções (parte 1) 
 
 
Mídia digital 
Aula 6 - Aritmética e 
funções (parte 2) 
 
 
 
 
Mídia digital 
Aula 7 - Operadores 
relacionais e lógicos 
e o comando IF 
 
 
Mídia digital 
Aula 8 - If’s 
encadeados e switch 
 
 
 
 
Mídia digital 
Aula 9 - Laços de 
Repetição (parte 1) 
 
 
Mídia digital 
Aula 10 - Laços de 
Repetição (parte 2) 
 
 
 
 
Mídia digital 
Aula 11 - 
Manipulando vetores 
em Java (parte 1) 
 
 
Mídia digital 
Aula 12 - 
Manipulando vetores 
em Java (parte 2) 
 
 
 
 
Mídia digital 
Aula 13 -Criando sub-
rotinas com métodos 
estáticos (parte 1) 
 
 
Mídia digital 
Aula 14- Criando 
sub-rotinas com 
métodos estáticos 
(parte 2) 
 
Instituto Federal de Minas Gerais 
Pró-Reitoria de Extensão 
 
138 
 
 
 
 
Mídia digital 
Aula 15 - Treinando 
sintaxe com interface 
gráfica (parte 1) 
 
 
Mídia digital 
Aula 16 - Treinando 
sintaxe com interface 
gráfica (parte 2) 
 
 
 
 
Mídia digital 
Aula 17 - Treinando 
sintaxe com interface 
gráfica (parte 3) 
 
 
 
 
 
 
 
Plataforma +IFMG 
Formação Inicial e Continuada EaD 
 
 
 
 A Pró-Reitoria de Extensão (Proex), neste ano de 
2020 concentrou seus esforços na criação do Programa 
+IFMG. Esta iniciativa consiste em uma plataforma de cursos 
online, cujo objetivo, além de multiplicar o conhecimento 
institucional em Educação à Distância (EaD), é aumentar a 
abrangência social do IFMG, incentivando a qualificação 
profissional. Assim, o programa contribui para o IFMG cumprir 
seu papel na oferta de uma educação pública, de qualidade e 
cada vez mais acessível. 
 Para essa realização, a Proex constituiu uma equipe 
multidisciplinar, contando com especialistas em educação, 
web design, design instrucional, programação, revisão de 
texto, locução, produção e edição de vídeos e muito mais. 
Além disso, contamos com o apoio sinérgico de diversos 
setores institucionais e também com a imprescindível 
contribuição de muitos servidores (professores e técnico-
administrativos) que trabalharam como autores dos materiais 
didáticos, compartilhando conhecimento em suas áreas de atuação. 
A fim de assegurar a mais alta qualidade na produção destes cursos, a Proex adquiriu 
estúdios de EaD, equipados com câmeras de vídeo, microfones, sistemas de iluminação e 
isolação acústica, para todos os 18 campi do IFMG. 
Somando à nossa plataforma de cursos online, o Programa +IFMG disponibilizará 
também, para toda a comunidade, uma Rádio Web Educativa, um aplicativo móvel para 
Android e IOS, um canal no Youtube com a finalidade de promover a divulgação cultural e 
científica e cursos preparatórios para nosso processo seletivo, bem como para o Enem, 
considerando os saberes contemplados por todos os nossos cursos. 
 Parafraseando Freire, acreditamos que a educação muda as pessoas e estas, por 
sua vez, transformam o mundo. Foi assim que o +IFMG foi criado. 
 
 
 
O +IFMG significa um IFMG cada vez mais perto de você! 
Pró-Reitor de Extensão do IFMG 
 
 
 
 
 
Professor Carlos Bernardes Rosa Jr. 
Pró-Reitor de Extensão do IFMG 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Características deste livro: 
Formato: A4 
Tipologia: Arial e Capriola. 
E-book: 
1ª. Edição 
Formato digital

Mais conteúdos dessa disciplina