Logo Passei Direto
Buscar

Exercícios de Programação Orientada a Objeto em Java

Ferramentas de estudo

Questões resolvidas

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

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

Questões resolvidas

Prévia do material em texto

Programação Orientada a Objeto em Java 
Marcio Quirino - 1 
 
 
Exercícios 
1. O principal elemento estrutural de um programa em Java é a definição de uma classe. Afinal de 
contas, até hoje, o Java é considerado uma das linguagens de programação orientada a objetos 
mais importantes da atualidade e, certamente, vai continuar a ser por muitas décadas. Nesse 
sentido, selecione a opção correta que contém uma declaração de classe válida na linguagem 
Java. 
public class Aluno { } 
Na declaração de uma classe, o modificador “public” é opcional, no entanto ele é correto. Além disso, 
devemos ficar atentos que o Java também diferencia os nomes de variáveis, comandos, métodos e 
classes por meio do uso de letras maiúsculas e minúsculas. Por isso, dizemos que o Java é uma 
linguagem de programação “case sensitive”. Por exemplo, os termos “class” e “Class” são 
completamente diferentes para o Java. 
2. A linguagem de programação Java possui muitas particularidades sobre o ciclo de vida de um 
objeto. A ideia é reduzir as possibilidades de um programa causar riscos de segurança para o 
sistema, mas, na prática, essa forma de trabalhar impõe limites sobre o que o programador pode 
atuar no ciclo de vida dos objetos. Nesse sentido, sobre objetos em Java, selecione a opção 
correta: 
O programador não precisa se preocupar em desalocar a memória de um objeto destruído. 
A reciclagem de espaço de memória em Java é feita pelo coletor de lixo. 
3. Sem dúvidas, a melhor forma de aprender uma linguagem de programação é praticando. Nesse 
sentido, considere o código anterior sobre a classe “Pessoa”. Agora, modifique o programa, para 
que ele exiba o seguinte resultado: 
 
