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

Prévia do material em texto

Orientação a objetos 
em Java - JOO 
 
 
 
 
 
 
 
 
 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 2 
 
Sumário 
1 INTRODUÇÃO ....................................................................................................................................................... 6 
1.3 História da Linguagem Java ................................................................................................................................ 7 
2 A LINGUAGEM JAVA ............................................................................................................................................ 8 
2.1 Java ..................................................................................................................................................................... 8 
2.2 Máquina Virtual .................................................................................................................................................... 8 
2.3 Garbage Collection .............................................................................................................................................. 9 
2.4 Instalando o Java ............................................................................................................................................... 10 
2.4.1 Instalando o JDK............................................................................................................................................. 10 
2.4.2 Configurando o Java no Windows .................................................................................................................. 11 
2.4.3 Confirmando a instalação e configuração do Java ......................................................................................... 13 
2.5 Compilando e executando o primeiro programa ................................................................................................ 13 
3 AMBIENTE INTEGRADO DE DESENVOLVIMENTO - ECLIPSE ....................................................................... 15 
3.1 O Eclipse ........................................................................................................................................................... 15 
3.2 Característica e Ferramentas ............................................................................................................................ 15 
3.3 Instalando o Eclipse ........................................................................................................................................... 16 
3.4 Conhecendo o Eclipse ....................................................................................................................................... 16 
4 SINTAXE DA LINGUAGEM JAVA ....................................................................................................................... 18 
4.1 Delimitadores em Java ...................................................................................................................................... 18 
4.2 Identificadores e palavras reservadas ............................................................................................................... 19 
4.3 Declarando variáveis em Java ........................................................................................................................... 21 
4.5 - Convenções de codificação ............................................................................................................................. 24 
4.6 Exercícios ................................................................................................................................................ 25 
5 EXPRESSÕES ..................................................................................................................................................... 26 
5.1 Operadores lógicos e aritméticos....................................................................................................................... 26 
5.2 Concatenação de Strings com o operador +...................................................................................................... 27 
Alguns métodos úteis em dados do tipo String: ....................................................................................................... 27 
5.3 Promoção e Casting .......................................................................................................................................... 28 
5.4 Operadores de deslocamento (>>, >>) ...................................................................................................... 29 
5.5 Circuitos lógicos ................................................................................................................................................. 29 
5.6 Exercícios ................................................................................................................................................ 30 
6 FLUXO DE CONTROLE ....................................................................................................................................... 31 
6.1 Ramificação if, else ............................................................................................................................................ 31 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 3 
6.2 Ramificação switch ............................................................................................................................................ 32 
6.3 Repetição for ..................................................................................................................................................... 33 
6.4 Repetição while.................................................................................................................................................. 34 
6.5 Comandos especiais de controle de fluxo: break, continue e label ................................................................... 35 
6.6 Lendo valores do teclado ................................................................................................................................... 36 
6.7 Exercícios .......................................................................................................................................................... 36 
7 AGRUPAMENTO DE DADOS (ARRAYS) ........................................................................................................... 37 
7.1 Declarando e criando Arrays ............................................................................................................................. 37 
7.2 Modificando o conteúdo de um array ................................................................................................................. 39 
7.3 Acessando o conteúdo de um array .................................................................................................................. 39 
7.4 Percorrendo um Array ........................................................................................................................................ 40 
7.5.1 Ordenando um Array ...................................................................................................................................... 41 
7.5.2 Duplicando um Array ...................................................................................................................................... 41 
7.5.3 Preenchendo um Array ................................................................................................................................... 41 
7.6 Arrays multidimensionais ................................................................................................................................... 42 
7.7 Array esparso ....................................................................................................................................................Suponha que o sistema do banco tenha que gerar listas com os números das contas de uma agência. 
Poderíamos declarar uma variável para cada número 
 
int numero1; 
int numero2; 
int numero3; 
Contudo, não seria uma abordagem prática, pois uma agência pode ter uma quantidade muito grande de 
contas. Além disso, novas contas podem ser abertas todos os dias. Isso implicaria em alterações constantes no 
código fonte. 
Quando desejamos armazenar uma grande quantidade de valores de um determinado tipo, po-demos utilizar 
arrays. Um array é um objeto que pode armazenar muitos valores de um determinado tipo. 
 Podemos imaginar um array como sendo um armário com um determinado número de gavetas. E cada 
gaveta possui um rótulo com um número de identificação. 
 
Arrays são tipos indexados de dados que permitem a representação de agrupamento de dados como vetores 
e matrizes. 
 
Pág. 
 
7 AGRUPAMENTO DE DADOS (ARRAYS) 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 38 
Podemos declarar arrays de qualquer tipo de dado suportado em Java (primitivo ou agregado – tipos 
agregados de dados serão discutidos posteriormente). Essa declaração é feita pela adição do símbolo [] a um tipo de 
dado, que pode aparecer antes ou após o identificador da variável: 
char[] arrayDeCaracteres; 
String[] arrayDePalavras; 
Ponto[] arrayDeObjetosDoTipoPonto; 
int números[]; 
Na memória, um array é um agrupamento de dados, indexados pelo tamanho do tipo de dado que o array 
suporta:
 
 
O primeiro índice de um array é sempre 0, e o último índice é o N-1, onde N é o número de elementos do 
array. 
IMPORTANTE 
Apesar da posição do símbolo [] poder ser no início ou no final do nome da variável, é fortemente recomendado que 
você sempre aplique o [] após o tipo da variável. Isso torna o código muito mais legível. 
 
Para criar um array, usamos a palavra chave new: 
 
int[] números = new int[50]; 
 
A quantidade de elementos de um array sempre deve ser um valor inteiro. O comprimento de um array é dado pelo 
método length: 
 
// Imprimindo o comprimento de um array 
char [] alfabeto = new char[24]; 
int tamanhoDoAlfabeto = alfabeto.length; 
System.out.println("alfabeto com " + tamanhoDoAlfabeto " letras"); 
 
 
 
IMPORTANTE 
Um array de 10 elementos tem os índices de 0 a 9. 
Pág. 
 
7 AGRUPAMENTO DE DADOS (ARRAYS) 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 39 
 
7.2 Modificando o conteúdo de um array 
 
Para modificar o conteúdo de um array, devemos escolher uma ou mais posições que devem ser alteradas e utilizar 
a sintaxe abaixo: 
 int [] numeros = new int [100]; 
 numeros [0] = 136; 
 numeros [99] = 17; 
 
IMPORTANTE 
Quando um array é criado com o comando new, todas as posições são inicializadas com os valores padrão 
(números são inicializados com 0, booleanos com false e referências com null). 
 
Também podemos definir os valores de cada posição de um array no momento da sua criação utilizando as 
sintaxes abaixo: 
 int [] numeros1 = new int []{100 ,87}; 
 int [] numeros2 = {100 ,87}; 
 
7.3 Acessando o conteúdo de um array 
Para acessar o conteúdo de um array, devemos escolher uma ou mais posições e utilizar a sintaxe abaixo: 
 int [] numeros1 = new int []{100 ,87}; 
 int [] numeros2 = {100 ,87}; 
 System.out.println(numeros2[0]); 
 System.out.println(numeros1[1]); 
 
IMPORTANTE 
Acessar posições fora do intervalo de índices de um array gera erro de execução. Mais especificamente, em Java, 
ocorrerá a exception ArrayIndexOutOfBoundsException. 
 
Pág. 
 
7 AGRUPAMENTO DE DADOS (ARRAYS) 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 40 
7.4 Percorrendo um Array 
Quando trabalhamos com um array, uma das tarefas mais comuns é acessarmos todas ou algumas de suas 
posições sistematicamente. Geralmente, fazemos isso para resgatar todos ou alguns dos valores armazenados e 
realizar algum processamento sobre tais informações. 
Para percorrermos um array, utilizaremos a instrução de repetição for. Podemos utilizar a instrução while 
também. Porém, logo perceberemos que a sintaxe da instrução for, em geral, é mais apropriada quando estamos 
trabalhando com arrays. 
 int [] numeros = new int [100]; 
 for ( int i = 0; iagrupamento indexado de dados onde nem 
todas as dimensões são iguais: 
 
 
 // Matrizes esparsas podem ser representadas em Java 
 // através de arrays com dimensões heterogêneas: 
 int[][] esparso = new int[4][]; 
 esparso[0] = new int[10]; 
 esparso[1] = new int[2]; 
 
 esparso[2] = new int[5]; 
 esparso[3] = new int[1]; 
 
 // Na memória, o espaço de dados ocupado pelo 
 // array acima seria aproximadametne assim: 
 // [ | | | | | | | | | ] 
 // [ | ] 
 // [ | | | | ] 
 // [ ] 
Pág. 
 
7 AGRUPAMENTO DE DADOS (ARRAYS) 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 43 
7.8 Exercícios 
 
1) Crie um programa que imprima na tela os argumentos passados na linha de comando para o método main. 
Compile e execute a classe ImprimeArgumentos. Na execução, não esqueça de passar alguns parâmetros na linha 
de comando. 
2) Faça um programa que ordene o array de strings recebido na linha de comando.Compile e execute a classe 
Ordena. Na execução, não esqueça de passar alguns parâmetros na linha de comando. 
3) Faça um programa que calcule a média dos elementos recebidos na linha de comando. Dica: para converter 
strings para double utilize o método parseDouble() 
4) Faça um programa que leia cinco nomes do teclado, e depois imprima esses nomes na ordem inversa em 
que foram digitados pelo usuário. 
5) O tempo que um determinado avião dispensa para percorrer o trecho entre duas localidades distintas está 
disponível através da seguinte tabela: 
 
 A B C D E F G 
 02 11 06 15 11 01 
02 07 12 04 02 15 
11 07 11 08 03 13 
06 12 11 10 02 01 
15 04 08 10 05 13 
11 02 03 02 05 14 
01 15 13 01 13 14 
 
 
a) Construa uma classe java que leia a tabela anterior e informe ao usuário o tempo necessário para percorrer duas 
cidades por ele fornecidas, até o momento em que ele fornecer duas cidades iguais (origem e destino). 
 
b) Elabore uma classe que imprima a tabela sem repetições(apenas o triângulo superior ou o triângulo inferior). 
 
 
 
 
 
 
 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 44 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
8.1 Fundamentos da Programação Orientada a Objetos 
A Orientação a Objetos é uma tecnologia que enxerga os sistemas como sendo coleção de objetos 
integrantes. Ela permite melhorar a reusabilidade e extensibilidade dos softwares. 
A tecnologia orientada a objetos é fundamentada no que, coletivamente, chamamos de modelo de objetos, 
que engloba os princípios da abstração, hierarquização, encapsulamento, classificação, modularização, 
relacionamento, simultaneidade e persistência 
8.2. Paradigma Orientado por Objetos 
 
A proposta da orientação a Objetos é representar o mais fielmente possível as situações do mundo real nos 
sistemas computacionais. Nós entendemos o mundo como um todo composto por vários objetos que interagem uns 
com os outros. Da mesma maneira, a Orientação a Objetos consiste em considerar os sistemas computacionais não 
como uma coleção estruturada de processos, mas sim como uma coleção de objetos que interagem entre si. 
Os programas Orientados a objetos são programas estruturados em módulos que agrupam um estado e 
operações sobre este estado. Apresentam ênfase em reutilização de código. 
Um dos grandes diferenciais da programação orientada a objetos em relação a outros paradigmas de 
programação que também permitem a definição de estruturas e operações sobre essas estruturas está no conceito 
de herança, mecanismo através do qual definições existentes podem ser facilmente estendidas. Juntamente com a 
herança deve ser enfatizada a importância do polimorfismo, que permite selecionar funcionalidades que um 
programa irá utilizar de forma dinâmica, durante sua execução. 
 
“Orientação a Objetos consiste em considerar os sistemas computacionais como uma 
coleção de objetos que interagem de maneira organizada. ” 
8.3 Principais conceitos de POO 
8.3.1 Objetos 
 
Usamos o termo objeto para representar um determinado elemento do mundo real. Mas somente 
analisaremos os objetos que tem relevância para a solução de um determinado problema. Portanto, o objeto é uma 
entidade do mundo real que merece representação para o ambiente estudado. 
Objetos são instâncias de classes, que determinam qual informação um objeto contém e como ele pode 
manipulá-la. É uma entidade capaz de reter um estado (informação) e que oferece uma série de operações 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 45 
(comportamento) ou para examinar ou para afetar este estado. É através deles que praticamente todo o 
processamento ocorre em sistemas implementados com linguagens de programação orientadas a objetos. 
Como exemplos de objetos, podemos citar os objetos físicos (um livro, uma mercadoria), funções de pessoas para os 
sistemas (cliente, vendedor), eventos (uma compra, um telefonema), interações entre outros objetos (um item de 
uma nota fiscal é uma interação entre uma compra e um produto do estoque) e lugares (loja matriz, revenda norte). 
Por exemplo, vamos considerar um cachorro(Bob) como nosso “objeto” para facilitar o entendimento acerca 
do conceito de OO: 
 
Analisando este objeto, o cachorro, podemos deduzir que o mesmo possui algumas características que 
pertencem apenas a ele próprio. Por exemplo, um cachorro possui: 
 
 Um nome, 
 Uma idade, 
 Um comprimento de pêlos, 
 Uma cor dos pelos, 
 Uma cor dos olhos, 
 Um peso, 
.... 
“As características que descrevem um objeto são chamadas de atributos”. 
 
Além do conjunto de características que descrevem o cachorro, podemos também identificar um conjunto de ações 
que ele é capaz de executar: 
 Latir, 
 Babar, 
 Correr em círculos, 
 Pegar a bola, 
 Sentar, 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 46 
 Comer, 
 Dormir. 
“As ações que um objeto pode executar são chamadas de métodos ou serviços”. 
 
A única maneira de interagir com os objetos é através dos métodos que ele disponibiliza. Para interagir com 
o cachorro, utilizamos os métodos que relacionamos acima: para alimentá-lo, utilizamos o método “comer”, para 
brincar com ele, utilizamos o método “pegar a bola”, etc. 
“Chamamos de interface ao conjunto de métodos disponíveis em um objeto.” 
8.3.2 Atributos e métodos 
 
Vimos então que os objetos são compostos de atributos e métodos, mas afinal, o que são atributos e o que são 
métodos? 
 
8.3.2.1 Atributos 
Os objetos do mundo real possuem propriedades que possuem valores. Estes valores definem o estado do 
objeto. As propriedades recebem o nome de atributos em OO. 
Podemos dizer que os atributos dos objetos são “variáveis” ou “campos” que armazenam os diferentes 
valores que as características dos objetos podem conter. 
O estado de um objeto é o conjunto de valores de seus atributos em um determinado instante. O 
comportamento de um objeto é como ele age e reage em termos de suas mudanças de estado e troca de 
mensagens com outros objetos. 
O cachorro(Bob) do nosso exemplo poderia ser representado pelos seguintes atributos: 
 
CACHORRO 
Nome Bob 
Idade 10 meses 
Cor dos pelos Bege 
Peso 4 kg 
 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 47 
Um outro objeto “cachorro” apresentaria valores diferentes para os mesmos atributos, por exemplo: 
 
 
CACHORRO 
Nome Lulu 
Idade 2 anos 
Cor dos pelos Laranja 
Peso 3 kg 
 
 
Os atributos de um objeto somente mudam de valor através de estímulosexternos ou internos. A única forma 
de modificar os atributos dos objetos é disparando eventos que provocam a transição desses estados no objeto. 
 
8.3.2.2 Métodos 
Os métodos são procedimentos ou funções que realizam as ações próprias do objeto. Assim, os métodos 
são as ações que o objeto pode realizar. Tudo que o objeto faz é realizado através de seus métodos, pois é através 
dos seus métodos que um objeto se manifesta, e através deles que o objeto interage com os outros objetos. 
Um objeto exibe algum comportamento (executa uma operação) quando recebe um estímulo de outro objeto. 
Um objeto requisita a ação de algum outro objeto, enviando uma mensagem para ele. Esta mensagem é uma 
solicitação a um objeto para que seja executada as rotinas que chamamos de Método da classe. 
Os métodos são responsáveis por acessar ou alterar os atributos de um objeto. Imaginando os métodos do 
nosso objeto de estudo, o cachorro, enumeramos métodos (ações) como latir, babar, comer sentar, etc. 
 
