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