[Pessoa 1]nome: Teste A, Código Identificador: valor numérico do código 
[Pessoa 2]nome: Teste B, Código Identificador: valor numérico do código 
Basta modificarmos a função mais com a criação de mais uma variável e a adaptação de como 
os dados vão ser exibidos na saída. Apresentamos uma possível solução no código a seguir: 
Pessoa p1 = new Pessoa("Teste A"); 
Pessoa p2 = new Pessoa("Teste B"); 
System.out.println("[Pessoa 1] nome: "+p1.getNome()+", Código Identificador: 
"+p1.getCodigoIdentificador()); 
System.out.println("[Pessoa 2] nome: "+p2.getNome()+", Código Identificador: 
"+p2.getCodigoIdentificador()); 
O restante do código deve ficar inalterado. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 2 
 
4. Acabamos de estudar sobre como funcionam as relações entre classes em Java. Então, com base 
no código da classe “Escola”, desenvolva a implementação da classe “Endereco” com os 
atributos “nome_rua” e “numero”. 
Podemos implementar a classe Endereco da seguinte maneira: 
public class Endereco { 
 private String nome_rua; 
 private int numero; 
 public Endereco (String nome_rua, int numero){ 
 this.setNomeRua(nome_rua); 
 this.numero=numero; 
 } 
 private void setNomeRua(String nome_rua) { 
 this.nome_rua = nome_rua; 
 } 
 public String getNomeRua () { 
 return this.nome_rua; 
 } 
 private void setNumero(int numero) { 
 this.numero = numero; 
 } 
 public int getNumero() { 
 return this.numero; 
 } 
} 
Para testarmos se a classe está correta, podemos acrescentar a função “main” dentro da classe 
Endereco da seguinte forma: 
public static void main(String args[]){ 
 Endereco ender = new Endereco ("rua X", 7); 
 System.out.println(ender.getNomeRua()+", "+ender.getNumero()); 
} 
Cujo resultado da execução será: 
rua X, 7 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 3 
 
5. Como sabemos, trabalhar com referências a objetos em Java pode ser um pouco confuso. No 
entanto, não podemos deixar de conhecer esse tipo de recurso, pois muitos sistemas fazem uso 
dele e esse conhecimento pode ser bastante útil para fazer a manutenção em um sistema. Nesse 
sentido, modifique o código da classe “Referência” de modo que você simplesmente modifique 
a linha: 
 
a2 = a1; 
Por 
a1 = a2; 
 
Execute o programa modificado e responda se houve ou não alguma diferença no resultado. 
Justifique a sua resposta. 
O programa completo deve ficar da seguinte maneira: 
class Aluno { 
 private String nome; 
 private int idade; 
 public Aluno ( String nome , int idade ) { 
 this.nome = nome; 
 this.idade = idade; 
 } 
 public void definirNome ( String nome ) { 
 this.nome = nome; 
 } 
 public void definirIdade ( int idade ) { 
 this.idade = idade; 
 } 
 public String recuperarNome () { 
 return this.nome; 
 } 
} 
public class Referencia { 
 private Aluno a1 , a2; 
 public Referencia() { 
 a1 = new Aluno ( "Carlos" , 20); 
 a2 = new Aluno ( "Ana" , 23 ); 
 System.out.println("O nome do aluno a1 é " + a1.recuperarNome()); 
 System.out.println("O nome do aluno a2 é " + a2.recuperarNome()); 
 a1 = a2; 
 a2.definirNome("Flávia"); 
 System.out.println("O nome do aluno a1 é " + a1.recuperarNome()); 
 manipulaAluno ( a1 ); 
 System.out.println("O nome do aluno a1 é " + a1.recuperarNome()); 
 } 
 public void manipulaAluno ( Aluno aluno ) { 
 aluno.definirNome("Márcia"); 
 } 
 public static void main(String args[]) { 
 Referencia r = new Referencia (); 
 System.out.println("Fim da Execução "); 
 } 
} 
Onde temos o resultado: 
O nome do aluno a1 é Carlos 
O nome do aluno a2 é Ana 
O nome do aluno a1 é Flávia 
O nome do aluno a1 é Márcia 
Fim da Execução 
Que é exatamente o código anterior. Isso ocorreu porque a mudança da ordem dos objetos não 
implica a mudança do papel que eles desempenham, ou seja, ambos continuam referenciando 
um ao outro. 
Programação Orientada a Objeto em Java 
Marcio Quirino - 4 
 
6. A herança é uma propriedade típica da programação orientada a objetos e é disponível pelo Java. 
Obviamente, sempre precisamos usar essa propriedade com cuidado, pois, caso contrário, 
podemos tornar o código bem complicado de entender. Neste sentido, sobre herança em Java, é 
correto afirmar apenas que: 
Um objeto instanciado da subclasse é também um objeto do tipo da superclasse. 
O mecanismo de herança oferece para subclasse a mesma estrutura da superclasse. Portanto, o objeto 
da classe filha tem as mesmas propriedades da classe mãe. 
7. O Java oferece o uso de palavras-chave para que possamos aplicar os modificadores. A escolha 
do uso desses modificadores, no entanto, é de total responsabilidade do desenvolvedor. Nesse 
sentido, assinale a alternativa correta sobre qual o impacto positivo de uma boa escolha do uso 
dos modificadores: 
Auxiliam a estabelecer um comportamento previsível para um objeto. 
Os modificadores de acessibilidade são importantes para estabelecer qual o comportamento que 
esperamos que um objeto tenha durante o processo de execução. Eles estão fortemente relacionados 
a diversas outras propriedades da programação orientada a objetos, como um mecanismo de evitarmos 
comportamentos anômalos e garantir a segurança dos atributos e métodos das classes. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 5 
 
8. As principais vantagens da propriedade de herança são a reutilização e a padronização de código. 
Isso é muito importante, principalmente, quando trabalhamos com desenvolvimento de projetos 
em equipe. Nesse sentido, modifique o código da classe “Principal” para acrescentar um novo 
aluno com o nome de “Maria”, data de nascimento “07/julho/2007” e endereço “Brasil”, “Ceará”, 
“rua Canuto de Aguiar”, número “176”, cep “20252-060”, complemento “apto 307” e CPF 
“123456877-00”. 
Para obtermos o resultado solicitado na questão, precisamos fazer a seguintes modificações na 
implementação classe “Principal”: 
public class Principal{ 
 //Atributos 
 private static Aluno aluno; 
 private static Endereco endereco; 
 private static Aluno aluno2; 
 private static Endereco endereco2; 
 //Método main 
 public static void main (String args[]) { 
 int idade; 
 Calendar data = Calendar.getInstance(); 
 data.set(1980, 10, 23); 
 endereco = new Endereco (); 
 endereco.definirPais("Brasil"); 
 endereco.definirUF("RJ"); 
 endereco.definirCidade ("Rio de Janeiro"); 
 endereco.definirRua("Avenida Rio Branco"); 
 endereco.definirNumero("156A"); 
 endereco.definirCEP(20040901); 
 endereco.definirComplemento("Bloco 03 - Ap 20.005"); 
 aluno = new Aluno ("Maria", data, 901564098, endereco); 
 aluno.atualizarIdade(); 
 idade = aluno.recuperarIdade(); 
 //Inclusão do novo aluno 
 Calendar data2 = Calendar.getInstance(); 
 data2.set(2007, 07, 07); 
 endereco2 = new Endereco (); 
 endereco2.definirPais("Brasil"); 
 endereco2.definirUF("CE"); 
 endereco2.definirCidade("Fortaleza"); 
 endereco2.definirRua("rua Canuto de Aguiar"); 
 endereco2.definirNumero("176"); 
 endereco2.definirCEP(20252060); 
 endereco2.definirComplemento("Ap 307"); 
 aluno2 = new Aluno ("Maria", data , 123456877, endereco); 
 aluno2.atualizarIdade(); 
 } 
} 
Basicamente, incluímos dois atributos na classe Principal – no caso, aluno2 e endereco2 – e 
repetimos as chamadas para os parâmetros dos métodos dos atributos com os respectivos 
dados informados na questão. De fato, poderíamos ter feito essa implementação de forma mais 
eficiente, mas, por enquanto, obtivemos o resultado que pretendíamos e isso está nos ajudando 
a entender melhor como programar com o Java. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 6 
 
9. Agora, conhecemos mais uma importante propriedade programação orientada a objetos: o 
polimorfismo. De fato, há situações em que essa propriedade pode ser bastante útil, enquanto, 
em outros casos, pode ser bastante complicada e difícil de dar manutenção. Por isso, é muito 
importante realizarmos um processo de análise para decidirmos se devemos ou não aplicarmos 
o polimorfismo. Nesse sentido, implemente uma classe chamada de Principal que possua dois 
métodos que utilize obrigatoriamente a propriedade de polimorfismo para obter o maior elemento 
de dois números e o maior elemento de três números. 
Agora, apresentamos uma solução para este problema. 
public class Principal { 
 public int maiorElem(int a, int b){ 
 int maior =a; 
 if(b>maior){ 
 maior=b; 
 } 
 return maior; 
 } 
 public int maiorElem(int a, int b, int c){ 
 int maior = maiorElem(a, b); 
 return maiorElem(maior, c); 
 } 
 public static void main(String args[]) { 
 Principal objMaior = new Principal(); 
 int x=10; 
 int y=25; 
 int z=15; 
 System.out.println("O maior elemento entre "+ x +" e " + y + " é: "+ 
objMaior.maiorElem(x,y)); 
 System.out.println("O maior elemento entre "+ x +", " + y + " e "+ z +" é: "+ 
objMaior.maiorElem(x,y,z)); 
 } 
} 
Basicamente, criamos dois métodos “maiorElem” na classe “Principal”, sendo que um deles 
utiliza o outro como parte integrante da própria solução. Trata-se de um exemplo simples, mas 
que nos dá uma noção clara de como podemos utilizar métodos mais simples para compor 
soluções mais complexas. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 7 
 
10. Como vimos no exemplo da classe abstrata, todos os objetos das classes herdeiras eram do tipo 
“Animal”, pois eles implementavam exatamente os métodos que estavam definidos na classe 
mãe, ou seja, na classe “Animal”. Agora, o nosso desafio é implementar a classe “Leao” que 
também vai herdar da classe “Animal”, mas, além disso, ela deve ter um método “tipoDeAnimal” 
que imprima a mensagem: “É um animal selvagem”. 
Basicamente, precisamos acrescentar a classe “Leao” derivada da classe “Animal”. No entanto, 
precisamos acrescentar o método “tipoDeAnimal”. Nesse caso, teremos que modificar a forma 
de declarar a classe “Leao”. A seguir, apresentamos o código completo: 
// Classe Abstrata 
abstract class Animal { 
 // metodo abstrato 
 public abstract void emitirSom(); 
 
 // metodo concreto 
 public void dormir() { 
 System.out.println("Zzzz..."); 
 } 
} 
// subclasse concreta 
class Cachorro extends Animal { 
 public void emitirSom() { 
 System.out.println("Latir!"); 
 } 
} 
// subclasse concreta 
class Gato extends Animal { 
 public void emitirSom() { 
 System.out.println("Miar!"); 
 } 
} 
// subclasse concreta 
class Leao extends Animal { 
 public void tipoDeAnimal() { 
 System.out.println("É um animal Selvagem."); 
 } 
 public void emitirSom() { 
 System.out.println("Rugir!"); 
 } 
} 
// Classe Principal 
public class Main { 
 public static void main(String[] args) { 
 Animal cachorro = new Cachorro(); 
 Animal gato = new Gato(); 
 Leao leao = new Leao(); 
 // cachorro 
 cachorro.emitirSom(); 
 cachorro.dormir(); 
 // gato 
 gato.emitirSom(); 
 gato.dormir(); 
 // leao 
 leao.emitirSom(); 
 leao.tipoDeAnimal(); 
 leao.dormir(); 
 } 
} 
No qual a saída é: 
Latir! 
Zzzz... 
Miar! 
Zzzz... 
Programação Orientada a Objeto em Java 
Marcio Quirino - 8 
 
Rugir! 
É um animal Selvagem. 
Zzzz... 
 
11. Os agrupamentos de dados são um importante recurso que o Java que nos oferece com objetivo 
de manipular grandes volumes de dados que possuem características em comum, semelhante 
ao que fazemos na manipulação de dados em bancos de dados. Nesse sentido, avalie as 
seguintes afirmações feitas acerca da linguagem Java: 
 
I. Ao utilizar o método “groupingBy” da classe “Collectors”, o programador tem de informar 
o atributo a ser usado para o agrupamento. 
II. Os objetos agrupados são armazenados em um container que é mapeado para a chave de 
agrupamento. 
III. O método “groupingBy” só armazena os objetos em coleções do tipo “List”. 
 
Está correto apenas o que se afirma em: 
II 
O retorno do método “groupingBy” é um “Collector” que cria uma estrutura “Map”. Essa estrutura 
mantém um mapeamento entre a chave de agrupamento e o container que contém os objetos 
agrupados. As demais afirmativas são falsas. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 9 
 
12. O uso dos coletores no Java exige bastante experiência. No entanto, o nosso objetivo é 
exatamente dominar a linguagem Java e nos destacar no mercado. Então, devemos nos esforçar 
para superar mais esse desafio. Vamos considerar o seguinte trecho incompleto de código em 
Java: 
import java.util.ArrayList; 
import java.util.List; 
import java.util.function.Function; 
 
public class ExemploMapeamento { 
 public static void main(String[] args) { 
 List<Integer> numeros = List.of(1, 2, 3, 4, 5); 
 List<Integer> quadradoNumeros = map(numeros, ???); 
 System.out.println("Números Originais: " + numeros); 
 System.out.println("Números ao Quadrado: " + quadradoNumeros); 
 } 
 public static <T, R> List<R> map(List<T> lista, Function<T, R> mapa) { 
 List<R> resultado = new ArrayList<>(); 
 for (T item : lista) { 
 R itemMapeado = mapa.apply(item); 
 resultado.add(itemMapeado); 
 } 
 return resultado; 
 } 
} 
Nós queremos que o programa exiba o seguinte resultado: 
Números Originais: [1, 2, 3, 4, 5] 
Números ao Quadrado: [1, 4,9, 16, 25] 
Nesse sentido, precisamos modificar o trecho “???” por um comando adequado. Então, mãos à 
obra e vamos superar mais esse desafio. 
O programa completo vai ficar da seguinte forma: 
import java.util.ArrayList; 
import java.util.List; 
import java.util.function.Function; 
 
public class ExemploMapeamento { 
 public static void main(String[] args) { 
 List<Integer> numeros = List.of(1, 2, 3, 4, 5); 
 List<Integer> quadradoNumeros = map(numeros, x -> x * x); 
 System.out.println("Números Originais: " + numeros); 
 System.out.println("Números ao Quadrado: " + quadradoNumeros); 
 } 
 public static <T, R> List<R> map(List<T> lista, Function<T, R> mapa) { 
 List<R> resultado = new ArrayList<>(); 
 for (T item : lista) { 
 R itemMapeado = mapa.apply(item); 
 resultado.add(itemMapeado); 
 } 
 return resultado; 
 } 
} 
Ou seja, trocamos a expressão “???” por “x -> x * x” que significa que a função recebe um valor 
e calcula o quadrado dele. 
 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 10 
 
13. O Java oferece diversos tipos de coleções. De fato, isso pode ser muito útil para trabalhar com 
determinados cenários em que os dados devem obedecer a alguma política de manipulação, 
como por exemplo, uma estrutura do tipo FIFO (Primeiro a Entrar e Primeiro a Sair), ou LIFO 
(Último a Entrar, Primeiro a Sair). Nesse sentido, selecione a única alternativa verdadeira a 
respeito das coleções em Java: 
Uma pilha pode ser implementada com o Container "Deque". 
O container “Deque” possibilita inserção e remoção em ambas as extremidades, o que permite 
implementar uma pilha. É verdade, porém, que podemos utilizar um container “Deque” de outras formas 
também. De fato, o Java facilita bastante a manipulação de dados. Esse fato contribuiu bastante para a 
popularidade da linguagem e, durante muito tempo, ela continuará a ser bastante relevante. 
14. Java é uma linguagem de programação rápida, segura e confiável para codificar tudo, desde 
aplicações móveis e software empresarial até aplicações de big data e tecnologias do servidor. 
Agora, analise as afirmativas a seguir: 
 
(I) O Java não é uma linguagem independente de plataforma, ela é uma plataforma. 
PORQUE 
(II) Um software desenvolvido em Java não é executado pelo hardware, mas, sim, pela Máquina 
Virtual Java (JVM). 
As duas afirmações estão corretas e a segunda justifica a primeira. 
Java é uma linguagem multiplataforma, orientada a objetos e centrada em rede que é utilizada como 
uma plataforma em si. 
15. A linguagem Java oferece diversos recursos interessantes para o desenvolvimento de projetos 
sofisticados. Para isso, precisamos de alguns elementos básicos para criar esses programas. 
Nesse sentido, selecione a opção correta que contém todos os elementos que são 
imprescindíveis para realizar um desenvolvimento em Java: 
JDK e editor de código. 
O JDK contém o JRE e a máquina virtual Java, mas não possui aplicativo de edição de código, que 
precisa ser complementado. 
16. O programa em Java tem um ciclo de vida. Um dos elementos essenciais desse ciclo de vida é o 
ponto de partida. Nesse sentido, selecione a opção correta que possui a única assinatura de 
método que cria um ponto de entrada para a execução de um programa Java é: 
public static void main(String args[ ]) 
O método “main” em Java não admite sobrecarga. Sua assinatura é fixa, inclusive quanto aos 
parâmetros. 
17. A criação de programas interativos inclui o uso de alguns comandos que permitem que, 
dependendo das circunstâncias, os programas executem instruções diferente, tais como “while”, 
“for” e outros. Nesse contexto, o comando “break” tem a função de 
interromper a execução de um loop. 
O comando “break” é usado para interromper a execução de um laço de iteração ou de um comando 
“switch”. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 11 
 
18. Considerando uma aplicação que gerencia funcionários em uma empresa, a classe Empregado 
herda características da classe Pessoa. O sistema precisa garantir a segurança dos dados, 
restringindo o acesso a atributos sensíveis dos empregados. 
Qual modificador de acesso deve ser utilizado nos atributos sensíveis da classe Empregado para 
garantir essa segurança? 
private 
O modificador de acesso private é o mais adequado para proteger atributos sensíveis em uma classe, 
pois restringe o acesso aos atributos apenas dentro da própria classe. Isso garante que informações 
sensíveis não sejam acessíveis de forma indesejada por outras classes ou subclasses. 
19. (COTEC - 2020 - Prefeitura de Sâo Francisco/MG - Técnico em Informática) Considere o seguinte 
programa escrito em linguagem Java: 
 
Analisando a lógica do programa anterior, é CORRETO afirmar que, ao final da execução do 
programa, serão impressas as respostas disponíveis na alternativa: 
Valor para Pagar Hoje: 1030.0 Valor para Pagar Hoje+1:1031.0 Valor para Pagar Hoje+2:1032.0 
Valor para Pagar Hoje+3:1033.0 Valor para Pagar Hoje+4:1034.0 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 12 
 
20. (AOCP - 2013 - COREN/SC - Técnico Especializado - Programador) Com base no código Java a 
seguir, responda: 
public class Exemplo { 
public static void main(string[] args) { 
Set carros = new HashSet(); 
carros.addícSonicé); 
carros.addícCeltai); 
carros.addíéCorsai); 
carros.addícSonicé); 
carros.addícCeltai); 
carros.remove(<-Celta<-); 
carros.remove(<-Corsa<-); 
for (string string : carros) { 
System.out.pri ntln (string); 
} 
} 
} 
Qual das seguintes alternativas informa o resultado da execução do código? 
Sonic 
21. (IBFC - 2020 - EBSERH - Analista de Tecnologia da Informação) Observe cuidadosamente o 
código Java a seguir: 
public class OlaMundo { 
public static void main(string[] args) { 
System.println("Olá Mundo!"); 
} 
} 
Assinale a alternativa correta: 
A terceira linha do código deveria ser - System.out.println("Olá Mundo!") 
22. (Instituto AOCP - 2020 - MJSP - Cientista de Dados - Engenheiro de Dados - Big Data) Java é uma 
linguagem orientada a objetos na qual os objetos Java são parte das assim chamadas classes 
Java. Nesse sentido, escolha a alternativa que apresenta um programa executável escrito em 
Java. 
public class Main { 
public static void main(String[] args) { 
System.out.println(’Hello World!"); 
} 
} 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 13 
 
23. (AOCP - 2013 - COREN/SC - Técnico Especializado - Programador) Com base no código Java a 
seguir, responda: 
public class Automovel { 
public void nome(String nome) { 
return nome; 
} 
} 
 
public class Carro extends Automovel { 
@Override public void nome(String nome) { 
return “O carro é” + super.nome(nome); 
} 
} 
 
public class Executa { 
public static void main(String[] args) { 
Carro carro = new Carro(); 
System.out.println(carro.nome(“Corsa”)); 
} 
} 
Qual das seguintes alternativas indica o resultado da execução do código? 
O código não será compilado, pois apresenta erros 
24. (FUNRIO - 2018 - Câmara de São João de Meriti/ RJ - Analista Legislativo - Analista em Tecnologia 
- Adaptada) No que diz respeito à criação de métodos em Java, observe o fragmento a seguir. 
O qualificador, também conhecido por modificador, define a visibilidade e pode ser de três tipos 
básicos: 
I. O método é visível apenas pela própria classe. É o qualificador mais restritivo. 
II. O método é visível pela própria classe, por suas subclasses e pelas classes do mesmo pacote. 
III. O método é visível por qualquer classe. É o qualificador mais aberto no sentido de que 
qualquer classe pode usar este método. 
 
Os tipos básicos dos modificadores descritos em I, II e III são, respectivamente: 
“Private”, “protected” e “public” 
Os modificadores em Java definem a visibilidade dos métodos. No enunciado, temostrês descrições de 
visibilidade. A primeira, que diz que o método é visível apenas pela própria classe, refere-se ao 
modificador "private", que é o mais restritivo. A segunda, que afirma que o método é visível pela própria 
classe, por suas subclasses e pelas classes do mesmo pacote, corresponde ao modificador "protected". 
Por fim, a terceira descrição, que indica que o método é visível por qualquer classe, corresponde ao 
modificador "public", que é o mais aberto. Portanto, a alternativa correta é a D: "Private", "protected" e 
"public". 
25. Em um sistema de gestão universitária, uma classe Aluno é derivada de Pessoa. O sistema 
precisa manipular uma coleção de alunos utilizando as estruturas de dados fornecidas pelo Java. 
A classe Aluno tem atributos como matricula e curso, além de métodos específicos. 
 
Qual é a melhor estrutura de dados em Java para armazenar e acessar rapidamente informações 
de alunos por matrícula? 
HashMap. 
A estrutura de dados HashMap é ideal para este cenário, pois permite armazenar pares chave-valor, 
como matrícula e informações do aluno, e oferece acesso rápido a esses dados. As outras opções não 
são tão eficientes para acessar rapidamente informações específicas por uma chave, como a matrícula. 
Programação Orientada a Objeto em Java 
Marcio Quirino - 14 
 
26. (FUNDATEC - 2018 - CIGA/SC - Analista de Sistemas) Para responder à questão, considere as 
Figuras 12(a) e 12(b). A Figura 12(a) mostra um diagrama de classes, da UML, a partir do qual 
implementou-se os programas principal e secundários, na linguagem de programação Java. 
Sobre esses programas em Java, considere os seguintes aspectos: (l) todos os programas foram 
implementados dentro de uma package chamada "ciga"; (2) os programas estão funcionando 
corretamente; (3) os métodos “get" permitem retornar o conteúdo de uma variável, por exemplo, 
"getR" retorna o conteúdo de “r”; e (4) a variável "x" ainda não foi declarada em nenhum dos 
programas. A Figura 12(b) mostra, intencionalmente, apenas parte do código fonte, tendo-se 
inserido, no local apontado pela seta n° 1, um retângulo de modo a ocultar o código fonte 
existente nesse local. Nas Figuras 12(b) e 12(c) foram inseridos, intencionalmente, retângulos 
nos locais apontados pelas setas de n° 1,3 e 4, de modo a ocultar qualquer código existente 
nesses locais. 
 
Após observar as Figuras 12(a), 12(b) e 12(c)f analise as assertivas a seguir: 
 
I. A classe "B", ao ser implementada em um programa em Java, permitirá a violação do princípio 
fundamental da orientação a objeto chamado encapsulamento. 
II. Todo objeto da classe "A', ao ser criado, terá somente as variáveis de instância "r" e ’s". 
III. Além dos métodos já existentes na classe "A', é possível, também, criar mais o seguinte, na 
Figura 12(a): + A(varR : int); 
 
Quais estão corretas? 
I, II e III. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 15 
 
27. (FUNDATEC - 2018 - CIGA/SC - Analista de Sistemas) Para responder ò questão, considere a 
Figura 11, que mostra um programa elaborado utilizando-se a linguagem de programação Java. 
Nessa Figura, inseriu-se, intencionalmente, um retângulo no local apontado pela seta n° 2, de 
modo a ocultar qualquer código fonte existente nesse local. 
 
A Figura 11 mostra um programa em Java que permite realizar, repetidamente, determinada 
multiplicação e apresentar o seu resultado, enquanto o conteúdo da variável 'repetir" for 'SIM'. 
Para que esse programa funcione adequadamente e possa ser encerrado corretamente, basta 
que no local apontado pela seta n° 1 exista, apenas, o seguinte código fonte: I. while (repetir == 
'SIM') {II. while (repetir.equalslgnoreCase(”SIM’)) {III. while (repetir.equals(”SIM")) { 
 
Quais estão corretas? 
Apenas II e III. 
28. (COMPERVE - 2020 - TJ/RN - Analista de Sistemas Sênior - Adaptada) Analise o trecho de código 
Java a seguir. 
 
A partir da análise do código, observa-se que: 
O código não compila. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 16 
 
29. Em um sistema de gerenciamento de biblioteca desenvolvido em Java, cada livro é representado 
por um objeto. Estes objetos são instanciados a partir de uma classe Livro, que possui atributos 
como título, autor e ano de publicação. 
Qual princípio da programação orientada a objetos é primordialmente demonstrado neste 
cenário? 
Abstração. 
A abstração é um conceito chave na programação orientada a objetos, essencial para modelar 
entidades do mundo real, como livros em uma biblioteca, em classes e objetos. Este conceito permite 
focar nas características essenciais de um objeto, como título, autor e ano de publicação no caso de um 
livro, abstraindo os detalhes irrelevantes para o contexto do programa. 
30. (COPESE-UFT - 2012 - MPE/TO - Técnico Ministerial - Informática) Analise o código Java a seguir. 
 
É correto afirmar que o código: 
Apresenta um erro de compilação na linha 5, pois como o atributo idade é privado, o conteúdo 
deste atributo não pode ser acessado de outra forma em outra classe, sendo necessário criar 
métodos públicos na classe "Pessoa". 
O código Java apresentado possui um erro de compilação na linha 5. Isso ocorre porque o atributo 
"idade" é privado, o que significa que ele não pode ser acessado diretamente de outra classe. Em Java, 
quando um atributo é privado, ele só pode ser acessado dentro da própria classe onde foi declarado. 
Para acessar ou modificar o valor de um atributo privado de outra classe, é necessário criar métodos 
públicos na classe onde o atributo está declarado, conhecidos como métodos de acesso (getters) e 
métodos de modificação (setters). Portanto, a alternativa correta é a C: "Apresenta um erro de 
compilação na linha 5, pois como o atributo idade é privado, o conteúdo deste atributo não pode ser 
acessado de outra forma em outra classe, sendo necessário criar métodos públicos na classe 'Pessoa'". 
31. Em um projeto Java, um desenvolvedor precisa implementar um método para calcular a média 
de uma lista de notas. Ele deve utilizar um laço de repetição adequado para percorrer a lista, 
somar as notas e, ao final, calcular a média. 
 
Qual é o laço de repetição mais apropriado para esta tarefa e por quê? 
for, pois permite iterar a lista de forma concisa. 
O laço for é ideal para percorrer listas ou arrays de forma eficiente e concisa, permitindo a soma e 
cálculo da média das notas de maneira direta. As outras alternativas não se aplicam ao contexto de 
iteração em listas para cálculo de médias. 
Programação Orientada a Objeto em Java 
Marcio Quirino - 17 
 
32. Considere duas classes chamadas “Base” e “Derivada”, de tal forma que a primeira é superclasse 
da última. A classe “derivada” atende ao princípio da substituição de Liskov. 
 
Analise as afirmações a seguir e marque a opção em que todas são corretas. 
I) Derivada não pode sobrescrever os métodos protegidos de “Base”. 
II) Todos os métodos públicos e protegidos de “Derivada” devem ter a mesma assinatura que os 
de “Base”. 
III) Todos os métodos públicos e protegidos de “Base” que forem redefinidos em “Derivada” 
devem ter a mesma assinatura. 
III 
33. O princípio da substituição de Liskov afirma que a classe “Base” deve poder ser substituída por 
“Derivada” sem que o programa quebre. Assim, é necessário que os métodos de “Base” 
redefinidos por “Derivada” tenham a mesma assinatura. 
 
Estruturas de dados são mecanismos fundamentais para a manipulação de dados e possuem 
impacto na performance de um software. Java fornece implementações de algumas estruturas 
por meio do Java Collections Framework. Sobre o assunto, marque a única opção correta. 
Mais de um tipo de coleção permite a implementação de fila (FIFO). 
O Java Collections Framework permite que algumas estruturas de dados sejam implementadas de 
forma simples e rápida, um exemplo são as filas que podem ser implementadas por “Queue” e “Deque”.34. Sobre os métodos “equals” e “hashCode” da classe “Objects”, podemos afirmar que 
objetos iguais terem código hash distintos viola o contrato geral de "hashCode". 
Na linguagem Java, o contrato geral do método “hashCode” afirma que objetos iguais devem ter códigos 
“hash iguais”. 
35. Um dos métodos da classe “Objects” é o “toString”, que retorna uma representação textual do 
objeto. Sobre esse método, são feitas as seguintes afirmações: 
 
I) São informações obrigatórias, mesmo se ele for redefinido, o nome completamente qualificado 
do objeto e seu código hash. 
II) Ele pode ser invocado em um objeto do tipo String. 
III) O código hash informado por “toString” é um identificador único do objeto. 
 