8.3.3 Classes 
 
Uma classe representa um conjunto de objetos que possuem características e comportamentos comuns e de 
agora em diante, diremos que um objeto é uma instância de uma determinada classe, ou seja, criaremos nossos 
objetos baseados nas características definidas nas classes. A ênfase da metodologia orientada a objetos é dada na 
criação das classes, e não dos objetos, como se poderia pensar pelo nome. Olhando os dois cães do exemplo 
anterior, vemos que os dois possuem exatamente o mesmo conjunto de atributos. Isso acontece porque se trata de 
dois objetos da mesma classe, ou categoria. Isso significa que os dois possuem exatamente o mesmo conjunto de 
atributos e métodos, embora cada objeto possa ter valores diferentes para os seus atributos. 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 48 
 
 
 
 
 
 
 
 
Classe Cachorro 
 
 
Objetos de mesma classe possuem a mesma definição tanto para métodos quanto para atributos. 
Tomemos uma classe gatos formada de objetos “gato”. Estes objetos possuem as seguintes características: 
nome, idade, peso, cor de pelos, cor de olhos e comprimento de pelos. Além disso, o objeto possui as seguintes 
ações: miar, comer, dormir, subir na árvore. 
 
 
 
 
 
 
 
 
 
Classe Gato 
 
Muitos objetos do mundo real possuem características comuns e podem ser agrupados de acordo com elas. 
Uma classe representa um gabarito para muitos objetos e descreve como estes objetos estão estruturados 
internamente. 
As classes Cães e Gatos possuem características e métodos comuns, por exemplo: Características comuns 
(nome, idade, peso, cor de pelos, cor de olhos e comprimento de pelos), Métodos comuns (pegar a bola, comer, 
dormir). 
8.3.3 Instanciação 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 49 
A instanciação é quando a classe produz um objeto, como se ela fosse uma espécie de modelo ou gabarito 
para a criação de objetos. Conforme a teoria da orientação a objetos, dizemos que um objeto é, nada mais nada 
menos, que a instância de uma classe. 
Pelo exemplo que estamos estudando, cada cachorro que for armazenado é um novo objeto, uma nova 
instância da classe “Cachorro”. A classe serve de modelo para a criação de novos objetos. 
 
8.4 - Exercício - Conceitos OO 
 
Para atender as necessidades de informação de uma biblioteca universitária foi proposto um sistema que deve 
atender as seguintes características: 
 
 O cadastro dos usuários da biblioteca com endereço completo. Os usuários podem ser classificados em três 
grupos: Professores, Alunos e Funcionários. Para os Alunos é necessário conhecer o curso ao qual 
pertencem. Dos Professores e funcionários, é necessário conhecer o Departamento ao qual estão sempre 
vinculados. 
 O cadastro das obras da biblioteca, que podem ser classificadas em: Livros científicos, periódicos científicos, 
periódicos informativos, periódicos diversos, entretenimento, etc. 
 A língua em que se encontra o exemplar da obra. 
 A mídia onde se encontra o exemplar da obra. 
 Os autores da obra com o controle da nacionalidade do autor. 
 As editoras dos exemplares com o ano de edição de cada exemplar. 
 O histórico dos empréstimos. 
 
Identifique as possíveis classes e objetos com seus respectivos atributos e métodos. 
 
 
 
 
 
 
 
 
 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 50 
8.5 – Classes e Objetos em Java 
 
O conceito de classe apresentado anteriormente é genérico e pode ser aplicado em diversas linguagens de 
programação. Mostraremos como a classe Conta poderia ser escrita utilizando a linguagem Java. Inicialmente, 
discutiremos apenas sobre os atributos. Os métodos serão abordados posteriormente. 
class Conta { 
 
 double saldo; 
 
 double limite; 
 
 int numero; 
 
} 
A classe Java Conta é declarada utilizando a palavra reservada class. No corpo dessa classe, são 
declaradas três variáveis que são os atributos que os objetos possuirão. Como a linguagem Java é estaticamente 
tipada, os tipos dos atributos são definidos no código. Os atributos saldo e limite são do tipo double, que permite 
armazenar números com casas decimais, e o atributo número é do tipo int, que permite armazenar números inteiros. 
Importante 
Por convenção, os nomes das classes na linguagem C# devem seguir o padrão “Camel Case” com a primeira letra 
maiúscula. 
 
8.5.1 Criando objetos em Java 
Após definir a classe Conta, podemos criar objetos a partir dela. Esses objetos devem ser alocados na 
memória RAM do computador. Felizmente, todo o processo de alocação do objeto na memória é gerenciado pela 
máquina virtual. O gerenciamento da memória é um dos recursos mais importantes oferecidos pela máquina virtual. 
Do ponto de vista da aplicação, basta utilizar um comando especial para criar objetos e a máquina virtual se 
encarrega do resto. O comando para criar objetos é o new. 
class TestaConta { 
 
public static void main (String [] args ) { 
 // criando um objeto 
 new Conta () ; 
 } 
 
} 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 51 
A linha com o comando new poderia ser repetida cada vez que desejássemos criar (instanciar) um objeto da 
classe Conta. A classe TestaConta serve apenas para colocarmos o método main, que é o ponto de partida da 
aplicação. 
class TestaConta { 
 
public static void main (String [] args ) { 
 // criando três objetos 
 new Conta () ; 
 new Conta () ; 
 new Conta () ; 
 } 
 
} 
 
Analogia 
Chamar o comando new passando uma classe Java é como se estivéssemos contratando uma construtora passando a 
planta da casa que queremos construir. A construtora se encarrega de construir a casa para nós de acordo com a planta. 
Assim como a máquina virtual se encarrega de construir o objeto na memória do computador. 
 
8.5.2 Referências 
 
Todo objeto possui uma referência. A referência de um objeto é a única maneira de acessar os seus atributos e 
métodos. Dessa forma, devemos guardar as referências dos objetos que desejamos utilizar. 
Referências em Java 
Ao utilizar o comando new, um objeto é alocado em algum lugar da memória. Para que possamos acessar esse 
objeto, precisamos de sua referência. O comando new devolve a referência do objeto que foi criado. 
Para guardar as referências devolvidas pelo comando new, devemos utilizar variáveis não primitivas. 
 
 Conta referencia = new Conta () ; 
No código Java acima, a variável referencia receberá a referência do objeto criado pelo comando new. Essa 
variável é do tipoConta. Isso significa que ela só pode armazenar referências de objetos do tipo Conta. 
 
 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 52 
8.5.3 Manipulando Atributos 
 
Podemos alterar ou acessar os valores guardados nos atributos de um objeto se tivermos a referência a esse 
objeto. Os atributos são acessados pelo nome. No caso específico da linguagem Java, a sintaxe para acessar um 
atributo utiliza o operador ".". 
public class TesteOO { 
 
public static void main (String [] args ) { 
 
 
 Conta referencia = new Conta () ; 
 
 referencia.saldo = 5000; 
 
 referencia.limite = 10000; 
 
 referencia.numero = 1; 
 
 System.out.println ( referencia . saldo ) ; 
 
 System.out.println ( referencia . limite ) ; 
 
 System.out.println ( referencia . numero ) ; 
 
 } 
 
} 
No código acima, o atributo saldo recebe o valor 5000. O atributo limite recebe o valor 10000 e o número recebe 
o valor 1. Depois, os valores são impressos na tela através do comando System.out.println. 
8.5.4 Valores Padrão 
 
Poderíamos instanciar uma classe para criar um objeto e utilizar seus atributos sem inicializá-los explicitamente, 
pois os atributos são inicializados com valores padrão. Os atributos de tipos numéricos são inicializados com 0, os 
atributos do tipo boolean são inicializados com false e os demais atributos com null (referência vazia). 
class Conta { 
 
 double limite ; 
 
} 
 
class TestaConta { 
 
 public static void main ( String [] args ) { 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 53 
 Conta conta = new Conta () ; 
 
 // imprime 0 
 System . out . println ( conta . limite ) ; 
 
 } 
 
} 
 
A inicialização dos atributos com os valores padrão ocorre na instanciação, ou seja, quando o comando new é 
utilizado. Dessa forma, todo objeto “nasce” com os valores padrão. Em alguns casos, é necessário trocar esses 
valores. Para trocar o valor padrão de um atributo, devemos inicializá-lo na declaração. Por exemplo, suponha que o 
limite padrão das contas de um banco seja R$ 2500. Nesse caso, seria interessante definir esse valor como padrão 
para o atributo limite. 
 
class Conta { 
 
 double limite = 2500; 
 
} 
 
 
class TestaConta { 
 
 public static void main ( String [] args ) { 
 
 Conta conta = new Conta () ; 
 
 // imprime 2500 
 System . out . println ( conta . limite ) ; 
 
 } 
 
} 
 
 
 
 
 
 
 
Pág. 
 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 54 
 
8.6 Exercícios Complementares 
 
a) Implemente uma classe chamada Aluno para definir os objetos que representarão os alunos de uma escola. 
Essa classe deve declarar três atributos: o primeiro para o nome, o segundo para o RG e o terceiro para o CPF dos 
alunos. 
b) Faça uma classe chamada TestaAluno e crie dois objetos da classe Aluno atribuindo valores a eles. A classe 
também deve mostrar na tela as informações desses objetos. 
c) Em uma escola, além dos alunos temos os funcionários, que também precisam ser representados em nossa 
aplicação. Então implemente outra classe chamada Funcionario que contenha dois atributos: o primeiro para o cargo 
e o segundo para o salário dos funcionários. 
d) Faça uma classe chamada TestaFuncionario e crie dois objetos da classe Funcionario atribuindo valores a 
eles. Mostre na tela as informações desses objetos. 
e) Em uma escola, os alunos precisam ser divididos por turmas, que devem ser representadas den-tro da 
aplicação. Implemente uma classe chamada Turma que contenha quatro atributos: o primeiro para o período, o 
segundo para definir a série, o terceiro para sigla e o quarto para o tipo de ensino. 
f) Faça uma classe chamada TestaTurma para criar dois objetos da classe Turma. Adicione informações a eles 
e depois mostre essas informações na tela. 
Pág. 
 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 55 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
9.1 Objetos e Construtor 
 
Objetos e Construtor 
Objetos são criados através da declaração new, seguida de um método construtor. Exemplo: 
Automovel gol1 = new Automovel(“Gol V”); 
Uma classe pode ter construtores especializados ou somente o construtor default (gerado pelo compilador). 
Um construtor recebe sempre o mesmo nome da sua classe. 
O método construtor gera uma instância do objeto em memória e o seu código é executado imediatamente após a 
criação do objeto provendo-lhe um estado inicial. Quando declaramos variáveis de qualquer tipo primitivo (boolean, 
byte, short, char, int, long, float, ou double) o espaço em memória (na área de dados) é alocado como parte da 
operação. A declaração de uma variável referência a um objeto não aloca espaço em memória. 
A alocação de memória (no heap) é feita somente quando o objeto é criado. 
Considere o exemplo abaixo: 
Automovel gol; 
gol = new Automovel(); 
• O primeiro comando, a declaração, aloca apenas o espaço suficiente para a referência. O segundo, aloca o 
espaço para os atributos do objeto gol. 
 
• Somente após a criação do objeto é que seus membros (atributos e métodos) podem ser referenciados. 
 
9.2 Herança 
Herança significa ser capaz incorporar os dados e métodos de uma classe previamente definida. Assim como 
a herança de todas as operações e dados, você pode especializar métodos da classe ancestral e especificar novos 
operações e dados, para refinar, especializar, substituir ou estender a funcionalidade da classe progenitora. 
Você pode fazer sempre com que um objeto mais geral armazene um objeto mais especializado, mas 
o contrário não é verdadeiro sem uma conversão explícita de tipos. 
Pág. 
 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 56 
Veja o exemplo abaixo: 
 
 
 
 
 
 
 
 
Herança - terminologia 
• estender = criar uma nova classe que herda todo o conteúdo da classe existente. 
• superclasse = uma classe progenitora ou “base”. 
• subclasse = uma classe filha que herda, ou estende, uma superclasse. 
Em Java, a classe “Object” é raiz de todas as classes: 
 
 
 
 
 
 
 
 
 
 
 
 
Pág. 
 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 57 
this é uma palavra-chave usada num método como referência para o objeto corrente. 
• ela tem o significado de: “o objeto para o qual este trecho de código está sendo executado”. 
 
//Classe ponto 
public class Ponto 
{ 
 
 private float x,y; 
 
 public Ponto(float x,float y) 
 { 
 this.x=x; this.y=y; 
 } 
 
 public void move(float dx,float dy) 
 { 
 this.x+=dx; this.y+=dy; 
 } 
 
 public float retorna_x() 
 { 
 return x; 
 } 
 
 public void mostra() 
 { 
 System.out.println( "(" + this.x + "," + this.y + ")" ); 
 } 
 
} 
 
super é uma palavra chave usada numa subclasse como referência para membros da superclasse. 
• ela tem o significado de: “a superclasse da classe corrente”. 
 
9.3 Polimorfismo 
Existem dois tipos de polimorfismo que são conhecidos como sobrecarga (overload) e sobreposição 
(override). 
Ocorre quando uma classe possui um método com o mesmo nome e assinatura (número, tipo e ordem de 
parâmetros) de um método na sua superclasse. Toda vez que isto ocorrer, a máquina virtual irá executar o método 
da classe mais especializada (a subclasse) e não o método da superclasse. Note que esta decisão ocorre em tempo 
de execução. 
Pág.9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 58 
Polimorfismo ocorre também quando existem dois métodos com mesmo nome, na mesma classe com e 
assinaturas diferentes. O método será escolhido de acordo com o número de parâmetros, tipo ou valor de retorno 
esperado. Note que esta decisão ocorre em tempo de compilação. 
Membros com mesmos identificadores substituem membros herdados. 
• Os membros definidos na superclasse podem ser acessados na subclasse através do qualificador super. 
• Métodos declarados como final não podem ser redefinidos. 
• Métodos abstratos devem ser redefinidos ou declarados como abstratos. 
9.3.1 Polimorfismo - Sobreescrita 
A sobrescrita (ou override) está diretamente relacionada à orientação a objetos, mais especificamente com a 
herança. Com a sobrescrita, conseguimos especializar os métodos herdados das superclasses, alterando o seu 
comportamento nas subclasses por um mais específico. 
A sobrescrita de métodos consiste basicamente em criar um novo método na classe filha contendo a mesma 
assinatura e mesmo tipo de retorno do método sobrescrito. 
Substituir a implementação de um método herdado por uma implementação própria da subclasse. 
public class Super 
{ 
... 
public void metodo1() 
{ 
 a = b * c; 
} 
} 
public class Sub extends Super 
{ 
... 
public void metodo1() 
{ 
 x = y + z; 
} 
} 
Pág. 
 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 59 
9.3.2 Polimorfismo – Sobrecarga 
A sobrecarga (overload) consiste em permitir, dentro da mesma classe, mais de um método com o mesmo 
nome. A sobrecarga de métodos (overload) é um conceito do polimorfismo que consiste basicamente em criar 
variações de um mesmo método, ou seja, a criação de dois ou mais métodos com nomes totalmente iguais em uma 
classe. A Sobrecarga permite que utilizemos o mesmo nome em mais de um método contanto que suas listas de 
argumentos sejam diferentes para que seja feita a separação dos mesmos. 
 
public class Fruta 
{ 
int gramas; 
int calorias_por_grama; 
 
public Fruta() 
{ 
gramas=55; 
calorias_por_grama=0; 
} 
public Fruta(int g, int c) 
{ 
this.gramas =g; 
this.calorias_por_grama =c; 
} 
} 
 
public class Feira 
{ 
public static void main(String args[]) 
{ 
Fruta melancia = new Fruta(4000, 5); 
Fruta manga = new Fruta (); 
manga.gramas=100; 
manga.calorias_por_grama=100; 
System.out.println(“manga “+ manga.gramas + “ gs “ + manga.calorias_por_grama); 
} 
} 
Pág. 
 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 60 
9.4 Exercício - Polimorfismo 
 
1) Crie duas classes que definam os seguintes atributos e métodos para objetos do tipo: 
 
 
 
 
 
 
 
 
 
 
Ao final crie um objeto da classe Empregado e um objeto da classe Gerente, atribuindo valores para seus 
salários e comissão para o gerente. Ao final execute os métodos getSalario() de ambos objetos. Lembrar que o 
salário do gerente é composto do salário + comissão. 
 
 
 
 
 
 
 
 
 
 
Pág. 
 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 61 
9.5 Interfaces 
Interface pode ser considerada como a forma com que um objeto se apresenta para outros, no que diz 
respeito aos seus atributos e métodos (sua funcionalidade). 
* É a representação externa de um objeto. 
* Na nossa vida, estamos acostumados a lidar com objetos através de sua interface, ignorando sua 
complexidade. 
 
 
 
 
 
 
 
 
 
 
 
 
• Criadas com a palavra reservada interface. 
• São sempre públicas. 
• Implementadas pelas classes com a palavra reservada implements. 
Exemplo Interface 
 public interface ControleRemoto 
 { 
 public void ligaTV(); 
 public void desligaTV(); 
 public void mudaCanalTV(int canalNovo); 
Pág. 
 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 62 
 } 
 
 public class TV implements ControleRemoto 
 { 
 public void ligaTV() {...} 
 public void desligaTV() {...} 
 public void mudaCanalTV(int canalNovo) {...} 
 } 
 
 
Pág. 
 
10 OO - CLASSES ABSTRATAS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 63 
10 OO - CLASSES ABSTRATAS 
 
Por vezes, no desenvolvimento de bibliotecas, pode ser útil criar e definir métodos para uma classe que 
represente algum comportamento fundamental. Entretanto o comportamento não será implementado nessa classe. 
Em vez disso, os métodos serão implementados nas subclasses. 
Por exemplo, considere uma classe para representar uma venda. O valor de uma venda é subdividido entre 
valor da mercadoria + valor do imposto. Nossa classe genérica não conhece todos os tipos de imposto, mas as 
subclasses podem conhecer. Por exemplo uma classe que representa venda à vista sabe que o imposto para este 
tipo de venda é 1% e outra classe que representa venda à prazo, sabe que o tipo de imposto para este tipo de venda 
é de 2%. Então a superclasse Venda pode delegar às suas subclasses a tarefa de descobrir a taxa do seu imposto. 
Regras para classes abstratas 
Classes abstratas funcionam de forma muito semelhante às classes normais e praticamente tudo o que é 
possível fazer com classes normais, também pode ser feito com classes abstratas. 
- Elas são identificadas pela palavra chave abstract na definição da classe. 
- Seus métodos abstratos também são identificados pela palavra chave abstract na definição da classe. 
- Não é possível construir uma instância de uma classe abstract, a não ser indiretamente, construindo 
uma instância de uma subclasse dela. 
- As subclasses das classes abstratas devem fornecer implementações para todos os métodos abstratos 
das respectivas classes pai. Caso contrário, elas também serão classes abstratas. Portanto qualquer 
subclasse da classe Venda que não forneça uma implementação para retornar o taxa do imposto 
também será abstrata. 
- Métodos abstratos não podem ser privados nem estáticos. 
 
public abstract class Venda( 
 ... 
 public abstract double getTaxaImposto(); 
 ... 
} 
 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 64 
11 MODIFICADORES JAVA 
11.1 Introdução 
Os modificadores são utilizados para modificar os comportamentos das classes, métodos ou atributos. Os 
modificadores Java são public, protected, private, static, abstract, final, native, synchronized, transient e 
volatile. 
Alguns modificadores podem ser classificados como pertencentes a um grupo chamado modificadores de 
acesso, tais modificadores (public, protected, private) ditam como membros de uma classe são visíveis por outras 
classes. Os outros modificadores não possuem uma organização clara e serão explicados um a um. 
Para cada modificador será explicado o resultado de aplicá-lo sobre cada um dos seguintes elementos da 
linguagem: variáveis, métodos, construtores e classes. 
11.2 Modificadores de Acesso 
Os modificadores de acesso são padrões de visibilidade de acessos às classes, atributos e métodos. 
Esses modificadores são palavras-chaves reservadas pelo Java, ou seja, palavras reservadas não podem ser usadas 
como nome de métodos, classes ou atributos. 
Como boas práticas (best practices) do Java, na maioria das declarações de variáveis de instância são 
definidos os seus atributos com a palavra-chave private, para garantir a segurança de alterações acidentais, sendo 
somenteacessíveis através dos métodos. Essa ação tem como efeito ajudar no encapsulamento dos dados, 
preservando ainda mais a segurança e a aplicação de programação orientada a objetos do Java. 
Por exemplo, quando um programa cria (instancia) um objeto da classe Banco, a variável senha é 
encapsulada (ocultada) no objeto onde pode ser acessada apenas por métodos da classe do objeto, os 
métodos getters e setters, que manipulam a variável de instância. Vejamos abaixo a explicação sobre cada um. 
 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 65 
11.2.1 Private 
O modificador de acesso private e o mais restritivo de todos, variáveis, métodos e construtores com esse 
modificador são visíveis somente dentro da definição da própria classe, acessando-o diretamente ou através de uma 
instância da mesma classe. 
O modificador private pode ser usado em variáveis, métodos e construtores. Em classes, seu uso é restrito a 
classes internas, ou seja, classes declaradas dentro de outras classes. 
Da forma como nossa classe ContaCorrente foi construída, por mais que modifiquemos o atributo saldo 
através do método sacar, é possível atribuir qualquer valor ao atributo saldo. 
public class ContaCorrente { 
 int numero; 
 double saldo; 
 
 boolean sacar(float valor){ 
 
 if (saldo>=valor) { 
 saldo = saldo - valor; 
 return true; 
 } 
 else return false; 
 } 
} 
public class Teste2 { 
 
 public static void main(String[] args) { 
 // Criando um objeto passando dois parâmetros(número e saldo inicial) em seu 
método construtor. 
 ContaCorrente conta = new ContaCorrente(100,5500.00); 
 // Realizando o saque por meio do método sacar 
 conta.sacar(1000); 
 // Alterando diretamente o atributo saldo do objeto conta 
 conta.saldo = -100; 
 } 
 
} 
 A melhor forma de resolver isso seria forçar quem usa a classe a chamar sempre o método sacar e não 
permitir que seja atribuído um valor diretamente ao atributo saldo. Para fazer isso em Java, basta declarar que os 
atributos não podem ser acessados fora da classe usando a palavra chave private. 
 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 66 
Isso é importante, pois pode ser que um valor inválido seja atribuído ao valor do saldo. A melhor forma de 
resolver isso seria forçar quem usa a classe ContaCorrente a chamar sempre o método sacar e não permitir que seja 
atribuído um valor diretamente ao atributo saldo. Para fazer isso em Java, basta declarar que os atributos não podem 
ser acessados fora da classe usando a palavra chave private. Assim, toda conversa de um objeto com outro é feita 
através de troca de mensagem (acessando seus métodos). Veja exemplo abaixo. 
public class ContaCorrente { 
 private int numero; 
 private double saldo; 
 
 // Método construtor da classe ContaCorrente 
 public ContaCorrente(int numero, double saldoInicial){ 
 // Atribuindo os valores recebidos no método construtor para os atributos da 
classe. 
 this.numero = numero; 
 this.saldo = saldo; 
 } 
 
 
 // Método para realizar o saque 
 public boolean sacar(float valor){ 
 
 if (saldo>=valor) { 
 saldo = saldo - valor; 
 return true; 
 } 
 else return false; 
 } 
 
} 
 
public class Teste2 { 
 
 public static void main(String[] args) { 
 // Criando um objeto passando dois parâmetros(número e saldo inicial) em seu 
método construtor. 
 ContaCorrente conta = new ContaCorrente(100,5500.00); 
 // Realizando o saque por meio do método sacar 
 conta.sacar(1000); 
 
 } 
 
} 
 11.2.2 Protected 
O modificador de acesso protected define que variáveis, métodos e construtores com esse modificador 
podem somente ser acessados por classes no mesmo pacote ou subclasses da classe onde o elemento foi definido, 
é importante notar que para os elementos serem acessados na subclasse não é preciso estar no mesmo pacote da 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 67 
classe pai. O modificador protected pode ser aplicado somente em variáveis, métodos e construtores, o seu uso em 
classes não é permitido. 
11.2.3 Public 
O mais abrangente de todos os tipos de acesso, o modificador public declara que elementos com esse 
modificador são acessíveis de qualquer classe Java. Este modificador é aplicável a variáveis, métodos, construtores 
e classes. 
11.2.4 Default (padrão) 
 A classe e/ou seus membros são acessíveis somente por classes do mesmo pacote, na sua declaração não 
é definido nenhum tipo de modificador, sendo este identificado pelo compilador. 
 
public class ModificadorDefault { 
 
 public static void main(String[] args) { 
 String nome = "Roberto Carlos"; 
 System.out.printf("Nome.: %s",nome); 
 } 
} 
A tabela a seguir apresenta um resumo dos modificadores de acesso. 
Tabela dos modificadores de acesso 
Escopo de acesso private default protected public 
mesma classe sim sim sim sim 
mesmo pacote não sim sim sim 
pacotes diferentes (subclasses) não não sim sim 
pacotes diferentes (sem subclasses) não não não sim 
 
11.3 Outros Modificadores 
11.3.1 Final 
O modificador final pode ser aplicado a variáveis, métodos e classes. O comportamento descrito pelo 
operador final varia de elemento para elemento, mas tem um conceito em comum, o conceito de imutabilidade, isto é, 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 68 
elementos final não podem ser mudados. Você pode desejar declarar classes que implementam seus algoritmos 
como classes final. 
11.3.2Abstract 
O modificador abstract pode ser aplicado somente a classes e métodos. Classes abstratas provem um 
modo de adiar a implementação de métodos para subclasses. Uma classe abstrata não pode ser instanciada, ou 
seja, não podemos chamar seus construtores. 
11.3.3 Static 
Este modificador pode ser aplicado a variáveis, métodos e a uma porção de código que não está dentro de 
nenhum método, geralmente referenciado como bloco estático. 
A ideia geral sobre o modificador static é que elementos com esse modificador estão associados com a 
classe e não com instâncias dessa classe. 
Uma variável estática é compartilhada por todas as instâncias de uma classe, ou seja, ao invés de cada 
instância da classe ter uma cópia dessa variável ela é uma única variável compartilhada por todos as instâncias. Para 
a existência de uma variável estática não é preciso nem mesmo a criação de uma instância da classe que contenha a 
variável, é necessário somente que a classe seja carregada na Máquina Virtual Java, já que está é criada e 
inicializada no momento de carga da classe. 
Em relação a métodos as mesmas explicações são verdadeiras, ou seja, métodos podem ser chamados 
mesmo sem nenhuma instância da classe ter sido construída. Um bom exemplo de métodos estáticos existe em toda 
aplicação Java, o método main() é invocado sem a existência de nenhuma instância. 
Métodos e variáveis podem ser referenciados além da forma padrão (através do nome do objeto) através do 
nome da classe. Embora as duas formas sejam corretas e trabalham exatamente da mesma forma a primeira pode 
tornar-se confusa quando referenciando métodos e variáveis estáticas, levando o programador a pensar que este 
método ou variável é não estático. Por esse motivo e conveniente sempre referenciar variáveis estáticas através do 
nome da classe para evitar confusões. 
É importante dizer que métodos estáticos podem somente acessar variáveis também estáticas, ou seja, é 
proibido o uso de variáveis não estáticas dentro de blocos estáticos, com exceção de variáveis criadas dentro do 
próprio bloco é claro. Essa restrição se deve ao fato de que é possível fazer umachamada a um método estático 
mesmo sem haver nenhuma instância dessa classe, ou seja, a provável variável a ser referenciada dentro do método 
pode nem mesmo ter sido criada ainda. 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 69 
Outra importante característica é que não podemos usar a palavra chave this com métodos e variáveis 
estáticas, já que este é uma referência para o objeto que contém o método o qual não é verdadeiro para métodos e 
variáveis estáticas já que estes não pertencem a um objeto em particular, mas sim a classe. 
11.3.4 Transient 
É aplicado somente a variáveis. Quando uma variável é declarada transient ela não é guardada como parte 
do estado de persistência do objeto. 
11.3.5 Synchronized 
Esse modificador é usado para sincronizar o acesso a código em ambientes paralelos. Este modificador será 
visto detalhadamento onde veremos threads e métodos de sincronização. 
11.3.6 Volatile 
São aplicados somente a variáveis. Volatile permite que várias threads acessem simultaneamente a mesma 
variável. 
11.3.7 Native 
 Esse modificador é usado somente em métodos. Algumas vezes é necessário executar código não Java em 
aplicações. Quando desejamos acessar chamadas do Sistema Operacional, interfacear com dispositivos de 
hardware, reusar código não Java, implementar código onde o tempo é um parâmetro crítico e etc... 
11.4 Encapsulamento 
Uma das ideias mais importantes da orientação a objetos é o encapsulamento. Encapsular significa esconder 
a implementação dos objetos. O encapsulamento favorece principalmente dois aspectos de um sistema: a 
manutenção e o desenvolvimento. 
A manutenção é favorecida pois, uma vez aplicado o encapsulamento, quando o funcionamento de um objeto 
deve ser alterado, em geral, basta modificar a classe do mesmo. 
O desenvolvimento é favorecido pois, uma vez aplicado o encapsulamento, conseguimos determinar 
precisamente as responsabilidades de cada classe da aplicação. 
OBJETIVOS DO ENCAPSULAMENTO 
Serve para ocultar os dados; evita que o usuário acesse membros que ele não precisa manipular; permite a 
modificação interna de uma classe sem alterar a sua funcionalidade e o modo como é acessada e é utilizado em 
Java através dos modificadores de acesso. 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 70 
 
11.4.1 Métodos Getters e Setters 
 
Na linguagem Java, há uma convenção de nomenclatura para os métodos que têm como finalidade acessar 
ou alterar as propriedades de um objeto. 
Segundo essa convenção, os nomes dos métodos que permitem a consulta das propriedades de um objeto 
devem possuir o prefixo get. Analogamente, os nomes dos métodos que permitem a alteração das propriedades de 
um objeto devem possuir o prefixo set. 
Na maioria dos casos, é muito conveniente seguir essa convenção, pois os desenvolvedores Java já estão 
acostumados com essas regras de nomenclatura e o funcionamento de muitas bibliotecas do Java depende 
fortemente desse padrão. 
class Cliente { 
 
 // Atributos da classe 
 private String nome; 
 private String cpf; 
 
 // Métodos acessadores para os atributos da classe 
 
 public String getNome() { 
 return nome; 
 } 
 public void setNome(String nome) { 
 this.nome = nome; 
 } 
 public String getCpf() { 
 return cpf; 
 } 
 public void setCpf(String cpf) { 
 this.cpf = cpf; 
 } 
 
} 
 
IMPORTANTE 
Os métodos gets e sets são utilizados para permitir o acesso aos atributos (já que eles são private) de uma 
maneira controlada, a prática mais comum é criar dois métodos 
 
 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 71 
11.5 Exercício 
 
1) Julgue V ou F os seguintes itens a seguir acerca dos modificadores de Java. 
 
( ) public: Uma classe declarada como pública dá as outras classes, de todos os pacotes, acesso aos seus membros 
que forem públicos também. 
 
( ) private: O membro da classe não pode ser acessado por nenhuma outra classe, quando é declarado private. 
Como não é visto pelas subclasses, não se aplica regras de overriding. Esse modificador não se aplica a classes, 
somente a seus membros (métodos e atributos). 
 
( ) protected: Quando um membro da classe é declarado assim, ele se torna acessível por classes do mesmo pacote 
ou através de herança. 
 
( ) abstract: Quando é aplicado à classe não permite estendê-la, nos métodos impede que o mesmo seja sobrescrito 
(overriding) na subclasse, já nas variáveis impossibilita que essa seja reinicializada com outro valor. 
 
( ) final: Classes declaradas como abstratas provém um modo de adiar a implementação de métodos também 
declarados como abstratos para subclasses. Uma classe abstrata não pode ser instanciada, ou seja, não podemos 
chamar os seus construtores. 
 