Marque a opção que contém a afirmativa correta: 
II 
Em Java, todos os objetos descendem direta ou indiretamente de “Objects”, logo, herdam a 
implementação padrão de “toString”. Isso se dá, inclusive, com um objeto do tipo “String”. 
36. Uma classe abstrata em Java é declarada pelo uso do modificador abstract. Analise as opções a 
seguir e marque a correta sobre o assunto. 
Uma classe abstrata pode estender uma classe concreta. 
Uma classe abstrata não permite a instanciação, mas não altera as regras de herança. Assim, ela pode 
tanto estender uma classe concreta quanto ser estendida por uma. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 18 
 
37. Considere o trecho de código a seguir: 
public class Principal { 
. //Atributos 
 private static final Escola ref = new Escola ( ); 
 //Métodos 
 public static void main (String args[]) { 
 ref.atualizarAtributoNome ("Rio de Janeiro"); 
 ref = new Escola (); 
 } 
} 
O método “atualizarAtributoNome” atualiza o atributo “nome” de tipo “String” da classe “Escola”. 
É correto afirmar que 
a linha 7 gerará erro de compilação, pois "ref" é final. 
A variável “ref” é uma referência para um objeto do tipo Escola. Ela é final, não o objeto. Assim, ela 
precisa ser inicializada e não pode referenciar outra instância, por isso a tentativa feita em 7 gera erro 
de compilação. 
38. Sobre interfaces em Java, é correto afirmar que 
em uma interface, não é necessário declarar os métodos como abstratos. 
A finalidade de uma interface é prover métodos abstratos que formam um contrato a ser seguido e cuja 
implementação é oculta. Ela é formada por métodos implicitamente abstratos. 
39. Suponha que um programa em Java possua a interface “iContabil”, que é superinterface de 
“iBalanco”. “iBalanco” é implementada pela classe concreta “Balanco”. Julgue as afirmativas: 
I) Podemos usar uma variável do tipo “iContabil” para referenciar um objeto do tipo “Pessoa” e, 
nesse caso, teremos acesso aos métodos de “iContabil” e “iBalanco”. 
II) Não é possível usar uma variável do tipo da superinterface para referenciar um objeto da classe 
que implementa “iBalanco”. 
III) “Balanco” deverá implementar todos os métodos abstratos de “iBalanco” e os de “iContabil” 
que não forem ocultados por “iBalanco”. 
 