( ) static: Variáveis e métodos marcados como static pertencem à classe, ao invés de alguma instância dessa, esse 
modificador não se aplica a classes. 
 
( ) public : É o mais restritivo de todos. Atributos e métodos declarados como public em uma classe podem ser 
acessados pelos métodos da própria classe, por classes derivadas desta e por qualquer outra classe em qualquer 
outro pacote. 
 
( ) protected : Atributos e métodos definidos como protected são acessíveis pelos métodos da própria classe e pelas 
classes derivadas. 
 
 ( ) private : É o mais restritivo. Atributos e métodos declarados como private só podem ser acessados pelos 
métodos da própria classe. 
 
 ( ) A instrução final indica que a classe, método ou variável assim declarada têm uma única atribuição que se 
mantém constante, ou seja, não pode ser alterada no decorrer do processamento. 
Pág. 
 
11 MODIFICADORES JAVA 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 72 
( ) O nível de acesso protected é mais restritivo do que o nível de acesso private. 
( ) Os métodos declarados como public só podem ser acessados a partir dos métodos da própria classe ou de 
classes derivadas. 
 
2) Porque esse código não compila? 
class Teste { 
 
int x = 37; 
 
public static void main(String [] args) { 
 System.out.println(x); 
 } 
} 
R = 
 
3) Defina uma classe Funcionário com os atributos nome, cargo e salário. Na mesma classe, defina os métodos 
acessadores para garantir o encapsulamento dos atributos. Defina outra classe com o método main para 
criar objetos da classe Funcionário e executar os seus métodos. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Pág. 
 
12 EXCEÇÕES – CONTROLANDO OS ERROS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 73 
12 EXCEÇÕES – CONTROLANDO OS ERROS 
 
 Exceção é uma indicação de um problema que ocorre durante a execução de um programa. O nome 
“exceção” significa que o problema não ocorre frequentemente. Com o tratamento de exceções, um programa 
pode continuar executando (em vez de encerrar) depois de lidar com um problema. Uma exceção é um sinal que 
indica que algum tipo de condição excepcional ocorreu durante a execução do programa. Assim, exceções estão 
associadas a condições de erro que não tinham como ser verificadas durante a compilação do programa. 
As duas atividades associadas à manipulação de uma exceção são: 
geração: a sinalização de que uma condição excepcional (por exemplo, um erro) ocorreu, e 
captura: a manipulação (tratamento) da situação excepcional, onde as ações necessárias para a recuperação 
da situação de erro são definidas. 
 
Para cada exceção que pode ocorrer durante a execução do código, um bloco de ações de tratamento (um 
exception handler) deve ser especificado. O compilador Java verifica e enforçaque toda exceção “não-trivial” tenha 
um bloco de tratamento associado. 
 
O mecanismo de manipulação de exceções em Java, embora apresente suas particularidades, teve seu 
projeto inspirado no mecanismo equivalente de C++, que por sua vez foi inspirado em Ada. É um mecanismo 
adequado à manipulação de erros síncronos, para situações onde a recuperação do erro é possível. 
 
A sinalização da exceção é propagada a partir do bloco de código onde ela ocorreu através de toda a pilha 
de invocações de métodos até que a exceção seja capturada por um bloco manipulador de exceção. Eventualmente, 
se tal bloco não existir em nenhum ponto da pilha de invocações de métodos, a sinalização da exceção atinge o 
método main(), fazendo com que o interpretador Java apresente uma mensagem de erro e aborte sua execução. 
 
12.1 Tratamento de exceções 
 
A captura e o tratamento de exceções em Java se dá através da especificação de blocos try, catch e finally, 
definidos através destas mesmas palavras reservadas da linguagem. 
 
A estruturação desses blocos obedece à seguinte sintaxe: 
try { 
// código que inclui comandos/invocações de métodos 
// que podem gerar uma situação de exceção. 
} 
catch (XException ex) { 
Pág. 
 
12 EXCEÇÕES – CONTROLANDO OS ERROS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 74 
// bloco de tratamento associado à condição de 
// exceção XException ou a qualquer uma de suas 
// subclasses, identificada aqui pelo objeto 
// com referência ex 
} 
catch (YException ey) { 
// bloco de tratamento para a situação de exceção 
// YException ou a qualquer uma de suas subclasses 
} 
finally { 
// bloco de código que sempre será executado após 
// o bloco try, independentemente de sua conclusão 
// ter ocorrido normalmente ou ter sido interrompida 
} 
onde XException e YException deveriam ser substituídos pelo nome do tipo de exceção. Os blocos não podem ser 
separados por outros comandos — um erro de sintaxe seria detectado pelo compilador Java neste caso. Cada bloco 
try pode ser seguido por zero ou mais blocos catch, onde cada bloco catch refere-se a uma única exceção. 
O bloco finally, quando presente, é sempre executado. Em geral, ele inclui comandos que liberam recursos que 
eventualmente possam ter sido alocados durante o processamento do bloco try e que podem ser liberados, 
independentemente de a execução ter encerrado com sucesso ou ter sido interrompida por uma condição de 
exceção. A presença desse bloco é opcional. Alguns exemplos de exceções já definidas no pacote java.lang incluem: 
 
ArithmeticException: indica situações de erros em processamento aritmético, tal como uma divisão inteira por 0. A 
divisão de um valor real por 0 não gera uma exceção (o resultado é o valor infinito); 
 
NumberFormatException: indica que tentou-se a conversão de uma string para um formato numérico, mas seu 
conteúdo não representava adequadamente um número para aquele formato. É uma subclasse de 
IllegalArgumentException; 
 
IndexOutOfBounds: indica a tentativa de acesso a um elemento de um agregado aquém ou além dos limites 
válidos. É a superclasse de ArrayIndexOutOfBoundsException, para arranjos, e de StringIndexOutOfBounds, para 
strings; 
 
NullPointerException: indica que a aplicação tentou usar uma referência a um objeto que não foi ainda definida; 
 
ClassNotFoundException: indica que a máquina virtual Java tentou carregar uma classe mas não foi possível 
encontrá-la durante a execução da aplicação. 
 
Além disso, outros pacotes especificam suas exceções, referentes às suas funcionalidades. Por exemplo, no 
pacote java.io define-se IOException, que indica a ocorrência de algum tipo de erro em operações de entrada e 
saída. É a superclasse para condições de exceção mais específicas desse pacote, tais como EOFException (fim de 
Pág. 
 
12 EXCEÇÕES – CONTROLANDO OS ERROS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 75 
arquivo ou stream), FileNotFoundException (arquivo especificado não foi encontrado) e InterruptedIOException 
(operação de entrada ou saída foi interrompida). 
Uma exceção contém pelo menos uma string que a descreve, que pode ser obtida pela aplicação do método 
getMessage(), mas pode eventualmente conter outras informações. Por exemplo, InterruptedIOException inclui um 
atributo público do tipo inteiro, bytesTransferred, para indicar quantos bytes foram transferidos antes da interrupção 
da operação ocorrer. Outra informação que pode sempre ser obtida de uma exceção é a seqüência de métodos no 
momento da exceção, obtenível a partir do método printStackTrace(). 
Como exceções fazem parte de uma hierarquia de classes, exceções mais genéricas (mais próximas do topo 
da hierarquia) englobam aquelas que são mais específicas. Assim, a forma mais genérica de um bloco try-catch é 
try { ... } 
catch (Exception e) { ... } 
 
pois todas as exceções são derivadas de Exception. Se dois blocos catch especificam exceções em um mesmo ramo 
da hierarquia, a especificação do tratamento da exceção derivada deve preceder aquela da mais genérica. 
 
12.2 Erros e Exceções de runtime 
 
Exceções consistem de um caso particular de um objeto da classe Throwable. Apenas objetos dessa classe 
ou de suas classes derivadas podem ser gerados, propagados e capturados através do mecanismo de tratamento de 
exceções. 
Além de Exception, outra classe derivada de Throwable é a classe Error, que é a raiz das classes que 
indicam situações que a aplicação não tem como ou não deve tentar tratar. Usualmente indica situações anormais, 
que não deveriam ocorrer. Entre os erros definidos em Java, no pacote java.lang, estão StackOverflowError e 
OutOfMemoryError. São situações onde não é possível uma correção a partir de um tratamento realizado pelo 
próprio programa que está executando. 
Há também exceções que não precisam ser explicitamente capturadas e tratadas. São aquelas derivadas de 
RuntimeException, uma classe derivada diretamente de Exception. São exceções que podem ser geradas durante a 
operação normal de uma aplicação para as quais o compilador Java não irá exigir que o programador proceda a 
algum tratamento (ou que propague a exceção, como descrito na Seção 2.6.3). Entre essas incluem-se 
ArithmeticException, IllegalArgumentException, IndexOutOfBoundsException e NullPointerException. 
 
12.3 Propagando exceções 
 
Embora toda exceção que não seja derivada de RuntimeException deva ser tratada, nem sempre é possível 
tratar uma exceção no mesmo escopo do método cuja invocação gerou a exceção. Nessas situações, é possível 
propagar a exceção para um nível acima na pilha de invocações. Para tanto, o método que está deixando de capturar 
e tratar a exceção faz uso da cláusula throws na sua declaração: 
Pág. 
 
12 EXCEÇÕES – CONTROLANDO OS ERROS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 76 
 
void métodoQueNãoTrataExceção() throws Exception { 
invoca.métodoQuePodeGerarExceção(); 
} 
 
Nesse caso, métodoQueNãoTrataExceção() reconhece que em seu corpo há a possibilidade de haver a 
geração de uma exceção mas não se preocupa em realizar o tratamento dessa exceção em seu escopo. Ao 
contrário, ele repassa essa responsabilidade para o método anterior na pilha de chamadas. 
 
Eventualmente, também o outro método pode repassar a exceção adiante. Porém, pelo menos no método 
main() as exceções deverão ser tratadas ou o programa pode ter sua interpretação interrompida. 
 
12.4 Definindo e gerando exceçoes 
 
Exceções são classes. Assim, é possível que uma aplicação defina suas próprias exceções através do 
mecanismo de definição de classes. 
 
Por exemplo, considere que fosse importante para uma aplicação diferenciar a condição de divisão por zero 
de outras condições de exceções artiméticas.Neste caso, uma classe DivideByZeroException poderia ser criada: 
 
public class DivideByZeroExceptionextends ArithmeticException { 
 
public DivideByZeroException() { 
super("O denominador na divisão inteira tem valor zero"); 
 } 
 
} 
Neste caso, o argumento para o construtor da superclasse especifica a mensagem que seria impressa 
quando o método getMessage() fosse invocado para essa exceção. Essa é a mesma mensagem que é apresentada 
para um RuntimeException que não é capturado e tratado. 
Para gerar uma condição de exceção durante a execução de um método, um objeto dessa classe deve ser 
criado e, através do comando throw, propagado para os métodos anteriores na pilha de execução: 
 
public double calculaDivisao (double numerador, int denominador) 
throws DivideByZeroException { 
if (denominador == 0) 
throw new DivideByZeroException(); 
return numerador / denominador; 
} 
 
Pág. 
 
12 EXCEÇÕES – CONTROLANDO OS ERROS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 77 
O mesmo comando throw pode ser utilizado para repassar uma exceção após sua captura—por exemplo, 
após um tratamento parcial da condição de exceção: 
public void usaDivisao() throws DivideByZeroException { 
... 
try { 
d = calculaDivisao(x, y); 
} 
catch (DivideByZeroException dbze) { 
... 
throw dbze; 
} 
... 
} 
Nesse caso, a informação associada à exceção (como o seu ponto de origem, registrado internamente no 
atributo do objeto que contém a pilha de invocações) é preservada. Caso fosse desejado mudar essa informação, 
uma nova exceção poderia ser gerada ou, caso a exceção seja a mesma, o método fillInStackTrace() poderia ser 
utilizado, como em 
throw dbze.fillInStackTrace(); 
12.5 Hierarquia de exceções Java 
 As classes de exceção herdam direta ou indiretamente da classe Exception, formando uma 
hierarquia de herança. Pode estender essa hierarquia com suas próprias classes de exceção.A figura 
abaixo mostra uma pequena parte da hierarquia de herança da classe Throwable (uma subclasse de 
Object), que é a superclasse da classe Exception. Somente objetos Throwable podem ser utilizados com o 
mecanismo de tratamento de exceções. A classe Throwable tem duas subclasses: Exception e Error. A 
classe Exception e suas subclasses representam situações excepcionais que podem ocorrer em um 
programa Java. Essas subclasses podem ser capturadas e tratadas pelo aplicativo. A classe Error e suas 
subclasses representam situações anormais que podem acontecer na JVM. 
Pág. 
 
12 EXCEÇÕES – CONTROLANDO OS ERROS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 78 
 
Pág. 
 
THREADS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 79 
13 THREADS 
 
13.1 Conceito de Threads 
Se pensarmos nos programas que utilizamos comumente no dia a dia, conseguiremos chegar a seguinte 
conclusão: um programa executa um conjunto de tarefas relativamente independentes entre si. Por exemplo, um 
navegador pode baixar vários arquivos diferentes além de permitir a navegação. Um software de visualização de 
vídeos além de reproduzir imagens também reproduzir sons. 
Se pensarmos em sistemas corporativos, também chegamos na mesma conclusão: um sistema corporativo 
executa um conjunto de tarefas relativamente independentes entre si. Por exemplo, dois ou mais usuários acessando 
o mesmo sistema para fazer coisas diferentes. 
Neste sentido uma thread trabalha como um subsistema, sendo uma forma de um processo se autodividir em 
duas ou mais tarefas. É o termo em inglês para Linha ou Encadeamento de Execução. 
O conceito de thread está intimamente ligado ao conceito de processo, assim é fundamental entender o que são 
processos, como eles são representados e colocados em execução pelo Sistema Operacional, para em seguida 
entender as threads. 
Dessa forma segue uma breve definição de Processo e posteriormente a de Thread. 
 
 
Definição de Processo 
“Um processo é basicamente um programa em execução, sendo constituído do código executável, dos dados 
referentes ao código, da pilha de execução, do valor do contador de programa (registrador PC), do valor do 
apontador do apontador de pilha (registrador SP), dos valores dos demais registradores do hardware, além de um 
conjunto de outras informações necessárias à execução dos programas.” Tanenbaum 
 
 
Definição de Thread 
“Thread, ou processo leve, é a unidade básica de utilização da CPU, consistindo de : contador de programa, conjunto de 
registradores e uma pilha de execução. Thread são estruturas de execução pertencentes a um processo e assim compartilham os 
segmentos de código e dados e os recursos alocados ao sistema operacional pelo processo. O conjunto de threads de um 
processo é chamado de Task e um processo tradicional possui uma Task com apenas uma thread.” Silberschatz 
 
 
Pág. 
 
THREADS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 80 
 
 Paralelismo x Concorrência 
Threads podem executar suas funções de forma paralela ou concorrente, onde quando as threads são 
paralelas elas desempenham o seus papeis independente uma das outras. Já na execução concorrente, as threads 
atuam sobre objetos compartilhados de forma necessitando de sincronismo no acesso a esses objetos, assim deve 
ser garantido o direito de atomicidade e exclusão mútua nas operações das threads sobre objetos compartilhados. 
13.2 Ciclo de Vida de uma Thread 
Durante a vida de uma thread ela pode estar em vários estados, conforme pode ser visto abaixo. 
 
 
13.2.1 Criando Threads 
A criação de uma thread é feita através do chamado ao seu construtor colocando a thread no estado Nova, o 
qual representa uma thread vazia, ou seja, nenhum recurso do sistema foi alocado para ela ainda. Quando uma 
thread está nesse estado a única operação que pode ser realizada é a inicialização dessa thread através do método 
start(), se qualquer outro método for chamado com a thread no estado Nova irá acontecer uma exceção 
(IllegalThreadStateException), assim como, quando qualquer método for chamado e sua ação não for condizente 
com o estado atual da thread. 
Pág. 
 
THREADS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 81 
13.2.2 Iniciando Threads 
A inicialização de uma thread é feita através do método start() e nesse momento os recursos necessários 
para execução da mesma são alocados, tais como recursos para execução, escalonamento e chamada do método 
run da thread. 
13.2.3 Fazendo Thread Esperar 
Uma thread irá para o estado Esperando quando: 
 
 O método sleep (faz a thread esperar por um determinada tempo) for chamado; 
 O método wait (faz a thread esperar por uma determinada condição) for chamado; 
 Quando realizar solicitação de I/O. 
13.2.4 Finalizando Threads 
Uma Thread é finalizada quando acabar a execução do seu método run, e então ela vai para o estado Morta, 
onde o Sistema de Execução Java poderá liberar seus recursos e eliminá-la . 
13.2.5 Verificando se Threads estão Executando/Pronta/Esperando ou Novas/Mortas 
 
A classe Thread possui o método isAlive, o qual permite verificar se uma thread está nos estado 
Executando/Pronta/Esperando ou nos estados Nova/Morta. Quando o retorno do método for true a thread esta 
participando do processo de escalonamento e o retorno for false a thread está fora do processo de escalonamento. 
Não é possível diferenciar entre Executando, Pronta ou Esperando, assim também como não é possível diferenciar 
entre Nova ou Morta. 
13.3 Implementando Threads em java 
Podemos, em Java, facilmente criar uma classe que tem um método que vai ser executado 
concorrentemente com o seu main. Para isso, você precisa implementar ainterface Runnable, que define o método 
run. 
 
class ThreadTeste 
{ 
 public static void main (String args[]) 
 { 
 ThreadInterface tiJ = new ThreadInterface(); 
 Thread thread = new Thread(tiJ); 
 thread.start(); 
 } 
} 
// Classe que implementa a interface Runnable 
Pág. 
 
THREADS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 82 
public class ThreadInterface implements Runnable { 
 public void run() 
 { 
 for (int i=0; i "+i); 
 } 
 } 
} 
Como a classe Thread implementa Runnable, é possível criar uma subclasse de Threads e reescrever o run, 
que na classe Thread não faz nada, conforme exemplo abaixo: 
package threads; 
 
class MinhaThread extends Thread 
{ 
 public MinhaThread(String nome){ 
 super(nome); 
 } 
 
 public void run(){ 
 
 for (int i=0; i distanciaTotalCorrida) { 
 distanciaCorrida = distanciaTotalCorrida; 
 } 
 } 
 
 /** Representando o descanso do sapo */ 
 public void sapoDescansando () { 
 /* Método que passa vez a outras threads */ 
 yield(); 
 } 
 