A afirmativa correta é 
somente a III. 
Uma classe que implementa uma interface deve implementar todos os seus métodos abstratos. Os 
métodos abstratos da superinterface que não são ocultados pela subinterface são herdados por ela e, 
por isso, também devem ser implementados. 
40. Em um aplicativo de gestão de projetos, uma classe abstrata Funcionário define o método 
abstrato trabalhar(). As classes Desenvolvedor e Gerente herdam de Funcionário e implementam 
o método trabalhar() de maneiras específicas para suas funções. 
 
Qual é o conceito de programação orientada a objetos ilustrado pelo método trabalharQ nas 
classes Desenvolvedor e Gerente? 
Polimorfismo, com diferentes implementações do mesmo método em subclasses. 
Este exemplo demonstra polimorfismo, onde o mesmo método abstrato trabalhar() é implementado de 
forma única em cada subclasse (Desenvolvedor e Gerente). Isso permite que cada classe execute 
ações diferentes, apesar de compartilharem o mesmo método da classe base. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 19 
 
41. Ano: 2018 Banca: FAURGS Órgão: BANRISUL Prova: FAURGS - 2018 - BANRISUL -
Desenvolvimento de Sistemas. Considere as afirmações abaixo sobre polimorfismo na linguagem 
de programação JAVA. 
I -A vinculação tardia ocorre se o compilador escolher um método dentre os possíveis 
candidatos. 
II -O polimorfismo indica o princípio de que o tipo real do objeto determina o método a ser 
chamado. 
III - A vinculação antecipada ocorre se a escolha do método é feita quando o programa está 
sendo executado. 
 
Quais estão corretas? 
Apenas II. 
42. Ano: 2017 Banca: FCC Órgão: TRE-PR Prova: FCC - 2017 - TRE-PR - Técnico Judiciário -
Programação de Sistemas. Uma aplicação Java pode conter, entre outros recursos, classes, 
interfaces e classes abstratas. Uma instrução correta que uma interface Java pode conter é: 
Double calcular(double n1, double n2); 
43. Ano: 2015 Banca: CETAP Órgão: MPC-PA Prova: CETAP - 2015 - MPCM-PA - Técnico em 
Informática – Desenvolvimento. A herança entre classes, em Java, define-se, utilizando a palavra-
chave: 
Extends 
44. Um jogo de computador utiliza a classe Personagem como base para diferentes tipos de 
personagens, como Guerreiro e Mago. Cada subclasse possui métodos únicos, como atacar para 
Guerreiro e conjurar para Mago. 
 
Qual característica da programação orientada a objetos é exemplificada pela presença de 
métodos únicos em Guerreiro e Mago? 
Especialização, onde subclasses adicionam métodos e atributos específicos. 
A especialização é evidenciada na adição de métodos únicos (atacar e conjurar) nas subclasses 
Guerreiro e Mago. Essa característica permite que cada subclasse expanda e personalize sua 
funcionalidade além da classe base Personagem. 
45. Herança e interfaces são conceitos da orientação a objetos que possibilitam a obtenção de 
polimorfismo. Em Java, uma interface: 
Pode possuir métodos abstratos e estáticos. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 20 
 