 /** Imprime a colocação do sapo ao final da corrida */ 
 public void colocacaoSapo () { 
 colocacao++; 
 System.out.println(nome + " foi o " + colocacao + "º colocado com " + pulos + " 
pulos"); 
 } 
 
 /** Método run da thread Corrida de Sapos42 
7.8 Exercícios ................................................................................................................................................ 43 
8 ORIENTAÇÃO A OBJETOS(OO) BÁSICA ......................................................................................................... 44 
8.1 Fundamentos da Programação Orientada a Objetos......................................................................................... 44 
8.2. Paradigma Orientado por Objetos .................................................................................................................... 44 
8.3 Principais conceitos de POO ............................................................................................................................. 44 
8.3.1 Objetos ........................................................................................................................................................... 44 
8.3.2 Atributos e métodos ........................................................................................................................................ 46 
8.3.3 Classes ........................................................................................................................................................... 47 
8.3.3 Instanciação .................................................................................................................................................... 48 
8.4 - Exercício - Conceitos OO ................................................................................................................................ 49 
8.5 – Classes e Objetos em Java ............................................................................................................................ 50 
8.5.1 Criando objetos em Java ................................................................................................................................ 50 
8.5.2 Referências ..................................................................................................................................................... 51 
8.5.3 Manipulando Atributos .................................................................................................................................... 52 
8.5.4 Valores Padrão ............................................................................................................................................... 52 
8.6 Exercícios Complementares .............................................................................................................................. 54 
9 OO - HERANÇA, POLIMORFISMO E INTERFACES ......................................................................................... 55 
9.1 Objetos e Construtor .......................................................................................................................................... 55 
9.2 Herança ............................................................................................................................................................. 55 
9.3 Polimorfismo ...................................................................................................................................................... 57 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 4 
9.3.1 Polimorfismo - Sobreescrita ............................................................................................................................ 58 
9.3.2 Polimorfismo – Sobrecarga ............................................................................................................................. 59 
9.4 Exercício - Polimorfismo .................................................................................................................................... 60 
9.5 Interfaces ........................................................................................................................................................... 61 
10 OO - CLASSES ABSTRATAS ........................................................................................................................... 63 
11 MODIFICADORES JAVA ................................................................................................................................... 64 
11.1 Introdução ........................................................................................................................................................ 64 
11.2 Modificadores de Acesso ................................................................................................................................. 64 
11.2.1 Private ........................................................................................................................................................... 65 
11.2.2 Protected ...................................................................................................................................................... 66 
11.2.3 Public ............................................................................................................................................................ 67 
11.2.4 Default (padrão) ............................................................................................................................................ 67 
11.3 Outros Modificadores ....................................................................................................................................... 67 
11.3.1 Final .............................................................................................................................................................. 67 
11.3.2Abstract .......................................................................................................................................................... 68 
11.3.3 Static ............................................................................................................................................................. 68 
11.3.4 Transient ....................................................................................................................................................... 69 
11.3.5 Synchronized ................................................................................................................................................ 69 
11.3.6 Volatile .......................................................................................................................................................... 69 
11.3.7 Native ............................................................................................................................................................ 69 
11.4 Encapsulamento .............................................................................................................................................. 69 
11.4.1 Métodos Getters e Setters ............................................................................................................................ 70 
11.5 Exercício .......................................................................................................................................................... 71 
12 EXCEÇÕES – CONTROLANDO OS ERROS .................................................................................................... 73 
12.1 Tratamento de exceções ................................................................................................................................. 73 
12.2 Erros e Exceções de runtime ........................................................................................................................... 75 
12.3 Propagando exceções ..................................................................................................................................... 75 
12.4 Definindo e gerando exceçoes ........................................................................................................................*/ 
 public void run () { 
 while (distanciaCorridaarquivo como argumento. Dessa 
forma, a leitura do teclado com saída para um arquivo ficou muito simples: 
 
Scanner s = new Scanner(System.in); 
PrintStream ps = new PrintStream("arquivo.txt"); 
while (s.hasNextLine()) { 
 ps.println(s.nextLine()); 
} 
A classe Scanner é do pacote java.util. Ela possui métodos muito úteis para trabalhar com Strings, em especial, 
diversos métodos já preparados para pegar números e palavras já formatadas através de expressões regulares. Fica 
fácil parsear um arquivo com qualquer formato dado. 
 
14.7 Exercícios 
 
a) Faça um programa em Java que leia um texto informado pelo usuário no console e que salve o texto 
informado em um arquivo qualquer. 
Pág. 
 
15 COLLECTIONS FRAMEWORK 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 93 
15 COLLECTIONS FRAMEWORK 
 
15.1 – Introdução 
 
Quando uma aplicação precisa manipular uma quantidade grande de dados, ela deve utilizaralguma estrutura 
de dados. Podemos dizer que a estrutura de dados mais básica do Java são os arrays. Entretanto, trabalhar 
diretamente com arrays não é simples dado as diversas limitações que eles possuem. A limitação principal é a 
capacidade fixa, um array não pode ser redimensionado. Se todas as posições de umarray estiverem ocupadas não 
podemos adicionar mais elementos. Normalmente, criamos um outro array com maior capacidade e transferimos os 
elementos do array antigo para o novo. 
Além disso, adicionar ou remover elementos provavelmente gera a necessidade de deslocar parte do 
conteúdo do array. 
Para facilitar a manipulação de dados por meio das estruturas de dados, java possui a API Collection. 
 
15.2 – Tipos de Coleções 
 
 Existem várias coleções diferentes. Elas diferem, por exemplo, nos mecanismos de armazenagem usados, 
na maneira que acessam, dados e nas regras sobre quais dados podem ser armazenados. A API Collections 
oferecem uma variedade de interfaces e algumas classes de implementação concreta cobrindo essas variações. 
Uma interface geral, java.util.Collection, define a estrutura básica de coleções. Essa interface estipula os 
métodos que permitem a você acrescentar itens, remover itens, determinar se eles estão na coleção e contar a 
quantidade de itens na coleção. 
Algumas coleções são ordenadas; isto é, há uma clara noção de um item seguindo um outro. Uma coleção 
desse tipo, normalmente é conhecida como uma lista ou uma seqüência. Em algumas listas, a ordem é uma ordem 
em que os itens são acrescentados à coleção; em outras os próprios elementos parecem ter uma ordem natural, e 
aquela ordem é entendida pela lista. Na API Collections de Java, a interface java.util.List define uma estrutura 
básica para coleções desse tipo. 
Se uma coleção impõe a condição específica que ela não pode conter o mesmo valor mais do que uma vez, 
então ela é conhecida como um set(conjunto). A interface java.util.Set define a estrutura básica desse tipo de 
coleção. 
O tipo final de comportamento especializado, diretamente suportado pelas API Collectiosn é conhecido como 
uma map(mapa), java.util.Map. Um mapa usa um conjunto de valores-chave para buscar, ou indexar, os dados 
armazenados. Por exemplo, se você armazenar um objeto representando uma pessoa, então como valor chave você 
Pág. 
 
15 COLLECTIONS FRAMEWORK 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 94 
pode usar o nome daquela pessoa ou algum outro identificador único, como um número de seguro social ou um 
número de identificação de funcionário. É uma exigência para um mapa que a chave seja única, e por esse motivo, 
se você estiver armazenando dados sobre uma pessoa em um mapa, o nome não é uma chave muito boa – é bem 
possível que duas pessoas tenham o mesmo nome. A interface Map não herda a interface Collection! 
 
 
Collection 
Set – Sem repetição 
List – Com repetição/ordenação 
Coleção Map – Par/Valor 
 
Tanto a interface List como a interface Set herdam a interface Collection que define métodos para adicionar e 
remover um elemento, verificar se ele está na coleção e outras operações, alguns métodos da interface collection: 
 
Nome do Método Descrição 
boolean add(Object) Adiciona um elemento na coleção. Como algumas coleções não suportam 
elementos duplicados, este método retorna true ou false indicando se a 
adição foi efetuada com sucesso. 
boolean remove(Object) Remove determinado elemento da coleção. Se ele não existia, retorna 
false. 
int size() Retorna a quantidade de elementos existentes na coleção. 
boolean contains(Object) Procura por determinado elemento na coleção, e retorna verdadeiro caso 
ele exista. Esta comparação é feita baseando-se no método equals() do 
objeto, e não através do operador ==. 
Iterator iterator() Retorna um objeto que possibilita percorrer os elementos daquela 
coleção. 
 
Antes de começarmos a codificar alguns exemplos de como utilizar as collections, vamos tomar como base a 
classe abaixo: 
 
 
public class Livro { 
 
 // Atributos da classe 
 private String titulo; 
 private String editora; 
Pág. 
 
15 COLLECTIONS FRAMEWORK 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 95 
 
 // Método construtor sem parâmetros 
 Livro() { } 
 
 // Método construtor com parâmetros 
 Livro(String titulo, String editora) { 
 this.titulo = titulo; 
 this.editora = editora; 
 } 
 
 // Métodos acessadores 
 public String getEditora() { 
 return this.editora; 
 } 
 public void setEditora(String editora) { 
 this.editora = editora; 
 
 } 
 public String getTitulo() { 
 return this.titulo; 
 } 
 public void setTitulo(String editora) { 
 this.editora = editora; 
 } 
} 
 
 
Exemplo utilizando os Arrays 
 
 
public class TesteArray { 
 
 public static void main(String args[]) { 
 // Criando o array com três posições 
 Livro[] livros = new Livro[3]; 
 
 // Populando o array 
 livros[0] = new Livro("Java: Como Programar", "Bookman"); 
 livros[1] = new Livro("Tutorial do JEE", "Campus"); 
 livros[2] = new Livro("Core Java 2: Fundaments", "Makron Books"); 
 
 // Percorrendo e imprimindo os elementos do array 
 for( int i = 0; i list = new ArrayList(); 
 list.add(new Livro("Java: Como Programar", "Bookman")); 
 list.add(new Livro("Tutorial do JEE", "Campus")); 
 list.add(new Livro("Core Java 2: Fundaments", "Makron Books")); 
 
 for( int i = 0; i que indica 
qual é o tipo que estamos trabalhando com essa coleção.Com isso definimos o que os métodos vão receber 
e devolver. Uma 
Collection tem métodos como contains(Tipo o) e add(Tipo o), o que nos da uma enorme segurança em 
tempo de compilação, evitando castings. No exemplo acima, o tipo definido para o Arraylist foi da classe 
Livro. 
 
 
 
 
 
Pág. 
 
15 COLLECTIONS FRAMEWORK 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 97 
15.2.2 – Conjunto 
 
Uma das principais características de um conjunto(Set) é o fato de que a ordem em que os elementos são 
armazenados. 
A ordem vai variar de implementação para implementação, as principais implementações de uma interface 
Set são as classes HashSet e ThreeSet. 
Quantos elementos serão adicionados no Set chamado conjunto no exemplo abaixo? 
 
package collections; 
 
import java.util.ArrayList; 
import java.util.HashSet; 
import java.util.Set; 
 
public class TesteConjunto { 
 
 public static void main(String[] args) { 
 
 // Criando a estrutura de conjunto 
 Set conjunto = new HashSet(); 
 
 // Populando a estrutura criada 
 conjunto.add("Elemento 1"); 
 conjunto.add("Elemento 2"); 
 conjunto.add("Elemento 3"); 
 conjunto.add("Elemento 3"); 
 conjunto.add("Elemento 4"); 
 } 
} 
 
 
15.2.3 – Mapas 
 
Os mapas trabalham associando chaves a valores, para quem já tem uma certa experiência com Java e já 
trabalho com arquivos properties vai ficar fácil assimilar esta interface. As principais implementações da interface 
Map são o HashMap e o HashTable. 
 
Exemplo utilizando um HashMap 
 
 
import java.util.HashMap; 
import java.util.Map; 
 
public class ExemploMapas { 
 
 public static void main(String args[]) { 
Pág. 
 
15 COLLECTIONS FRAMEWORK 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 98 
 
 // Criando a estrutura de mapas 
 Map mapa = new HashMap(); 
 
 // Variável auxiliar 
 String pessoaNome; 
 // Populando o mapa 
 mapa.put( "pessoa.nome", "Gleidson Porto"); 
 mapa.put( "pessoa.idade", "35") ; 
 mapa.put( "pessoa.email", "gleidsonporto@gmail.com"); 
 mapa.put( "pessoa.site", "www.logusti.com.br") ; 
 
 // Pegando o nome da chave pessoa.nome do mapa 
 pessoaNome = (String)mapa.get("pessoa.nome"); 
 System.out.println("Nome: " + pessoaNome); 
 
 } 
 
}} 
 
O método put(Object, Object) da interface Map recebe a chave e o valor de uma nova associação, caso já 
exista uma associação para esta chave o método irá retornar o objeto associado a esta chave, e irá trocar o este 
objeto pelo novo objeto passado no método put. 
 
SAIBA MAIS 
Um mapa importante é a tradicional classe Properties, que mapeia strings e é muito utilizada para a configuração 
de aplicações. 
A Properties possui, também, métodos para ler e gravar o mapeamento com base em um arquivo texto, 
facilitando muito a sua persistência. 
Properties config = new Properties(); 
 
config.setProperty("database.login", "logusti"); 
config.setProperty("database.password", "g1o4a1"); 
config.setProperty("database.url","jdbc:mysql:/localhost/teste"); 
 
// muitas linhas depois... 
 
String login = config.getProperty("database.login"); 
String password = config.getProperty("database.password"); 
String url = config.getProperty("database.url"); 
DriverManager.getConnection(url, login, password); 
Repare que não houve a necessidade do casting para String no momento de recuperar os objetos associados. 
Isto porque a classe Properties foi desenhada com o propósito de trabalhar com a associação entre Strings. 
 
Pág. 
 
15 COLLECTIONS FRAMEWORK 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 99 
15.3 – Exercício 
 
a) Implemente uma classe em Java com as funcionalidades de uma agenda telefônica, associando um nome a 
um número telefônico. A classe deve possuir a interface abaixo: 
 
 
b) Crie um programa em Java para testar a classe AgendaTelefonica desenvolvida no exercício anterior. Teste 
a classe com pelo menos 5 contatos diferentes na agenda de telefones. 
 
Pág. 
 
RESPOSTAS DO EXERCÍCIOS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 100 
RESPOSTAS DO EXERCÍCIOS 
 
 As respostas dos exercícios descritos neste material são apresentadas pelo professor em sala de 
aula. 
Pág. 
 
REFERÊNCIAS 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 101 
REFERÊNCIAS 
 
 Liang, Daniel, Eclipse Tutorial: a Supplement J, 2005. 
 Eclipse, In: Eclipse Foundation: Disponível em: http://www.eclipse.org. 
 Eclipse(IDE), In: Wikipédia: a enciclopédia livre. 
 Erickson, Marc (IBM), What is Eclipse, and how do I use it? 
 Paul Deitel Harvey Deitel. Java Como Programar. oitava edição. ISBN-10: 8576055635. Pearson, 2010. 
 Bertrand Meyer. Object-Oriented Software Construction. segunda edição. ISBN-10: 0136291554. Prentice 
Hall, 1997. 
 Heller, Philip. Guia Completo de Estudos para Certificação em Java. 
 Silveira, Paulo. Um pouco sobre o pacote java.util. 
 Rogers Cadenhead & Laura Lemay. Aprenda em 21 dias java. 
 Cornell, Gary. Core Java. 
 Documentação oficial – Java/Oracle. 
 Outros sites especializados em Java.76 
12.5 Hierarquia de exceções Java ........................................................................................................................... 77 
13 THREADS .................................................................................................................................................... 79 
13.1 Conceito de Threads ........................................................................................................................................ 79 
13.2 Ciclo de Vida de uma Thread .......................................................................................................................... 80 
13.2.1 Criando Threads ........................................................................................................................................... 80 
13.2.2 Iniciando Threads ......................................................................................................................................... 81 
13.2.3 Fazendo Thread Esperar .............................................................................................................................. 81 
13.2.4 Finalizando Threads ..................................................................................................................................... 81 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 5 
13.2.5 Verificando se Threads estão Executando/Pronta/Esperando ou Novas/Mortas .......................................... 81 
13.3 Implementando Threads em java..................................................................................................................... 81 
13.4 Escalonamento de Threads ............................................................................................................................. 83 
13.5 Exercícios ........................................................................................................................................................ 86 
14 API JAVA - JAVA.IO ......................................................................................................................................... 87 
14.1 Classe InputStream ......................................................................................................................................... 87 
14.2 Lendo um arquivo ............................................................................................................................................ 88 
14.3 OutputStream................................................................................................................................................... 90 
14.4 Reader ............................................................................................................................................................. 90 
14.5 Writer ............................................................................................................................................................... 90 
14.6 Buffers ............................................................................................................................................................. 91 
14.7 Exercícios ........................................................................................................................................................ 92 
15 COLLECTIONS FRAMEWORK ......................................................................................................................... 93 
15.1 – Introdução ..................................................................................................................................................... 93 
15.2 – Tipos de Coleções ........................................................................................................................................ 93 
15.2.1 – Lista ........................................................................................................................................................... 96 
15.2.2 – Conjunto .................................................................................................................................................... 97 
15.2.3 – Mapas ........................................................................................................................................................ 97 
15.3 – Exercício ....................................................................................................................................................... 99 
RESPOSTAS DO EXERCÍCIOS ............................................................................................................................100 
REFERÊNCIAS ......................................................................................................................................................101 
 
 
 
 
 
 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 6 
1 INTRODUÇÃO 
 
1.1 Sobre a LogusTI 
A LogusTI nasceu da necessidade de oferecer novos treinamentos na área de Tecnologia 
da Informação em Brasília, visto que este segmento é escasso na Capital Federal. 
A excelência dos serviços prestados pela LogusTI está apoiada em profissionais 
especializados, processos estabelecidos e uma larga experiência em seus profissionais. O 
capital humano é um elemento chave na estratégia de atuação da empresa, que investe 
continuamente na atualização e capacitação de seus profissionais, propiciando um ambiente 
encorajador para serem os melhores naquilo que fazem. 
A alta qualidade dos serviços prestados aliada ao compromisso em gerar resultados e 
proporcionar maior vantagem competitiva a seus clientes tem propiciado a LogusTI 
relacionamentos duradouros e bem sucedidos com empresas de diversos segmentos de 
mercado. 
O principal objetivo da LogusTI é promover treinamentos de máxima qualidade que 
relacionados às principais tecnologias utilizadas pelas empresas. Por meio desses 
treinamentos, seus alunos se tornam capacitados para atuar no mercado de trabalho. 
 
1.2 Objetivo 
O objetivo fundamental dos treinamentos da LogusTI é transmitir os conhecimentos necessários 
para que os seus alunos possam atuar no mercado de trabalho na área de Tecnologia da Informação. 
A plataforma Java é a mais utilizada no desenvolvimento de software no mundo. Para utilizar os 
recursos oferecidos por essa plataforma de forma eficiente, é necessário possuir conhecimento sólido 
em orientação a objetos. 
Assim sendo, esta apostila da LogusTI tem como intuito ensinar Java de uma maneira simples e 
objetiva. 
Esperamos que você aproveite esse material, e que ele possa contribuir positivamente para 
construção do conhecimento acerca da programação Java. 
 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 7 
1.3 História da Linguagem Java 
 
 
Java é uma linguagem de programação interpretada orientada a objetos 
desenvolvida na década de 90 por uma equipe de programadores chefiada 
por James Gosling, na empresa Sun Microsystems, adquirida pela Oracle. 
Diferente das linguagens de programação convencionais, que são 
compiladas para código nativo, a linguagem Java é compilada para um 
bytecode que é executado por uma máquina virtual. A linguagem de 
programação Java é a linguagem convencional da Plataforma Java, mas 
não é a sua única linguagem. 
Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço do Java, uma linguagem de 
programação orientada a objetos. Os mentores do projeto eram Patrick Naughton, Mike Sheridan, e James 
Gosling. Eles acreditavam que, eventualmente, haveria uma convergência dos computadores com os 
equipamentos e eletrodomésticos frequentemente usados pelas pessoas no seu dia-a-dia. 
Para provar a viabilidade desta ideia, 13 pessoas trabalharamarduamente durante 18 meses. No verão de 
1992 eles emergiram de um escritório de Sand Hill Road, no Menlo Park, com uma demonstração funcional da 
ideia inicial. O protótipo se chamava *7 (lê-se “Star Seven”), um controle remoto com uma interface gráfica 
touchscreen. Para o *7, foi criado um mascote, hoje amplamente conhecido no mundo Java, o Duke. O trabalho 
do Duke no *7 era ser um guia virtual ajudando e ensinando o usuário a utilizar o equipamento. O *7 tinha a 
habilidade de controlar diversos dispositivos e aplicações. James Gosling especificou uma nova linguagem de 
programação para o *7. Gosling decidiu batizá-la de “Oak”, que quer dizer carvalho, uma árvore que ele podia 
observar quando olhava através da sua janela. 
O nome da linguagem desenvolvida pelo projeto Green foi mudada de Oak para Java, que foi uma 
homenagem à uma ilha da Indonésia de onde os Norte-Americanos importavam o café que era consumido pela 
equipe de James Gosling. Ate 1994, não havia uma aplicação definida para o Java. Foi quando Jonathan Payne e 
Patrick Naughton criaram um novo navegador para Web que podia executar programas escritos em Java 
(applets), batizado de Web Runner. E em 1996, em uma iniciativa inédita, a Sun Microsystems resolveu 
disponibilizar gratuitamente um kit de desenvolvimento de software para a comunidade, que ficou conhecido como 
Java Developer`s Kit (JDK). Desde então a aceitação da tecnologia Java cresceu rapidamente entre empresas e 
desenvolvedores. A Sun Microsystems lançou o JDK 1.1 com melhorias significativas para o desenvolvimento de 
aplicações gráficas e distribuídas. Depois disso, a empresa continuou lançando novas versões gratuitas com 
novas melhorias e recursos. 
Em abril de 2009, a Oracle ofereceu US$ 7,4 bilhões pela aquisição da Sun Microsystems e a proposta foi 
aceita. Essa aquisição deu à Oracle a propriedade de vários produtos, incluindo o Java e o sistema operacional 
Solaris. Em comunicado, a Oracle afirmou que o Java foi o software mais importante adquirido ao longo de sua 
história. Muitas especulações foram feitas acerca do futuro do Java depois de passar a ser propriedade da Oracle. 
Mais com certeza essa aquisição contribuiu muito para que o Java tivesse um salto qualitativo. 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 8 
2 A LINGUAGEM JAVA 
2.1 Java 
Java é uma linguagem de programação orientada a objetos desenvolvida pela antiga Sun Microsystems, 
agora Oracle. Modelada depois de C++, a linguagem Java foi projetada para ser pequena, simples e portável a 
todas as plataformas e sistemas operacionais, tanto o código fonte como os binários. Esta portabilidade é obtida 
pelo fato da linguagem ser interpretada, ou seja, o compilador gera um código independente de máquina chamado 
byte-code. No momento da execução este byte-code é interpretado por uma máquina virtual instalado na máquina. 
Para portar Java para uma arquitetura hadware/s específica, basta instalar a máquina virtual 
(interpretador). Além de ser integrada à Internet, Java também é uma excelente linguagem para desenvolvimento 
de aplicações em geral. Dá suporte ao desenvolvimento de software em larga escala. 
2.2 Máquina Virtual 
De acordo com a especificação da SUN, a máquina virtual do Java pode ser vista como: 
 
 
 
 
Para um programa Java ser executado, ele precisa passar pelo processo ilustrado na figura abaixo: 
 
 
 
 
 
 
 
 
 
 
Figura 1- JVM 
 
O código é compilado, gerando um conjunto de instruções chamado de byte-code. Esse byte-code é 
aplicado à Máquina Virtual Java (JVM) que se encarrega de interpretar os comandos para o sistema 
operacional onde o programa está rodando. Ou seja, a máquina virtual traduz as instruções do código Java para 
instruções válidas no sistema operacional em que está rodando. Se essa portabilidade fosse requerida em C, o 
código deveria ser compilado várias vezes – uma para cada sistema operacional desejado. No caso do Java, o 
código é compilado apenas uma vez, gerando o byte-code. Esse byte-code poderá então ser interpretado por 
qualquer máquina virtual Java, rodando em Linux, Windows, Palm OS, Solaris ou qualquer outro sistema 
operacional que possua uma máquina virtual Java implementada. (Compile once, run anywhere). 
Uma máquina imaginária que é implementada via software ou hardware. Um código a ser 
executado por essa máquina deve ser gravado em um arquivo com extensão .class. e 
possuir um código compatível com as instruções Java. 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 9 
 
Uma JVM possui definições concretas para a implementação dos seguintes itens: 
 Conjunto de instruções (equivalentes às instruções da CPU) 
 Conjunto de registradores 
 Formato padrão de classes 
 Pilha de memória 
 Pilha de objetos coletados pelo garbage-collector 
 Área de memória 
 
IMPORTANTE: a JVM não permite que um programa Java acesse recursos de hardware diretamente, protegendo 
o computador de operações perigosas, como acesso à regiões protegidas da memória ou formatação física do 
disco rígido. 
 
Um programa Java só é executado caso o seu byte-code passe pela verificação de segurança da JVM, que 
consiste em dizer que: 
 O programa foi escrito utilizando-se a sintaxe e semântica da linguagem Java 
 Não existem violações de áreas restritas de memória no código 
 O código não gera Stack Overflow 
 Os tipos de parâmetros dos métodos são corretos 
 Não existe nenhuma conversão ilegal entre dados do programa, como a tentativa de conversão de inteiros 
em ponteiros 
 O acesso a objetos está corretamente declarado 
Caso alguma das condições acima não seja satisfeita, a máquina virtual Java causará um erro de execução 
(runtime error). 
 
 
 
 
 
2.3 Garbage Collection 
Durante a execução de um programa de computador, ocorre a alocação e liberação dinâmica de memória 
RAM. Dados são escritos e lidos da memória do computador satisfazendo os requisitos de cada programa. Em 
linguagens tradicionais como Pascal, Basic e C/C++, o programador é responsável por controlar essa alocação, 
impedindo o estouro de memória (stack overflow) e outros problemas, como o acesso indevido a áreas reservadas 
de memória. Para facilitar a vida dos programadores, e evitar os erros comuns associados à alocação de 
memória, a linguagem Java introduziu um novo conceito: o garbage-collection. 
Garbage-collection é um mecanismo de controle automático de alocação e liberação de memória. 
Quando uma variável é declarada em um código de computador, a JVM cria um ponteiro para uma área 
de memória equivalente ao tamanho do tipo de dado utilizado por essa variável. Quando essa variável é 
associada a outra região de memória, a JVM coloca o espaço alocado anteriormente em uma pilha de objetos em 
Mais sobre 
Geralmente, as máquinas virtuais utilizam uma estratégia de compilação chamada Just-in-time 
compilation (JIT). Nessa abordagem, o código de máquina pode ser gerado diversas vezes durante o 
processamento de um programa com o intuito de melhorar a utilização dos recursos disponíveis em um 
determinado instante da execução. 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
10 
desuso. Caso o computador fique com pouca memória disponível, a JVM remove objetos dessa pilha, permitindo 
que esse espaço de memória seja realocado. 
O processo de garbage-collection ocorre automaticamente durante a execução de um programa Java. O 
programador não precisa se preocupar com aritmética de ponteiros (grande dificuldade em linguagens como C e 
Pascal). 
2.4 Instalando o Java 
Para desenvolver aplicações Java, o programador deve instalar em sua máquina um Java Development 
Kit(JDK). Um JDK contém diversas ferramentas utilizadas na criação de um programa Java. Mostraremosa 
seguir como instalar um JDK no sistema operacional Windows. 
 JDK: Faça o download da versão mais atual aqui: 
 http://www.oracle.com/technetwork/java/javase/downloads/index.html 
 
Observe abaixo que a Oracle disponibiliza a versão do JDK para vários sistemas operacionais. Vamos 
utilizar a versão jdk-8u101-windows-x64.exe para o Windows x64 de 193.68 MB. 
 
 
Figura 2 – Site da Oracle para download do JDK 
 
O procedimento de instalação no Windows é muito simples: basta você executar o arquivo e seguir os 
passos abaixo: 
2.4.1 Instalando o JDK 
 
Execute o instalador do JDK (jdk-8u101-windows-x64.exe) e siga as instruções até concluir (next > next > 
finish ), se desejar, é possível informar o diretório de instalação (que vai ser muito importante para 
realizarmos a configuração do JDK – Figura 3). 
http://www.oracle.com/technetwork/java/javase/downloads/index.html
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
11 
 
Figura 3 – Tela de Instalação do JDK 
 
Juntamente com o JDK será feita a instalação do JRE (Java Runtime Environment) que é o aplicativo que 
permite executar os programas em JAVA no seu sistema operacional. 
 
2.4.2 Configurando o Java no Windows 
 
Clique com o botão direito em Computador e siga as opções Propriedades > Configurações 
avançadas do sistema > (aba Avançado) Variáveis de Ambiente… 
 
Crie/edite as variáveis do sistema listadas abaixo: 
 
JAVA_HOME 
 Informe o diretório da instalação do JDK (Figura 4). 
 Exemplo C:\Program Files\Java\jdk1.8.0_101 
http://404846152.r.upxcdn.net/br/wp-content/uploads/2015/05/Figura1.png
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
12 
 
Figura 4 – Configuração da variável de ambiente “JAVA_HOME”. 
 
PATH 
 Informe %JAVA_HOME%\bin (Figura 5). 
 
Figura 5– Configuração da variável de ambiente “PATH”. 
 
 
 
 
http://404846152.r.upxcdn.net/br/wp-content/uploads/2015/05/Figura2.png
http://404846152.r.upxcdn.net/br/wp-content/uploads/2015/05/Figura3.png
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
13 
2.4.3 Confirmando a instalação e configuração do Java 
 
Para confirmar que a instalação e configuração do JAVA foi realizada com sucesso, execute os comandos 
“java -version” e “javac -version” no prompt de comando. O resultado esperado está na Figura 6. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Figura 6 – Validação de instalação e configuração do Java 
 
 
 
 
 
 
2.5 Compilando e executando o primeiro programa 
Vamos criar um simples programa para entendermos como funciona o processo de compilação e 
execução. Utilizaremos a linguagem Java, que é amplamente adotada nas empresas. Observe o código do 
exemplo de um programa escrito em Java que imprime uma mensagem na tela: 
1 public class OlaMundo { 
2 public static void main ( String [] args ) { 
3 System.out.println("Olá Mundo!"); 
4 } 
5 } 
Código Java 2.4: OlaMundo.java 
O código fonte Java deve ser colocado em arquivos com a extensão .java. Agora, não é necessário 
entender todo o código do exemplo. Basta saber que toda aplicação Java precisa ter um método especial 
chamado main para executar. 
O próximo passo é compilar o código fonte, para gerar um executável que possa ser processado pela 
máquina virtual do Java. O compilador padrão da plataforma Java (javac) pode ser utilizado para compilar esse 
arquivo. O compilador pode ser executado pelo terminal. 
Mais sobre 
No Linux, são as mesmas variáveis, mas o PATH é separado por :. Nos Windows velhos, como o 98, você 
deve alterar isso no autoexec.bat. Nos Windows mais novos, como NT, 2000, e XP, procure onde você pode 
adicionar novas variáveis de ambiente (em Iniciar - Painel de Controle – Sistema – Avançado Variáveis de 
Sistema). No Linux, geralmente a alteração deverá ser feita no arquivo ~/.bashrc se você não tiver privilégios 
de administrador. 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
14 
C:\LOGUSTI\EXEMPLOS> dir 
OlaMundo.java 
C:\LOGUSTI\EXEMPLOS>javac OlaMundo.java 
C:\LOGUSTI\EXEMPLOS> dir 
OlaMundo.class 
OlaMundo.java 
O código gerado pelo compilador Java é armazenado em arquivos com a extensão .class. No exemplo, o 
programa gerado pelo compilador é colocado em um arquivo chamado OlaMundo.class e ele pode ser executado 
através de um terminal. 
C:\LOGUSTI\EXEMPLOS> dir 
OlaMundo.class 
OlaMundo.java 
C:\LOGUSTI\EXEMPLOS> java OlaMundo 
Olá Mundo! 
Importante 
Antes de compilar e executar um programa escrito em Java, é necessário que você tenha instalado e 
configurado em seu computador o JDK (Java Development Kit). 
 
 
2.5 – Exercícios 
 
 
 
 
 
 
Mais sobre 
Quando uma aplicação ou biblioteca Java é composta por diversos arquivos .class, podemos “empacotá-los” em um 
único arquivo com a extensão .jar com o intuito de facilitar a distribuição da aplicação ou da biblioteca. 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
15 
3 AMBIENTE INTEGRADO DE DESENVOLVIMENTO - 
ECLIPSE 
3.1 O Eclipse 
Na prática, alguma ferramenta de desenvolvimento é adotada para aumentar a produtividade. Essas 
ferramentas são chamadas IDE (Integrated Development Environment - Ambiente de Desenvolvimento Integrado). 
Uma IDE é uma ferramenta que provê facilidades para o desenvolvedor realizar as principais tarefas relacionadas 
ao desenvolvimento de um software. 
No caso específico da plataforma Java, a IDE mais utilizada é o Eclipse. Essa ferramenta é bem 
abrangente e oferece recursos sofisticados para o desenvolvimento de uma aplicação Java. Além disso, ela é 
gratuita. 
É a IDE líder de mercado. Formada por um consórcio liderado pela IBM, possui seu código livre. 
As diversas distribuições do Eclipse podem ser obtidas através do site http://www.eclipse. org/. 
Descompacte o arquivo e pronto; basta rodar o executável. 
3.2 Característica e Ferramentas 
A IDE Eclipse é um programa que reúne ferramentas de apoio ao desenvolvimento de software 
possibilitando uma agilidade maior no processo de construção de um software. 
 
 Editor – edita o código-fonte do programa escrito 
 Compiler – compila o código-fonte transformando em código de máquina. 
 Linker – são os vários pedaços de códigos reunidos transformando em um executável. 
 Debugger – processo de se localizar erros(famosos bugs) . 
 Modelling - criação do modelo de classes, objetos, interfaces, associações e interações 
dos artefatos envolvidos no software. 
 Geração de código - A IDE gera códigos(templates) comumente utilizados 
possibilitando algumas soluções. 
 Deploy - auxilia no processo de criação do instalador do software. (no nosso caso os famosos 
*.jar). 
 Automated tests - realiza testes no software de forma automatizada, 
 Refactoring - consiste na melhoria constante do código-fonte do software para construção 
de código mais otimizado. 
 
IMPORTANTE 
Preciso pagar pela ferramenta Eclipse? 
Não, é uma ferramenta OPEN SOURCE conforme mencionado acima é um software livre. 
 
Porque o Eclipse faz tanto sucesso? 
“Na prática ele cria um modelo de Open Innovation Network, onde empresas concorrentes podem criar redes de 
inovação, cooperando no desenvolvimento de softwares Open Source...” - Cezar Taurion(IBM) 
http://www.eclipse.org/
http://www.eclipse.org/
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
16 
 
 
3.3 Instalando o Eclipse 
O Eclipse roda direto de um arquivo executável. Realize o download por meio do link 
http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/neonr e extraia o 
pacote “.zip” do Eclipse (eclipse-java-neon-R-win32-x86_64.zip)para o diretório de sua preferência. Execute o 
arquivo eclipse.exe para iniciar. 
Ao iniciar o eclipse, você deve definir o workspace de trabalho (que é a pasta onde será mantido seu 
espaço de trabalho – Figura 7). 
 
Figura 7 – Configuração do workspace do Eclipse. 
 
Figura 8 – Tela inicial do Eclipse. 
3.4 Conhecendo o Eclipse 
O eclipse possui uma interface amigável com as ferramentas agrupadas por perspectivas(Views e 
Perspective). Iremos utilizar a perspectiva Java que apresenta os seguintes recursos: 
 
 1 - Package Explorer - janela contendo todos os projetos desenvolvidos, cada projeto representa um 
programa ou aplicação; 
 2 - Problems - janela que indica erros contidos no código ordenados pela linha em que acontece; 
 3 - Console - janela responsável pela saída de padrão para mensagens proveniente qualquer 
http://www.eclipse.org/downloads/packages/eclipse-ide-java-developers/neonr
http://404846152.r.upxcdn.net/br/wp-content/uploads/2015/05/Figura6.png
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO PÁGINA 
17 
programa Java; 
 4 - Janela com código - janela onde aparecerá o código fonte do arquivo .java selecionado no 
momento.Tal janela aparece automaticamente ou dando 2 cliques em algum arquivo .java presente na 
janela Package Explorer. 
 
 
 
 
 
 
 
 
 
 
 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO 
PÁGINA 18 
4 SINTAXE DA LINGUAGEM JAVA 
4.1 Delimitadores em Java 
Em um código-fonte Java, alguns símbolos são utilizados pelo compilador para diferenciar comandos, 
blocos de comandos, métodos, classes, etc. Tais símbolos, chamados de delimitadores, são 
enumerados abaixo: 
 
Comentários 
Comentários servem para identificar a função de um comando, um trecho de código, ou um 
método. Além disso, os comentários podem ser utilizados para documentar aspectos de desenvolvimento 
de um programa: como o nome da empresa que o desenvolveu, nome dos programadores, versão, etc. 
Existem dois tipos de comentário: o simples e o de documentação. 
O comentário simples é delimitado por duas barras // e termina ao final de uma linha, conforme 
abaixo. 
 
 // comentário simples: não será incluído na documentação 
 // do programa (note que comentários simples exigem 
 // um par de barras para cada linha). 
 
 
O comentário de bloco é delimitado por duas barras /* e termina com */ ao final de uma linha. 
 /* Comentário de bloco 
 utilizado para comentar 
 várias linhas de código */ 
 
O comentário de documentação é iniciado pelo símbolo /** e encerrado pelo símbolo */, podendo 
conter várias linhas de texto e linhas em branco. Esse tipo de comentário será utilizado pela ferramenta 
geradora de documentação javadoc, que acompanha o ambiente de desenvolvimento SDK. 
Todo o texto entre os delimitadores de comentários do Javadoc é ignorado pelo compilador. 
Permitem incorporar a documentação do programa diretamente nos programas. O programa utilitário 
javadoc lê comentários no estilo Javadoc e utiliza-os para preparar a documentação do seu programa no 
formato HTML. 
Ponto e vírgula, blocos e espaços em branco: em Java, todo comando é terminado por um 
ponto e vírgula (;). 
Exemplo: 
 System.out.println ("note o ponto e vírgula no final  "); 
 
 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO 
PÁGINA 19 
Um bloco é formado por um conjunto de instruções delimitadas por chaves, como no exemplo abaixo: 
 /** Exemplo de bloco */ 
 { // Chamamos essa chave de início de bloco 
 int ano; // Note o ponto e vírgula 
 ano = 2002; // sempre ao final de um comando Java 
 } // Chamamos essa chave de final de bloco 
 
O espaço em branco, quebra de linha e caracteres de tabulação são permitidos em qualquer trecho do 
código-fonte, devendo ser utilizados para realçar o aspecto visual de seu código. 
 
IMPORTANTE 
Apesar do aspecto visual do código-fonte não ter nenhum impacto no desempenho de um programa 
Java, o uso de endentação é uma característica de bons códigos-fonte. Lembre-se que você não será o 
único a ler o código-fonte de seus programas, portanto escreva-o da maneira mais organizada e legível 
possível. 
 
 
 
 
4.2 Identificadores e palavras reservadas 
Em Java, um identificador é uma sequência de símbolos UNICODE (64K símbolos) que começa 
com uma letra, um símbolo subscrito _, ou o caractere $. Os demais símbolos de um identificador podem 
conter também números. Identificadores são case-sensitive e não tem um tamanho máximo estabelecido. 
Apesar da tabela UNICODE ser bastante extensa, um bom hábito de programação é utilizar somente 
letras do alfabeto (a-Z) e números para nomear identificadores. 
Exemplo de identificadores válidos em Java: 
 data
 _data
 $data
 data_do_mês
 data1
 uma_variável_pode_SER_bastante_extensa_e_conter_Numeros234876238476
 data_public_class_NoteQueEsseIdentificadorContemPalavrasReservadas
 
Apesar desta "liberdade" de opções para nomes de identificadores, algumas palavras não são 
permitidas. Tais palavras são ditas palavras reservadas, e representam o conjunto de comandos que 
forma a sintaxe da linguagem Java. O conjunto de palavras reservadas em Java é o seguinte: 
 
 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO 
PÁGINA 20 
abstract double int strictfp 
boolean else interface super 
break extends long switch 
byte final native synchronized 
case finally new this 
catch float package throw 
char for private throws 
class goto protected transient 
const if public try 
continue implements return void 
default import short volatile 
do instanceof static while 
 
IMPORTANTE 
Você não precisa se preocupar em memorizar o nome das palavras reservadas em Java. À medida que 
você for praticando a programação em Java, isso se tornará natural. Além disso, o compilador acusa um 
erro de nomenclatura quando você tenta utilizar uma palavra reservada para nomear uma variável, um 
método ou uma classe. 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO 
PÁGINA 21 
4.3 Declarando variáveis em Java 
Uma variável é sempre declarada seguindo do seguinte esquema: 
 + + identificador + ; 
ou 
 + + identificador + = + valor + ; 
onde: 
 é um tipo primitivo de dados ou o nome de uma classe ou interface 
identificador é o nome da variável 
valor é o valor atribuído à variável. 
Exemplos: 
 int number1 = 10; // primeiro número a somar 
 int number2 = 20; // segundo número a somar 
 int sum; // soma de number1 e number2 
 
IMPORTANTE 
Caso você declare uma variável e não atribua nenhum valor, ela não poderá ser utilizada em um código 
Java – a tentativa de utilizar uma variável não inicializada em Java gerará um erro de compilação. 
 
IMPORTANTE 
Veremos mais adiante que Java possui um mecanismo de inicialização de variáveis de seus tipos 
primitivos, mas o aluno deve evitar considerar essa inicialização como prática de programação. De fato, 
esta inicialização automática não funciona para variáveis de tipos agregados ou abstratos de dados e 
também que o escopo das variáveis – de classe ou de instância - tem influência na sua inicialização. O 
aluno é fortemente recomendado a pensar em variáveis como espaços alocados na memória RAM, 
inicialmente podendo conter qualquer valor (conhecido como lixo na memória). 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO 
PÁGINA 22 
4.4 Tipos primitivos da linguagem Java 
A linguagem Java utiliza oito tipos primitivos de dados e um tipo especial. Esses tipos primitivos 
podem ser utilizados para declarar constantes ou variáveis utilizadas em programasJava. Os tipos 
primitivos estão divididos em quatro categorias: lógicos, textuais, numéricos inteiros e numéricos de ponto 
flutuante. 
 
Tipos lógicos: boolean 
Valores lógicos possuem dois estados, normalmente ditos verdadeiro/falso, sim/não e ligado/ 
desligado. Em Java um tipo lógico é definido pela palavra boolean, e pode assumir dois valores: true ou 
false. 
// Exemplo de variável que suporta valores booleanos 
 boolean anoBissexto = false; 
 boolean anoPar = true; 
 
// Apesar de uma variável poder ser declarada 
// sem receber um valor, ela só poderá ser usada 
// após a atribuição de algum valor a ela. 
 boolean valido; 
 
Tipos textuais: char e String 
 
Caracteres simples são representados pelo tipo char. Um char representa um caracter UNICODE, ou 
seja, um número inteiro sem sinal de 16 bits, no intervalo de 0 até 2
16
-1. O valor de um literal char deve 
ser delimitado por aspas simples: 
 
// Exemplo de representação de caracteres UNICODE 
 char primeiraLetra = 'a'; 
 char tabulacao = '\t'; 
 
// Código UNICODE para o caractere de interrogação 
 char unicode = '\u0A02'; 
 
// Lembre-se: Uma variável só poderá 
// ser manipulada após receber um valor. 
 
 char inutil; // variável sem utilidade neste momento 
 inutil = '@'; // variável útil a partir de agora 
 
Palavras são representadas por uma sequência de dados do tipo char, agrupadas em um tipo 
“especial” de dados: a classe String. Apesar de ser uma classe, uma variável do tipo String suporta 
operações como se fosse um tipo primitivo de dados. O valor de uma variável String deve ser delimitado 
por aspas duplas "valor". 
 
 
 
JAVA OO UDF – LINGUAGEM DE PROGRAMAÇÃO JAVA OO 
PÁGINA 23 
 // Exemplo de uso de variáveis do tipo String 
 String curso = "Java Básico OO - LogusTI"; 
 
 // Uma variável pode receber o valor de outra 
 String outraVariavel = curso; 
 
 // A concatenação de Strings pode ser feita através do operador de soma (+) 
 curso = "Java Básico OO " + " Java Web" ; 
 
 // Concatenação de String com outro tipo de dados: 
 curso = "Java Básico OO" + 'I'; 
 curso = "Java Básico OO" + 1; 
 
 // Para comparar duas variáveis do tipo String devemos usar o método 
equals(): 
 // curso == "Java Básico OO..." INCORRETO 
 // curso.equals("Java Básico OO...") CORRETO 
 
A concatenação de qualquer tipo de dado com um dado do tipo String resulta em um novo dado do tipo 
String. 
 
Tipos numéricos inteiros: byte, short, int e long 
Existem quatro tipos primitivos de números em Java. Além disso, os valores numéricos podem 
ser representados de forma decimal, octal ou hexadecimal: 
Valores numéricos inteiros em Java: 
2 decimal 
077 um número que começa com zero está representado de forma octal 
0xBABE representação hexadecimal 
 
Todos os valores numéricos em Java tem sinal positivo ou negativo. 
Um valor numérico é sempre considerado do tipo int, a menos que seja acompanhado do sufixo 
L, que representa um valor do tipo long. A diferença de um inteiro para um longo é a capacidade de 
dígitos que podem ser representados, conforme aparece no quadro abaixo. 
Valores numéricos em Java, representados como long: 
2L decimal 
077L um número que começa com zero está representado de forma octal 
0xBABEL representação hexadecimal 
 // Valores inteiros representáveis pelos tipos numéricos em Java: 
 byte a = 127; // -27 ... 27 -1 
 short b = 32767; // -215 ... 215 -1 
 int c = 2147483647; // -231 ... 231 -1 
 long d = 9223372036854775807L; // -263 ... 263 –1 
JAVA OO LOGUSTI – TREINAMENTO EM INFORMÁTICA PÁGINA 24 
Tipos numéricos de ponto flutuante: float e double 
Um valor fracionário pode ser representado em Java através dos tipos float e double. A diferença 
entre esses dois tipos é o tamanho de bits: 
float 32 bits 
double 64 bits 
 
Para um número ser considerado do tipo ponto flutuante, é necessário a inclusão de um ponto, 
do caractere E (de expoente) ou do sufixo D ou F, conforme mostra o quadro abaixo: 
 // Representação de valores numéricos de ponto flutuante 
 float pi = 3.141516F; 
 float taxa = 15.02E23f; 
 double salario = 22521.20D; 
 
 // Quando não é definido o sufixo para um número decimal, o compilador entende 
que o tipo é double 
 double valor= 122.4E+306; 
 double valorX= 99.22; 
 
IMPORTANTE 
Todo o valor numérico de ponto flutuante é considerado do tipo double, a menos que o programador o 
declare explicitamente como float. 
4.5 - Convenções de codificação 
Em geral, as linguagens de programação possuem convenções para definir os nomes das 
variáveis. Essas convenções ajudam o desenvolvimento de um código mais legível. 
 Classes – as classes devem ser designadas por nomes, começando por uma letra maiúscula e 
depois minúsculas. Cada nova palavra que formar o nome da classe deve ser capitalizada. 
 Ex: class Calculadora, class PessoaFisica e class CalculadoraCientifica 
 
 Intefaces – igual às classes. 
Ex: interface Calculo e interface EquacaoLogaritmica. 
 
 Métodos – métodos devem nomeados por verbos, seguindo o mesmo formato de capitalização 
das classes. Entretanto, um método sempre deve começar com letra minúscula. 
Ex: public void calcular(int numero), public void extrairRaiz(int numero), ... 
 
 Constantes – constantes devem ter todas as suas letras em maiúsculo, com o símbolo de 
subscrito para separa as palavras. 
Ex: final int ANO = 2002, final boolean VERDADE = true, ... 
 
 Variáveis – tal qual os métodos, as variáveis devem começar com uma letra minúscula e depois 
alternar a cada palavra. Procure usar nomes significativos para variáveis. Evite declarar variáveis 
usando apenas um a letra. 
 
 
 
JAVA OO LOGUSTI – TREINAMENTO EM INFORMÁTICA PÁGINA 25 
Mais Sobre 
Em geral, as linguagens de programação possuem convenções para definir os nomes das variáveis. 
Essas convenções ajudam o desenvolvimento de um código mais legível. 
Na convenção de nomes da linguagem Java, os nomes das variáveis devem seguir o padrão camel case 
com a primeira letra minúscula (lower camel case). Veja alguns exemplos: 
 nomeDoCliente 
 numeroDeAprovados 
A convenção de nomes da linguagem Java pode ser consultada na seguinte url: http://www. 
oracle.com/technetwork/java/codeconv-138413.html 
 
4.6 Exercícios 
 
a) Altere o programa AloMundo.Java para que ele imprima na tela todos os tipos primitivos de dados 
suportados pela linguagem Java. 
 
b) Altere o programa AloMundo para que ele imprima os parâmetros recebidos pela linha de comando de 
execução do programa. (Dica: são os valores do array args: args[0], args[1], etc.) 
 
c) Crie um programa que receba três argumentos da linha de comando e imprima-os na mesma linha, em 
ordem inversa. 
 
Exemplo: 
java Programa a1 a2 a3 
Saída: a3 a2 a1 
 
JAVA OO LOGUSTI – TREINAMENTO EM INFORMÁTICA PÁGINA 26 
5 EXPRESSÕES 
 
Esta seção apresenta a manipulação de variáveis e implementação de tomada de decisões em 
programas Java. 
5.1 Operadores lógicos e aritméticos 
Os operadores Java são similares em estilo e função aos operadores da linguagem C/C++. A 
tabela abaixo enumera esses operadores. 
 
Delimitadores . [] () ; , Servem para delimitar partes 
distintas de um comando, 
método ou classe. 
 
Operador Função 
++ Incrementa o valor da variável em uma unidade. 
Exemplo: i++; contador++; 
-- Incrementa o valor da variável em uma unidade. 
Exemplo: i++; contador++; 
+ - Operadores aritméticos 
* / % Multiplicação, divisão, resto 
> 
>>> 
Operadores de deslocamento aritmético e lógico 
== != Igualdade e desigualdade 
^ Potência 
&& AND 
|| OR 
?: Operador condicional. 
Exemplo: i=0; (i>2?i=0:i --); 
= *= %= 
+= -= 
>= 
>>>= &= 
^= |= 
 
Operadores aplicados sobre a atribuição. 
instanceof 
Identificador de classes 
 
 
 
 
JAVA OO LOGUSTI – TREINAMENTO EM INFORMÁTICA PÁGINA 27 
5.2 Concatenação de Strings com o operador + 
 
Quando o operador + é aplicado a dados do tipo String, ele cria um novo dado do tipo String, 
concatenando os dois operandos. 
 /** 
 * Concatenação de Strings 
 */ 
 String sigla = "JOO"; 
 String nome = "Java Orientado a Objetos"; 
 String titulo = sigla + " - " + nome; 
 
 // Esse comando imprimirá na tela a frase: 
 // JOO – Java Orientado a Objetos 
 
 System.out.println(titulo); 
 int i = 10; 
 
 String legenda = "valor = "; 
 
 // campo é uma variável do tipo String 
 String campo = legenda + i; 
 
Alguns métodos úteis em dados do tipo String: 
 String curso = "Java Orientado a Objetos"; 
 System.out.println("curso: " + curso); 
 
 // Isolando um caractere: 
 System.out.print("primeiro caractere: "); 
 System.out.println(curso.charAt(0)); 
 System.out.print("segundo caractere: "); 
 System.out.println(curso.charAt(1)); 
 
 // O primeiro caractere de uma String tem o 
 // índice 0, o segundo o índice 1 e assim por diante 
 // letra = 's'; 
 
 char letra = curso.charAt(2); 
 
 // substrings: 
 System.out.print("primeiras cinco letras: "); 
 System.out.println(curso.substring(0, 5)); 
 System.out.print("letras a partir da quarta: "); 
 System.out.println(curso.substring(4)); 
 
 // número de caracteres em uma String: 
 System.out.print("tamanho da frase: "); 
 System.out.println(curso.length() + " letras"); 
 
 // usando os caracteres de tabulação e quebra 
 // de linha: 
 System.out.println("" 
 + curso.length() 
 + " letras" 
 + " \n" 
 + " Nova linha\ttabulação" ); 
JAVA OO LOGUSTI – TREINAMENTO EM INFORMÁTICA PÁGINA 28 
5.3 Promoção e Casting 
A linguagem Java não suporta atribuições arbitrárias entre variáveis de tipos diferentes. Por 
exemplo, você não pode inicializar uma variável inteira com um valor de ponto flutuante sem explicitar 
isso através de um processo que chamamos de casting. 
Quando atribuímos um valor a uma variável, e esse valor é incompatível com o tipo de dado 
definido para a variável, ocorrerá uma conversão. Em alguns casos, essa conversão será automática, em 
outros o programador deve indicar de que forma o valor será convertido ao tipo de dado da variável. 
Quando o processo de conversão for automático, dizemos que ocorreu uma promoção, ou seja, 
um valor com um tipo de dado foi promovido a outro tipo de dado. Veja no exemplo abaixo: 
// 
// Promoção entre valores de tipos de dados distintos 
// Apesar 6 ser um inteiro, o valor da variável grande 
// continua sendo do tipo long 
long grande = 6; 
// Uma variável do tipo inteiro não possui 
// espaço para armazenar um valor longo. 
// A instrução abaixo é ilegal, e causará um erro de compilação. 
int pequeno = 99L; 
float a = 12.121F; // correto 
float b = 12.121; // 12.121 é um double - incorreto 
Como visto acima, algumas conversões não podem ser realizadas de forma automática, pois o 
compilador não pode assumir que tipo de conversão ele deve realizar (o tamanho do tipo de dado a ser 
recebido por uma variável é maior que o tamanho pré-definido para o tipo dessa variável, logo o 
compilador não sabe como "ajustar" os bits excedentes). Nesse caso, o programador deve indicar ao 
compilador que tipo de conversão deverá ocorrer, digitando o tipo de dado que o valor deverá assumir 
entre parênteses: 
 // 
 // Casting entre valores de tipos de dados distintos 
 // 
 // Apesar 6 ser um inteiro, o valor da variável grande 
 // continua sendo do tipo long 
 long grande = 6; 
 int pequeno = (int)99L; // sem problemas 
 float a = 12.121F; 
 float b = (float)a; // sem problemas 
 
Abaixo estão relacionados todos os casts possíveis na linguagem Java, mostrando quando 
você quer converter de um valor para outro. A indicação Impl. quer dizer que aquele cast é implícito e 
automático, ou seja, você não precisa indicar o cast explicitamente. (lembrando que o tipo boolean não 
pode ser convertido para nenhum outro tipo). 
 
 
 
 
JAVA OO LOGUSTI – TREINAMENTO EM INFORMÁTICA PÁGINA 29 
 
 
 
 
 
 
 
 
 
5.4 Operadores de deslocamento (>>, >>) 
Java provê operadores para a manipulação dos bits em variáveis de tipo numérico: o 
deslocamento aritmético >> e o deslocamento lógico >>>. 
O operador de deslocamento aritmético >> executa um deslocamento de um bit para a direita de 
um número (na prática, o primeiro argumento desse operador é dividido por dois 'n' vezes – onde n é o 
segundo argumento do operador): 
8 >> 2 = 2 
128 >> 1 = 64 
256 >> 4 = 16 
* Notação em complemento de dois: o operador >> mantém o sinal do bit mais significativo durante o 
deslocamento. 
O operador de deslocamento lógico >>> executa um deslocamento no padrão dos bits ao invés do 
significado aritmético de um valor numérico. Esse operador sempre adiciona o valor 0 ao bit mais 
significativo: 
1010 ... >> 2 = 111010 ... 
 
1010 ... >>> 2 = 001010 ... 
* Os operadores de deslocamento reduzem seus operandos à direita módulo 32 para um valor do tipo int 
e módulo 64 para um tipo long. Dessa forma, para qualquer valor do tipo int: 
int x  x >>> 32 = x 
O operador de deslocamento lógico >>> só pode ser aplicado a valores inteiros, e não é efetivo em 
valores int e long. Se for aplicado a valor short ou byte, o valor será promovido a um int antes da 
aplicação do operador. Por isso, um deslocamento sem sinal acaba se tornando um deslocamento com 
sinal
5.5 Circuitos lógicos 
 Java possui três operadores básicos para implementar circuitos lógicos: 
NOT: operador ! 
Pág. 
 
5 EXPRESSÕES 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 30 
AND: operador && 
OR: operador || 
 
 Esses operadores permitem a representação de expressões booleanas, que formam o argumento 
para comandos de decisão (IF), seguindo a seguinte tabela: 
 
 AND: OR: 
true && true = true; true || true = true; 
true && false = false; true || false = true; 
false && true = false; false || true = true; 
false && false = false; false || false = false; 
!true = false; 
!false = true; 
!(a && b) = !a || !b 
!(a || b) = !a && !b 
5.6 Exercícios 
a) Implemente um programa para calcular a área de um trapézio, onde: 
 
h = altura 
b = base menor 
B = base maior 
Área = (h . (b + B)) / 2 
 
b) Faça o programa acima calcular utilizando valores de ponto flutuante e depois imprima na tela duas 
informações: 
 
Valor exato da área: 
Valor arredondado para inteiro: 
c) Calcule o valor das seguintes equações: 
a. 3 – 2 – 1 + 2 + 1 + 3 
b. 2 * 3 – 4 * 5 
c. 2 + 6 – 3 / 7 * 9 
d. 3 % 4 – 8 
 
d) Indique qual o valor verdade das seguintes expressões: 
a. (1 > 2) // exemplo: false 
b. (8 == 8) // exemplo: true 
c. ((12 – 5) > 6) 
d. (0 i) 
f. ((10 * 90 / 50 – 2) == 16) 
Pág. 
 
6 FLUXO DE CONTROLE 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 31 
6 FLUXO DE CONTROLE 
 
Esta seção demonstra como implementar tomada de decisões em códigos Java. 
 
6.1 Ramificação if, else 
 
A sintaxe básica para declarações if, else é a seguinte: 
if (expressão_booleana) 
{ 
 // bloco de comandos 
} 
else 
{ 
 // bloco alternativo de comandos 
} 
Exemplo: 
 /** 
 * Usando if, else */ 
 
 int maior = 10; 
 int menor = 5; 
 
 if (maior > menor) 
 { 
 // (10 > 5) = true 
 System.out.println(maior + ">" + menor); 
 } 
 else 
 { 
 // (10 > 5) != true 
 System.out.println(menor + ">" + maior); 
 } 
 
// Lembre-se que o controle de fluxo é feito através 
// do valor verdade de uma expressão booleanaboolean verdade = (10 > 5); 
 
 if (verdade) 
 { 
 // (10 > 5) = true 
 System.out.println(maior + ">" + menor); 
 
 } 
Pág. 
 
6 FLUXO DE CONTROLE 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 32 
 else 
 { 
 // (10 > 5) != true 
 System.out.println(menor + ">" + maior); 
 } 
 
6.2 Ramificação switch 
 
Switch é uma declaração semelhante ao if, mas que usa valores inteiros para a tomada de decisões ao invés 
de expressões booleanas. (só pode ser usada em dados dos tipos short, int, byte ou char). Se o tipo de dado não 
for inteiro, o comando switch irá executar uma promoção desse valor ao tipo int para somente depois 
executar a ramificação. 
A sintaxe básica para declarações switch é a seguinte: 
Switch ((int)expressão) 
{ 
// bloco de comandos 
case ((int) valor_1): 
// bloco de comandos break; 
 
case ((int) valor_2): 
// bloco de comandos break; 
default : 
// bloco de comandos padrão. 
// Se nenhum dos valores acima corresponder à 
// expressão definida no comando switch, então 
// o programa executará o trecho default. 
// o trecho default é opcional. 
break; 
} 
Exemplo: 
 /** 
 * Usando switch 
 */ 
 // Considere valorDoTeclado() como um número 
 // inteiro digitado pelo usuário 
 
 int valor = valorDoTeclado(); 
 switch (valor) 
 { 
 
 case 0: 
Pág. 
 
6 FLUXO DE CONTROLE 
 
 
 
JAVA OO UDF - SI - LINGUAGEM DE PROGRAMAÇÃO PÁGINA 33 
 System.out.println("cadastro de produto"); 
 break; 
 case 1: 
 System.out.println("emitir nota fiscal"); 
 break; 
 case 2: 
 System.out.println("cancelar compra"); 
 break; 
 default: 
 System.out.println("efetuar venda"); 
 break; 
 } 
6.3 Repetição for 
A declaração for é utilizada para definir que um bloco de comandos deve ser executado 'n' vezes, onde 'n' é 
um número inteiro. A sintaxe do comando for é a seguinte: 
for (int i = 0; i 0; i--) 
 { 
 fatorial = fatorial * i; 
 } 
 
 System.out.println("fatorial de " + numero + " = " + fatorial); 
 
 // Imprimindo os dias do ano: 
 for (int mes = 1; mes 0) 
 { 
 fatorial = fatorial * i; 
 i--; 
 } 
 
 System.out.println("O fatorial de " + numero + " = " + fatorial); 
 // Lendo a condição de parada do teclado: 
 
 numero = 0; 
 while (numero

Mais conteúdos dessa disciplina