46. Ano: 2012 Banca: CESGRANRIO Órgão: Petrobras Prova: CESGRANRIO - 2012 - BR Distribuidora 
- Profissional Júnior - Formação Analista de Sistemas - Ênfase em Java -Crm e Web. Nas 
linguagens orientadas a objeto, existe uma diferença entre a referência a um objeto e o valor do 
objeto. Em Java, o operador == e o método equals, este definido para a classe Object, apresentam 
comportamento específico, que tem relação com essa característica. Considere o exemplo de um 
código Java 6 a seguir: 
public class Questão { 
public static void main(String [ ] args) { 
Integer a,b,c,d,e; 
int f; 
char rl;r2,r3,r4,r5; 
String s; 
a=l; b=l; c = a ; 
d= b; f=l; e = f; 
rl= ( a.equals(b)? s': n ); 
r2= ( a.equals(c)? s': n'); 
r3= ( a==d? s': n ); 
r4= (a==e? 's': 'ri); 
r5= (a.equals(f)? 's': 'ri); 
s = "”+rl+r2+r3+r4+r5; 
System.out.println(s); 
} 
} 
Executando-se esse código, em que é possível testar como o comportamento exemplificado foi 
implementado para a classe Integer e o tipo int, a resposta impressa será: 
sssss 
O código Java apresentado realiza uma série de comparações entre variáveis do tipo Integer e int. As 
comparações são feitas tanto com o operador == quanto com o método equals. O operador == compara 
se as referências dos objetos são iguais, enquanto o método equals compara se os valores dos objetos 
são iguais. No caso do código apresentado, todas as comparações retornam verdadeiro, ou seja, 's'. 
Portanto, a resposta impressa será 'sssss', o que corresponde à alternativa A. 
47. Em um sistema de gerenciamento de universidade, uma classe Pessoa é usada como base para 
as classes Estudante e Professor. A classe Pessoa contém atributos comuns como nome e idade. 
A herança é aplicada para compartilhar esses atributos com as subclasses. 
 
Qual dos seguintes é um exemplo de herança no cenário descrito acima? 
Estudante eProfessor herdam atributos de Pessoa. 
Neste cenário, a herança é demonstrada pelas classes Estudante e Professor herdando atributos da 
classe Pessoa. Esse é um exemplo clássico de herança em programação orientada a objetos, onde as 
subclasses compartilham características comuns definidas na classe base. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 21 
 
48. Ano: 2012 Banca: FADESP Órgão: MPE-PA Prova: FADESP - 2012 - MPE-PA - Técnico -Analista 
de Sistemas - Desenvolvimento (ADAPTADA). O sistema abaixo foi desenvolvido na linguagem 
Java e precisa ser completado para implementar o conceito de "Polimorfismo". A palavra que 
completa as lacunas na classe "Conta" é: 
 
Abstract 
49. (ACCESS/2020) No que diz respeito à criação de métodos em Java, o qualificador ou modificador 
define a visibilidade e pode ser de três tipos básicos: 
I. é visível apenas pela própria classe. É o qualificador mais restritivo. 
II. é visível pela própria classe, por suas subclasses e pelas classes do mesmo pacote. 
III. é visível por qualquer classe, sendo o qualificador mais aberto no sentido de que qualquer 
classe pode usar esse método. 
 
Os métodos definidos em I, II e III são respectivamente denominados 
Private, protected e public. 
Private é o mais restritivo dos qualificadores, sendo visível apenas pela própria classe. Protected é 
visível pela própria classe, por suas subclasses e pelas classes do mesmo pacote. Public é o qualificador 
mais permissivo, sendo visível por qualquer classe. 
50. Em um software de controle de estoque, uma classe Produto é a base para diferentes categorias 
de produtos, como Eletrônicos e Vestuário. Cada subclasse adiciona atributos específicos como 
voltagem para Eletrônicos. 
 
No contexto de polimorfismo, qual é a característica correta? 
Objetos de Eletrônicos e Vestuário podem ser tratados como objetos Produto. 
O polimorfismo permite que objetos de subclasses (Eletrônicos e Vestuário) sejam tratados como 
objetos da classe base (Produto). Isso facilita a manipulação de diferentes tipos de produtos em um 
sistema de controle de estoque, sem a necessidade de conhecer a classe específica de cada objeto. 
51. Na implementação de um sistema bancário, a classe Conta serve como base para ContaCorrente 
e ContaPoupanca. Ambas as subclasses sobrescrevem o método calcularJuros, definido em 
Conta. 
 
Qual é um exemplo de sobrescrita de método no cenário descrito? 
ContaCorrente e ContaPoupanca têm seus próprios métodos calcularJuros, distintos de Conta. 
A sobrescrita de método ocorre quando uma subclasse redefine um método herdado da classe base. 
Neste caso, ContaCorrente e ContaPoupanca sobrescrevem o método calcularJuros da classe Conta, 
permitindo que cada tipo de conta tenha uma implementação específica para o cálculo de juros. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 22 
 
52. Ano: 2020 Banca: COMPERVE Órgão: TJ-RN Prova: COMPERVE - 2020 - TJ-RN - Analista de 
Sistemas Sênior (ADAPTADA). Uma interface na linguagem Java é apenas um contrato que a 
classe deve cumprir com a interface que a implementa. Sobre interfaces na linguagem Java, é 
correto afirmar: 
As variáveis são implicitamente public static final. 
53. Ano: 2017 Banca: INSTITUTO AOCP Órgão: EBSERH Prova: INSTITUTO AOCP - 2017 - EBSERH -
Analista de Tecnologia da Informação - Processos (HUJB - UFCG). Ao desenvolver um sistema 
utilizando a linguagem JAVA, alguns conceitos fazem parte da programação, como 
encapsulamento, herança e polimorfismo. No polimorfismo, temos o conceito de cast implícito. 
Assinale a alternativa que apresenta o comando que usa cast implícito. 
Pai objeto = new Filho( ); 
O comando "Pai objeto = new Filho();" é um exemplo de cast implícito em Java. Neste caso, estamos 
criando um novo objeto da classe Filho e atribuindo-o a uma referência da classe Pai. Isso é possível 
porque a classe Filho é uma subclasse da classe Pai, permitindo que um objeto da classe Filho seja 
referenciado como um objeto da classe Pai. Este é um exemplo clássico de polimorfismo, onde um 
objeto pode assumir muitas formas. No caso do cast implícito, o tipo de conversão é feito 
automaticamente pelo compilador Java, sem a necessidade de uma sintaxe explícita para a conversão 
de tipos. 
54. Sobre os conceitos básicos de tratamento de exceção em Java, analise as afirmativas: 
 
I. Um erro de sintaxe causa uma exceção. 
II. Um desvio no fluxo principal do programa é uma exceção. 
III. O tratamento de exceção é feito pela Máquina Virtual Java. 
 
Está correto o que se afirmar em: 
III 
Uma exceção é causada por um erro em tempo de execução. O erro de sintaxe é um erro que ocorre 
em tempo de compilação, por isso a afirmativa I é falsa. O erro em tempo de execução desvia o 
programa de seu fluxo normal (previsto). O desvio do fluxo principal decorre de alguma condição 
prevista em tempo de programação, e é acionado pela verificação de condições inseridas nas estruturas 
de desvio da linguagem (if, while etc.). Logo, a afirmativa II também é falsa. Por fim, o tratamento de 
exceções é um mecanismo da linguagem Java e, portanto, suportado pela Máquina Virtual Java, que é 
o software que executa os programas em Java. Assim, a afirmativa III é a única verdadeira. 
55. Sobre exceções, assinale a alternativa correta. 
Exceções definidas na classe UnknownError são implícitas. 
Exceções são implícitas quando definidas nas classes Error e RunTimeException e suas derivadas. A 
classe UnknownError é uma subclasse de Error. 
56. A declaração de novos tipos de exceção é um importante recurso para o programador. Sobre 
isso, indique a alternativa correta. 
Mesmo exceções declaradas pelo programador que usem um construtor vazio possuem o 
contexto de execução em que ocorreram. 
Todo objeto instanciado a partir de uma classe derivada de Throwable possui um instantâneo da pilha 
de execução no momento de sua criação. Se o construtor for vazio, isso significa que a exceção não 
pode receber um objeto do tipo Throwable, ou seja, ela não é capaz de receber o contexto de execução 
Programação Orientada a Objeto em Java 
Marcio Quirino - 23 
 
de exceções anteriores que a causaram. Mesmo assim, ela possui seu próprio contexto de execução e 
pode passá-lo adiante. 
57. Considere apenas o código mostrado na listagem a seguir. 
//imports 
import java.io.IOException; 
import java.util.Scanner; 
 
public class Principal { 
 //Atributos 
 private static Scanner entrada; 
 
 public static void main ( String args [ ] ) { 
 double num = 0; 
 entrada = new Scanner ( System.in ); 
 
 do { 
 System.out.println ( "Entre com um numero de 4 dígitos ou \"-0001\" para sair: "); 
 if ( num == -1 ) 
 System.exit ( 0 ); 
 num = Double.parseDouble( lerEntrada ( 4 ) ); 
 System.out.println ( "O numero lido eh: " + num ); 
 } while ( num >= 0 ); 
 } 
 
 private static String lerEntrada ( int tam_entrada ) throws IOException { 
 String entrada = null; 
 
 entrada = new String ( System.in.readNBytes ( tam_entrada ) ); 
 return entrada; 
 } 
} 
E suficiente colocar a linha 17 dentro de um bloco try e capturar a exceção lançada com catch 
(IOException e). 
A exceção IOException precisa ser capturada, isto é, estar num bloco try-catch, ou ser informado ao 
chamador que ela não será tratada. Entretanto, a exceção não pode ser capturada com um comando 
catch ( Error e ), embora IOException seja um subtipo de Error. Se isso fosse possível, a informação de 
qual foi a exceção gerada se perderia, anulando o propósito desse mecanismo. Como nada impede que 
outras instruções estejam dentro de um bloco try-catch além daquela que se quer monitorar para o 
lançamento de exceção, não é necessário que apenas a chamada lerEntrada ( 4 ) da linha 17 sejainserida no bloco try-catch. Da mesma forma, colocar as linhas 17 e 22 dentro de um bloco try-catch 
resolve o problema, mas não é necessário. 
58. Um programador criou seu conjunto de exceções por meio da extensão da classe Error, com a 
finalidade de tratar erros de socket em conexões com bancos de dados. O comando que pode 
ser empregado para garantir o fechamento correto da conexão, mesmo em caso de ocorrência 
de exceção é: 
Finally 
A ocorrência de exceção causa um desvio não desejado no fluxo do programa, podendo impedir o 
encerramento da conexão e causando um vazamento de recurso. O comando finally, porém, é 
executado independentemente do desvio causado pela ocorrência de exceção, o que o torna adequado 
para a tarefa. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 24 
 
59. Assinale a alternativa correta sobre o encadeamento de exceções em Java. 
Permite recuperar as exceções sucessivamente na cadeia de lançamento. 
O encadeamento de exceções cria uma ligação entre a exceção lançada e a exceção que é instanciada. 
Isso pode ser feito pelo construtor — dois dos quatro construtores padrão permitem passar um objeto 
de uma exceção instanciada — ou do método initCause (). Em qualquer dos casos, o novo objeto terá 
referência para o objeto da exceção precedente. Assim, o encadeamento cria uma lista encadeada de 
exceções que pode ser varrida até o primeiro objeto. Essas referências são recuperadas pela chamada 
getCause (). 
60. Um programador criou uma exceção, como mostra o trecho de código a seguir. 
public class ErroValidacaoCPF extends Throwable { 
 ErroValidacaoCPF ( String msg_erro ) { 
 super ( msg_erro ); 
 } 
 ErroValidacaoCPF ( String msg_erro , Throwable causa ) { 
 super ( msg_erro , causa ); 
 } 
 public void atribuiCausa (Throwable causa ) { 
 initCause (causa); 
 } 
//Código ocultado 
… 
} 
Considerando o que você conhece sobre encadeamento de exceções em Java, qual(is) da(s) 
opção(ões) a seguir mostra(m) um lançamento correto dessa exceção? Considere que todas as 
opções são sintaticamente corretas e que E_causa é um objeto do tipo Throwable. 
I - ErroValidacaoCPF eCPF = new ErroValidacaoCPF ( "Entrada invalida!" ); 
 eCPF.atribuiCausa(E_causa); 
 throw eCPF; 
 
II - ErroValidacaoCNPJ eCNPJ = new ErroValidacaoCNPJ ( "Entrada invalida!" , null ); 
 eCNPJ.atribuiCausa(E_causa); 
 throw eCNPJ; 
 
III - ErroValidacaoCPF eCPF = new ErroValidacaoCPF ( "Entrada invalida!" , E_causa ); 
 throw eCNPJ; 
I e III 
Tanto I quanto III criam o objeto exceção fazendo o encadeamento e passando apenas um objeto 
Throwable como causa da exceção. No entanto, a II instancia a exceção passando null como valor do 
objeto Throwable causador e, na linha seguinte, tenta rescrever esse objeto. Ainda que utilize null 
novamente, uma vez que a exceção foi associada ao objeto do tipo Throwable causador, essa 
associação não pode ser modificada. 
61. Sobre o relançamento de exceções em Java, assinale a única alternativa correta. 
E feito dentro de um bloco catch e usando a referência da exceção capturada. 
O relançamento utiliza a referência da exceção capturada junto da instrução throw para lançar 
novamente essa exceção. Esse relançamento é feito dentro de um bloco catch. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 25 
 
62. Um programador criou uma exceção (NotReferencedException) a partir da classe 
RunTimeException. Considere que as exceções são empregadas em múltiplas cláusulas catch 
associadas ao mesmo bloco try para lidar com o lançamento de tipos diferentes de exceção pelo 
mesmo trecho de código. Sobre essa situação, marque a única alternativa correta. 
NotReferencedException deve vir antes de RunTimeException. 
A classe NotReferencedException é uma subclasse de RunTimeException. Logo, se RunTimeException 
estiver antes de NotReferencedException, a exceção será capturada por esse bloco catch e nunca 
chegará ao bloco destinado a tratar exceções do tipo NotReferencedException. 
63. Um programador implementou uma rotina de cópia de vetores do tipo char. A fim de dar mais 
qualidade ao seu código, ele empregou o mecanismo de tratamento de exceções de Java. Ele 
então fez o código de teste mostrado a seguir, junto de uma exceção definida por ele. 
public class Principal { 
 public static void main ( String args [ ] ) { 
 char[] op1 = { 'J' , 'A' , 'V' , 'A' , '.' }; 
 char[] op2 = new char [4]; 
 System.out.println ( copiarArray ( op1 , op2 ) ); 
 } 
 private static char[] copiarArray ( char[] op1 , char[] op2 ) { //copia o vetor op1 para 
op2 
 try { 
 if ( verificarOperandos ( op1 , op2 ) && verificarTamanhoOperandos ( op1 , op2 ) ) 
{ 
 System.arraycopy ( op1 , 0 , op2 , 0 , op1.length ); 
 return op2; 
 } else 
 System.out.println( "A operacao nao pode ser realizada!" ); 
 } catch ( NullPointerException e ) { 
 System.out.println ( "Ponteiro para objeto nulo!" ); 
 System.out.println ( e.getMessage() ); 
 System.exit ( -1 ); 
 } catch ( ArrayIndexOutOfBoundsException e ) { 
 System.out.println ( "Tentativa de extrapolar o limite do vetor!" ); 
 System.out.println ( e.getMessage() ); 
 System.exit ( -1 ); 
 } 
 return null; 
 } 
 private static boolean verificarOperandos ( char[] op1 , char[] op2 ) throws ErroOperando 
, NullPointerException { 
 boolean check = false; 
 if ( ( op1 == null ) && ( op2 == null ) ) 
 throw new ErroOperando ( "Ambos operandos sao nulos!" ); 
 else if ( op1 == null ) 
 throw new ErroOperando ( "Primeiro operando eh nulo!" ); 
 else if ( op2 == null ) 
 throw new ErroOperando ( "Segundo operando eh nulo!" ); 
 else 
 check = true; 
 return check; 
 } 
 private static boolean verificarTamanhoOperandos ( char[] op1 , char[] op2 ) { 
 if ( op1.length > op2.length ) { 
 System.out.println ( "Os tamanhos dos vetores são incompativeis! "); 
 throw new ErroOperando ( new ArrayIndexOutOfBoundsException ( "ESPACO INSUFICIENTE 
NO SEGUNDO OPERANDO!" ) ); 
 } else 
 return true; 
 } 
} 
Classe principal 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 26 
 
public class ErroOperando extends NullPointerException { 
 ErroOperando ( String msg_erro ) { 
 super ( msg_erro ); 
 } 
 ErroOperando ( Throwable causa ) { 
 initCause ( causa ); 
 } 
 @Override 
 public String toString ( ) { 
 return "Operando nulo: " + this.getMessage(); 
 } 
} 
Exceção definida pelo operador. 
 
Ao rodar o programa para testar seu código, ele observou que o programa não imprime a 
mensagem “ESPACO INSUFICIENTE NO SEGUNDO OPERANDO!”. Entretanto, o programador 
deseja que essa mensagem seja impressa quando o segundo vetor for menor do que o primeiro. 
Assinale a única opção que mostra a alteração do código capaz de provocar o comportamento 
que o operador deseja. 
Substituir as linhas 16 e 17 da classe Principal pela linha “Throw 
(ArraylndexOutOfBoundsException) e.getCauseO;”. 
Na linha 40 da classe Principal, vê-se que uma exceção do tipo ArrayIndexOutOfBoundsException é 
instanciada e colocada como causa da exceção ErroValidacao que é lançada. Vendo a linha 1 da classe 
ErroValidacao, percebe-se que ela herda de NullPointerException. Assim, a exceção lançada na linha 
40 é capturada pela instrução catch da linha 14 (ErroValidacao é um subtipo de NullPointerException). 
Lembremos que essa exceção tem atreladacomo causa uma exceção do tipo 
ArrayIndexOutOfBoundsException. Logo, a instrução e.getCause() retorna o objeto do tipo 
ArrayIndexOutOfBoundsException definido como causador. Para que o compilador saiba o tipo de 
exceção que estamos relançando, faz-se um cast explícito “(ArrayIndexOutOfBoundsException)” que 
leva o compilador a interpretar corretamente aquele objeto como sendo do tipo 
ArrayIndexOutOfBoundsException. Assim, conseguimos relançar essa exceção que, capturada pelo 
tratador default do Java, imprime a mensagem almejada. 
64. (COPEVE-UFAL -MPE-AL -Analista do Ministério Público -Desenvolvimento de Sistemas -2012) 
No código Java abaixo, verifica-se que o bloco finally será executado: 
 
De qualquer forma. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 27 
 
65. (CONSULPLAN - TRE-RJ - Analista Judiciário -Análise de Sistemas - modificado) 
Analisem as seguintes afirmativas sobre a programação orientada a objetos com Java. 
 
I. O tratamento de exceção permite criar programas tolerantes a falhas. 
II. Para lidar com uma exceção, deve-se colocar qualquer código que pode lançar uma exceção 
em uma instrução catch. 
III. O método toString de um objeto de exceção retorna uma mensagem de erro da exceção. 
IV. O bloco catch contém o código que pode lançar uma exceção e o bloco try contém o código 
que manipula a exceção se uma ocorrer. 
 
Está(ão) correta(s) apenas a(s) afirmativa(s) 
I e III 
66. (COMPERVE -UFRN- Analista de Tecnologia da Informação - 103 - 2018 - modificada) 
Considere as seguintes afirmativas sobre os tipos de exceções que existem na linguagem Java 
e o que caracteriza cada um desses tipos. 
 
I - Todas as exceções em Java herdam direta ou indiretamente da classe Throwable. 
II - Existem dois tipos de exceções Java: (1) exceções checadas (checked exceptions) que herdam 
da classe Exception ou de outra exceção checada e (2) exceções não checadas que herdam da 
classe Throwable. 
III - Um exemplo de exceção não checada é a do tipo Error que geralmente representa restrições 
de recursos ou problemas internos à máquina virtual Java (JVM). 
IV - O compilador Java não permite que sejam definidos tratadores (cláusulas catch) para as 
exceções de tipo RuntimeException e Error. 
 
Estão corretas as afirmativas 
I e III 
67. (CONSULPLAN - Câmara de Belo Horizonte - MG - Analista de Tecnologia da Informação - 
Desenvolvimento de Sistema - 2018 - modificada) 
Acerca do tratamento de exceções em Java, analise as afirmativas a seguir. 
 
I. Toda vez que a estrutura try é utilizada, obrigatoriamente, em seu encerramento (na chave final), 
deve existir pelo menos um catch, a não ser que ela utilize a instrução finally. 
II. A estrutura try pode não conter nenhum bloco catch, porém o bloco finally torna-se obrigatório. 
III. O objetivo do try é manter códigos para liberação de recursos adquiridos em seu bloco finally 
correspondente. 
IV. O finally é obrigatório e fornece um conjunto de códigos que é sempre executado, 
independentemente de uma exceção ocorrer ou não. 
 
Está(ão) correta(s) apenas a(s) afirmativa(s) 
I e II 
68. (UNIRIO - Técnico de Tecnologia da Informação -2019) Em Java, a palavra-chave throws é 
usada para: 
Especificar os tipos de exceções que um dado método pode causar. 
 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 28 
 
69. (CS - UFG -AL-GO - Analista Legislativo -Analista de Dados - 2015 -modificada) Na sintaxe da 
estrutura try-catch-finally, definida pela especificação da linguagem de programação Java versão 
8 para o tratamento de exceção, verifica-se que: 
Um bloco catch pode ser utilizado para tratar mais de uma exceção. 
70. (CESPE/CEBRASPE - TRE-MA - Técnico Judiciário - Programação de Sistemas) Um objeto de 
exceção possui, na linguagem Java, o método: 
getMessage( ). 
71. (INSTITUTO AOCP -IBGE -Analista Censitário -Análise de Sistemas -Desenvolvimento de 
Aplicações Web Mobile -2019) Ao se implementar programas de computador em Java, há 
possibilidade de ocorrerem erros imprevistos durante sua execução. Esses erros são conhecidos 
como exceções. Sabendo disso, considere que Márcio está fazendo uma operação em um banco 
de dados, porém essa operação dispara uma exceção de que o campo que ele está manipulando 
para inserir nesse banco está vazio, ou seja, acontece um NullPointerException. O problema, 
nesse caso, é a conexão com o banco de dados ficar aberta, o que não pode acontecer. Assim, 
assinale a alternativa que apresenta o bloco/código no qual deve ser inserida essa operação de 
fechamento da conexão com o banco de dados. 
finally 
72. (CS-UFG - SANEAGO-GO- Analista de Sistemas - 2018 - modificada) Uma desenvolvedora 
JAVA chamou um método X que pode gerar uma exceção não verificada. Porém, essa chamada 
não foi circundada por um bloco de tratamento de exceção. O que acontecerá com esse código? 
Compilará e executará normalmente, caso a exceção não seja lançada por X. 
73. Threads em Java permitem o paralelismo de tarefas em uma aplicação. Sobre esse tema, 
analise as afirmações: 
 
I) Todas as aplicações cujas atividades podem ser subdivididas podem se beneficiar do uso de 
threads, reduzindo o tempo de resposta. 
II) Uma vez que a aplicação Java que faz uso de threads é executada pela MVJ, o desempenho 
será o mesmo, independentemente de a CPU ter um ou mais núcleos. 
III) Threads de usuário impedem as threads daemon de serem executadas. 
 
Está correto o que se afirma em: 
I 
74. Sobre threads em Java, marque a única opção correta: 
Toda aplicação possui ao menos uma thread. 
Uma thread é uma linha de execução de programa. Mesmo quando o programador não usa threads, 
uma thread principal é criada e se torna a única thread em execução, praticamente se confundindo com 
o processo da aplicação. 
75. Sobre a programação paralela em Java, marque a única alternativa correta: 
Um método de uma classe não segura (non thread-safe) pode ser invocado de forma segura com 
synchronized. 
O modificador synchronized pode ser aplicado a um trecho de código. Nesse caso, ele admite como 
parâmetro a referência para o objeto e, em seu corpo, o método desse objeto que pode ser invocado 
de forma segura (thread-safe). 
Programação Orientada a Objeto em Java 
Marcio Quirino - 29 
 
76. Sobre semáforos em Java, analise as afirmações. 
 
I) Um semáforo é um tipo de mutex. 
II) Em um semáforo, o número de bloqueios solicitado não precisa ser igual ao número de 
liberações. 
III) Semáforos controlam se o objeto que libera o bloqueio é o mesmo que o solicitou. 
 
Está correto o que se afirma em 
II 
O semáforo controla o número de acessos disponíveis a um recurso ou uma região crítica. Uma vez 
esgotados, novas threads que solicitam acesso são colocadas em espera. Uma thread que tenha obtido 
acesso não precisa liberar o mesmo número de acessos obtidos. Se liberações parciais permitirem que 
uma thread em espera ganhe acesso, então ele é concedido. 
77. Considere o objeto thd instanciado a partir da classe MinhaThd, que estende a classe Thread. 
Qual opção mostra uma sequência que não gera erro de compilação? 
thd.start (); thd.setName ("alfa”); thd.run (); thd.getld(); 
Como o objeto já foi instanciado, o nome da thread pode ser definido a qualquer momento, devendo ser 
passada uma String. Da mesma forma, o seu identificador pode ser obtido. Assim, a ordem que esses 
métodos aparecem não faz diferença. O método run () aparece após a execução de start (), que inicia 
a thread. Assim, todos estão semântica e ordenadamente corretos. 
78. Sobre a classe thread, é correto afirmar que 
setPriority (Thread.MIN_PRIORITY -1) não causa erro de compilação. 
O método setPriority não desrespeita os limites definidos por MIN_PRIORITY e MAX_PRIORITY. 
Entretanto, a forma mostrada não incorre em erro de sintaxe. A violação do limite mínimo de prioridade 
só é detectada em tempo de execução. Por isso, essa linha compilae gera uma exceção durante a 
execução. 
79. (VUNESP - TJ/SP - Analista de Sistemas - 2012) Considere as seguintes afirmações sobre 
Threads: 
 
I. É uma forma de um processo se dividir em tarefas que podem ser executadas 
concorrentemente. 
II. Os sistemas que suportam múltiplas threads são chamados de multithread. 
III. Em hardwares com múltiplas CPUs (multi-core), as threads podem ser processadas de forma 
simultânea. 
 
Sobre as afirmações, está correto o contido em: 
I, II e III 
80. (UFF - COSEAC - Analista de Tecnologia da Informação - 2015) Na linguagem Java, uma thread 
executável pode entrar em um determinado estado por um intervalo de tempo específico, 
retornando ao estado executável quando for notificada por outra thread ou quando esse intervalo 
expirar. Essa situação caracteriza o seguinte estado: 
Espera sincronizada 
 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 30 
 
 
81. (CESGRANRIO - BNDES - Profissional Básico - Análise de Sistemas - 2013) Qual método 
pertencente à biblioteca nativa de Java não é capaz de bloquear a execução de uma thread? 
Thread.yield() 
82. (CESPE - INMETRO - Pesquisador - Ciência da Computação - 2010) Em relação ao uso de 
threads na linguagem Java, assinale a opção correta: 
O método join é utilizado para garantir que determinado thread não seja executado até que outro 
tenha entrado no estado inativo. 
83. (UFJF - COPESE - Técnico de Tecnologia da Informação - 2017) Java possui suporte à 
definição de métodos synchronized, os quais: 
Habilitam o monitor de um objeto, que garante exclusão mútua entre threads que tentam executar 
seus métodos synchronized em um dado momento. 
84. (CESGRANRIO - BNDES - Profissional Básico - Análise de Sistemas - 2011) Os usuários de um 
sistema Web, desenvolvido em Java, reclamam de erros nos dados consultados. A equipe 
técnica, ao analisar a situação, concluiu que determinado método M está sendo invocado, 
simultaneamente, por diferentes threads. 
 
Considerando que não há manipulação de locks no restante do sistema, o que pode ser feito para 
que M seja executado, em dado momento, somente por uma thread? 
Declarar o método M como synchronized. 
85. (COPESE - UFPI - Analista de Tecnologia da Informação - 2017) (Questão modificada) Sobre a 
classe thread da linguagem Java, informe se cada afirmativa a seguir é verdadeira (V) ou falsa (F). 
Em seguida, marque a opção que corresponde à sequência correta. 
( ) A classe provê diversos métodos para controle de execução de threads, sendo o método start 
responsável por iniciar a execução do thread. 
( ) O método sleep é utilizado para forçar um método a atrasar sua execução até que o método 
run de outra thread tenha completado sua execução. 
( ) O método yield, que não possui parâmetros, é um pedido do thread em execução para entregar 
o processador voluntariamente. 
V - F - V 
86. No que se refere à linguagem de programação Java, ''thread safe'' é um conceito segundo o 
qual threads concorrentes utilizam algoritmo de sincronismo para cooperarem entre si. É 
exemplo da aplicação desse conceito: 
Objetos imutáveis 
87. Em Java, quando uma thread está aguardando para obter a trava de um semáforo, ela 
encontra-se no estado: 
BLOCKED 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 31 
 
88. (AOCP - BRDE - Analista de Sistemas - 2012) Sobre Prioridade e Agendamento de Thread na 
linguagem de programação Java, analise as afirmações e assinale a(s) correta(s). 
 
I. Por padrão, toda thread recebe uma DEFAULT_PRIORITY (uma constante de 5). 
II. Toda thread do Java tem uma prioridade de thread que auxilia na ordenação em que estão 
agendadas. 
III. O agendamento de thread consegue garantir que, em diferentes sistemas operacionais, cada 
processo gastará a mesma fatia de tempo. 
IV. Em Java, cada nova thread herda a prioridade da thread que a cria. 
Apenas II e IV 
89. É um bom momento para retornarmos à questão do middleware. Analise as seguintes 
afirmações e responda qual alternativa está correta. 
 
Responsável por promover a comunicação entre o front-end e o back-end. 
No ambiente Java, temos o JEE como middleware para acesso aos diferentes tipos de bancos de 
dados. 
Permite integração de forma transparente e mudança de fornecedor exige pouca alteração de 
código. 
Somente as afirmações I e III estão corretas. 
90. Associe corretamente: 
1. JDBC-ODBC Bridge 
2. JDBC-Native API 
3. JDBC-Net 
4. Pure Java 
 
( ) Utiliza o cliente do banco de dados para a conexão. 
( ) Faz a conexão por meio do ODBC. 
( ) Com a implementação completa em Java, não precisa de cliente instalado. 
( ) Acessa servidores de middleware via Sockets, em uma arquitetura de três camadas. 
 
Assinale a alternativa que associa em ordem correta. 
2,1,3,4. 
A API Java Database Connectivity (JDBC) fornece acesso universal a dados na linguagem de 
programação Java. Usando a API JDBC, você pode acessar praticamente qualquer fonte de dados, 
desde bancos de dados relacionais até planilhas e arquivos simples. Caso utilize o cliente do BD, a 
conexão é via JDBC-Native API. Utilize ODBC para fazer uma ponte entre o BD e o aplicativo. Com o 
Pure Java, você pode usar applets e aplicativos para conexão ao BD. Para acesso a servidores em uma 
arquitetura de três camadas, utilizamos o JDBC-Net. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 32 
 
91. Analise as afirmativas a seguir. 
 
A instalação do JDK precede a instalação do Derby. 
Antes de criar um banco de dados, é preciso iniciar o servidor do JavaDB. 
Após a criação do banco dados, é possível criar as tabelas do banco de dados. 
Ao final do preenchimento dos dados, devemos clicar em OK para finalizar, e o NetBeans 
executará os comandos INSERT necessários. 
 
Está correto o que se afirmar em: 
I, II e IV apenas. 
A instalação do JDK precede a instalação do NetBeans e do Derby. O servidor do BD deve ser iniciado 
antes de qualquer uso do Derby. A criação de tabelas só é possível após a conexão do banco de dados. 
Na área para a introdução dos dados, é possível fazer a introdução manual e, ao clicar em OK, o 
NetBeans executa os comandos INSERT que vão popular a tabela do banco de dados. 
92. Considere o seguinte trecho de código. 
 List<Aluno> lista = new ArrayList<>(); 
 Class.forName("org.apache.derby.jdbc.ClientDriver"); 
 Connection c1 = DriverManager.getConnection( 
 "jdbc:derby://localhost:1527/loja", 
 "loja", "loja"); 
 Statement st = c1.createStatement(); 
 ResultSet r1 = st.executeQuery("SELECT * FROM ALUNO"); 
 while(r1.next()) 
 lista.add(new Aluno(r1.getString("MATRICULA"), 
 r1.getString("NOME"), 
 r1.getInt("ENTRADA"))); 
 r1.close(); 
 st.close(); 
 c1.close(); 
Podemos afirmar que a execução da query e a montagem da tabela em uma lista em memória são 
executadas por quais comandos? 
executeQuery e add. 
O comando st.executeQuery("SELECT * FROM ALUNO"); busca toda a tabela e traz para a memória 
principal do computador. No laço “ while(r1.next())” temos o comando “lista.add(new 
Aluno(r1.getString("MATRICULA"),” sendo executado até que toda a tabela esteja contida na lista 
denominada “lista”. 
93. O uso de comandos SQL dispersos, em meio ao código do aplicativo, diminui o reuso e 
aumenta a dificuldade de manutenção. Com base no padrão de desenvolvimento DAO, temos a 
concentração dos comandos SQL em uma única classe, em que existem métodos para o retorno 
de entidades, como obterTodos, que estão relacionados ao comando 
SELECT 
Na construção de uma classe DAO, precisamos minimamente dos métodos obterTodos, incluir, excluir 
e alterar, que estarão relacionados, respectivamente, aos comandos SELECT, INSERT, DELETE e 
UPDATE. Com base nesses métodos, temos a possibilidade de listar os registros, acrescentar um novo 
registro, alterar os dados do registro ou, ainda, remover um registro da base de dados. 
 
Programação Orientada a Objeto em JavaMarcio Quirino - 33 
 
94. A adoção do padrão DAO abriu caminho para a construção de diversos frameworks de 
persistência, que simplificam muito as operações sobre a base de dados, eliminando a 
necessidade de utilização de comandos SQL. Entre as diversas opções do mercado, temos uma 
arquitetura de persistência denominada JPA, em que as entidades devem ser gerenciadas por 
uma classe do tipo 
EntityManager. 
Os componentes do tipo EntityManager gerenciam as operações sobre as entidades do JPA, trazendo 
métodos como persist, para incluir um registro na base de dados, ou createQuery, para a obtenção de 
objetos Query, capazes de recuperar as entidades a partir da base. A função de EntityManagerFactory 
gera objetos EntityManager, enquanto Persistence faz a relação com as unidades de persistência. 
95. Analise o trecho de código e as afirmativas que seguem. 
public abstract class GenericDAO<E,K> { 
 protected Connection getConnection() throws Exception{ 
 Class.forName("org.apache.derby.jdbc.ClientDriver"); 
 return DriverManager.getConnection( 
 "jdbc:derby://localhost:1527/escola", 
 "escola", "escola"); 
} 
I. Normalmente, temos uma classe DAO para cada classe de entidade relevante para o 
sistema. 
II. DAO é um padrão de desenvolvimento, cujo objetivo é concentrar as instruções SQL 
em um único tipo de classe. 
III. Nesse código, K representa a classe da entidade e E representa a classe da chave 
primária. 
IV. Nossa classe GenericDAO é abstrata, definindo de forma genérica as assinaturas para 
os métodos que acessam o banco. 
São verdadeiras as afirmativas 
I, II e IV apenas. 
As boas práticas indicam que se deve criar uma classe DAO para cada entidade relevante. O objetivo 
é concentrar as instruções SQL em um único tipo de classe, viabilizando a mudança de fornecedor de 
banco de dados de forma simples, já que o processo de conexão pode ser encontrado em apenas um 
método, reutilizado por todo o restante do código. 
Nesse exemplo, E representa a classe da entidade e K representa a classe da chave primária. A 
afirmativa III está errada. A classe é genérica. Os descendentes de GenericDAO deverão implementar 
métodos abstratos, preocupando-se apenas com os aspectos gerais do mapeamento objeto-relacional 
e fazendo ampla utilização dos métodos utilitários. 
96. Por meio do controle transacional, é possível gerenciar blocos de operações como uma ação 
única, que pode ser desfeita pelo banco de dados sem maiores esforços em termos de 
programação. Em termos de JDBC padrão, qual classe é responsável pela transação? 
Connection 
No uso do JDBC padrão, temos a gerência de conexões por meio de Connection. Iniciada com o 
desligamento do commit automático, a transação deve ser confirmada por meio do método commit de 
Connection, enquanto o uso de rollback desfaz as operações. 
 
Programação Orientada a Objeto em Java 
Marcio Quirino - 34 
 
97. Analise o trecho de código e as afirmativas que seguem. 
public class SistemaEscola { 
 private final AlunoDAO dao = new AlunoDAO(); 
 private static final BufferedReader entrada = 
 new BufferedReader(new InputStreamReader(System.in)); 
 private void exibir(Aluno aluno){ 
System.out.println("Aluno:"+aluno.nome+"\nMatricula: "+aluno.matricula+"\tEntrada: 
"+aluno.ano+"\n=========================="); 
 } 
 public void exibirTodos(){ 
 dao.obterTodos().forEach(aluno->exibir(aluno)); 
 } 
} 
I. O método exibirTodos utiliza notação lambda para percorrer toda a coleção de alunos. 
II. O sistema escola não apresenta uma instância de classe DAO. 
III. Temos uma instância estática de BufferedReader encapsulando o teclado, com o nome 
entrada. 
São verdadeiras as afirmativas 
I e III apenas. 
98. Ferramentas de produtividade sempre devem ser observadas, pois nos permitem eliminar 
tarefas repetitivas e obter maior resultado em menor tempo. Com o NetBeans é possível gerar as 
entidades JPA a partir de um banco de dados já constituído, sendo necessário apenas 
conhecer a conexão JDBC com o banco de dados. 
Utilizando o NetBeans, temos a opção de criação Entity Classes from Database, em que podemos 
selecionar as tabelas de determinada conexão e deixar que a IDE gere todo o código necessário para 
as entidades. Tudo que precisamos para recuperar as tabelas é conhecer a conexão JDBC com o banco 
de dados. 
99. Analise o trecho de código e as afirmativas a seguir em relação ao JPA. 
public class SistemaEscola { 
 private final AlunoJpaController dao = new AlunoJpaController( 
 Persistence.createEntityManagerFactory("ExemploEntidadeJPAPU")); 
 private static final BufferedReader entrada = 
 new BufferedReader(new InputStreamReader(System.in)); 
 private void exibir(Aluno aluno){ 
 System.out.println("Aluno: "+aluno.getNome()+ 
 "\nMatricula: "+aluno.getMatricula()+ 
 "\tEntrada: "+aluno.getEntrada()+ 
 "\n=========================="); 
 } 
I. Persistence Unit é um XML que configura a conexão com o banco de dados. 
II. O JpaController é iniciado pelo EntityManagerFactory. 
III. O NetBeans não possui um gerador automático de entidades JPA. 
IV. Todas as operações para manipulação de dados são feitas a partir do EntityManager. 
São verdadeiras as afirmativas: 
I, II e IV apenas 
Persistence Unit é um XML que possui o driver para a conexão com o banco de dados. O 
EntityManagerFactory é o iniciador do JpaController. Você deve usar um EntityManagerFactory para 
criar instâncias de um EntityManager. Uma das ferramentas mais interessantes do NetBeans é o 
gerador automático de entidades JPA. O EntityManager é o serviço central para todas as ações de 
persistência. Você deve obter acesso de um EntityManager para poder inserir, atualizar, remover e 
consultar uma entidade no seu banco de dados. 
Programação Orientada a Objeto em Java 
Marcio Quirino - 35 
 
100. Após instanciar os drivers JDBC no aplicativo Java, precisamos estabelecer a conexão 
com o banco de dados e, a partir da obtenção da conexão, instanciar os objetos que serão 
responsáveis por executar as instruções SQL. Selecione a classe, pertencente à API JDBC, que 
administra e seleciona o driver adequado para iniciar uma conexão com o banco de dados na 
linguagem Java. 
DriverManager 
101. Com o surgimento do DAO foi possível padronizar a forma com que as operações sobre 
o banco de dados são implementadas, o que levou à definição de ferramentas como o JPA, onde 
a obtenção de uma coleção de entidades, a partir da consulta através de sintaxe JPQL, ocorre 
com base no método: 
getResultList 
102. Entre as ferramentas de produtividade do NetBeans, temos uma que permite gerar 
classes de controle JPA, de forma automatizada, a partir das entidades, concentrando todos os 
métodos necessários para encapsular as operações DML. No caso da remoção de um registro, 
qual seria o método oferecido pela classe de controle? 
destroy 
103. Ao utilizar JPA, no ambiente do NetBeans, temos muitas ferramentas voltadas para a 
produtividade, onde uma delas permite criar as entidades do JPA a partir da conexão ao banco 
de dados via JDBC. Qual opção está sendo descrita aqui? 
Entity Classes from Database 
104. Atualmente temos diversas opções de sistemas para gerenciamento de bancos de 
dados (SGBDs), como Oracle e SQL Server, por exemplo. A grande maioria dos sistemas de 
gerenciamento exige a instalação de um servidor apropriado e uma sequência de ações de 
configuração, mas a plataforma Java traz uma opção de banco de dados relacional simples, na 
distribuição do JDK, que não precisa de um servidor, sendo totalmente construído na linguagem 
Java. Qual o nome desse banco de dados? 
Derby 
105. O controle transacional é fundamental para a garantia de consistência nos dados ao 
lidar com múltiplas manipulações sucessivas. Por padrão, no JDBC, cada operação DML ocorre 
em uma transação pontual, mas o comportamento pode ser modificado, com o uso de comandospara confirmar ou cancelar o grupo de operações, quando desligamos o modo automático, o que 
é viabilizado pelo método: 
setAutoCommit 
106. Quando adotamos o mapeamento objeto-relacional com base no JPA, temos apenas 
um arquivo de configuração para definir as conexões com o banco de dados e qual driver de 
persistência será utilizado. Qual o nome do arquivo? 
persistence.xml 
107. O padrão DAO surgiu para resolver um problema recorrente em sistemas cadastrais, 
onde comandos SQL dispersos, em meio ao código do aplicativo, diminuem o reuso e aumentam 
a dificuldade de manutenção. Esse padrão tem como objetivo concentrar os comandos SQL em 
classes específicas, onde o método alterar, por exemplo, receberia uma entidade como parâmetro 
e invocaria um comando do tipo: 
UPDATE 
Programação Orientada a Objeto em Java 
Marcio Quirino - 36 
 
 
108. Trabalhando com JPA, as instruções DML ficam transparentes para o programador, 
sendo executadas a partir de métodos específicos da classe EntityManager. Qual seria o método 
utilizado para encapsular uma instrução do tipo INSERT? 
persist 
109. Após instanciar um executor de instruções SQL, podemos iniciar comandos DML ou 
seleções sobre os dados, onde, no caso das consultas, elas retornam os valores em uma 
estrutura específica do Java. Selecione a interface de tabela dinâmica, que contém os resultados 
de uma consulta SQL realizada a partir da API JDBC, na linguagem Java. 
ResultSet 
110. De forma geral, quando criamos aplicativos para acesso ao banco de dados, com base 
no JDBC, temos instruções SQL em meio ao código Java, onde algumas são comandos para 
manipulação de dados (DML) e outras fazem consultas aos dados armazenados. Para efetivar um 
comando DML, como Insert ou Delete, qual método deve ser utilizado? 
executeUpdate 
111. Considere as linhas apresentadas a seguir, extraídas de um método em uma aplicação 
Java SE que acessa um banco de dados MySQL. 
 
Ao executar as linhas de código podem ocorrer, respectivamente, as seguintes exceções: 
ClassNotFoundException e SQLException 
112. Após instanciar um executor de instruções SQL, podemos iniciar comandos DML ou 
seleções sobre os dados, onde, no caso das consultas, elas retornam os valores em uma 
estrutura específica do Java. Selecione a interface de tabela dinâmica, que contém os resultados 
de uma consulta SQL realizada a partir da API JDBC, na linguagem Java. 
ResultSet 
113. (VUNESP - 2020 - FITO - Técnico em Gestão - Informática) No Java, a classe que 
implementa uma lista ordenada que permite a inclusão de elementos nulos (null) é: 
ArrayList 
114. (CONSULPLAN - 2017 - Câmara de Nova Friburgo/RJ - Oficial Administrativo − 
Adaptada). Na linguagem de programação Java, o conceito de um objeto ter a capacidade de ser 
referenciado de diversas formas é conhecido como: 
Polimorfismo 
115. Considerando uma aplicação Java que gerencia informações de empregados em uma 
empresa, onde cada empregado é um objeto com atributos como nome, cargo e salário. 
 
Qual característica da programação orientada a objetos permite proteger os dados sensíveis de 
um empregado nesta aplicação? 
Encapsulamento. 
Programação Orientada a Objeto em Java 
Marcio Quirino - 37 
 
116. Ano: 2009 Banca: INSTITUTO CIDADES Órgão: UNIFESP Prova: INSTITUTO CIDADES - 
2009 - UNIFESP - Analista de Tecnologia da Informação (ADAPTADA). Acerca do método equals, 
analise as seguintes afirmativas: 
 
I. O equals recebe um Object como argumento e verifica se ele mesmo é igual ao Object recebido 
para retornar um boolean exclusivamente false. 
II. Um exemplo do uso do equals é para datas. Se usarmos criar duas datas, isto é, dois objetos 
diferentes, contendo 18/08/2009, ao comparar com o ==, receberá false, pois são referências para 
objetos diferentes. 
III. Quando comparamos duas variáveis referência no Java, o == verifica se as duas variáveis se 
referem ao mesmo objeto. 
 
Podemos afirmar corretamente que: 
As afirmativas II e III estão corretas. 
117. Ano: 2010 Banca: FDC Órgão: MAPA Prova: FUNDAÇÃO DOM CINTRA - 2010 - MAPA - 
Analista de Sistemas. Analyse as seguintes sentenças em relação à linguagem Java: 
 
I. Java suporta diretamente somente herança simples, entretanto ela permite uma versão de 
herança múltipla com a implementação da classe virtual abstract. 
II. Uma classe em Java pode implementar uma ou mais interfaces, para isso basta anexar à 
definição da classe a palavra-chave implements seguida das interfaces separadas por vírgula. 
III. Em Java, quando um método é definido como final, ele pode ser sobreposto somente em 
classes descendentes. 
 
Em relação às sentenças supracitadas, pode-se afirmar que apenas: 
II é verdadeira

Mais conteúdos dessa disciplina