Java + Devops (TCU) Flashcards

(95 cards)

1
Q
  1. Tendo como referência a linguagem de rogramação Java, julgue o item que se segue.

A linha

String nome = request.getParameter(“nome”);

pode ser alterada para

String nome = request.getAttribute(“nome”);

sem perda de funcionalidade no código.

A

A afirmação de que a linha

```java
String nome = request.getParameter(“nome”);
~~~

pode ser alterada para

```java
String nome = request.getAttribute(“nome”);
~~~

sem perda de funcionalidade é incorreta.

Diferenças:

  1. request.getParameter("nome"):
    • Obtém valores de parâmetros da requisição HTTP, como os enviados por formulários.
    • Retorna uma String que representa o valor do parâmetro.
  2. request.getAttribute("nome"):
    • Obtém atributos definidos no escopo da requisição, geralmente configurados no lado do servidor.
    • Não se refere a dados enviados pelo cliente, mas a informações passadas entre componentes da aplicação.

Considerações:

  • Contexto de Uso:
    • Use getParameter() para dados de entrada do usuário.
    • Use getAttribute() para acessar dados definidos no servidor.
  • Consequências:
    • Substituir getParameter() por getAttribute() pode resultar em null, causando falhas se não houver um atributo correspondente definido.

Conclusão:

Não se deve trocar request.getParameter() por request.getAttribute() sem considerar o contexto, pois isso pode levar a resultados inesperados.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q
  1. (CESPE - DP DF - 2022) No Java 8, o uso do método map() permite aplicar uma função a todos os elementos de um stream.
A

Stream map (Function mapper) retorna um stream que consiste nos resultados da aplicação da função dada aos elementos desse stream.

Stream map (Mapeador de funções) é uma operação intermediária.

As operações intermediárias são invocadas em uma instância do Stream e, depois que terminam seu processamento, fornecem uma instância do Stream como saída.

Gabarito: Correto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q
  1. (CESPE - DP DF– 2022) Quando a mensageria é utilizada com linguagem Java, as requisições
    são processadas exclusivamente de forma síncrona.
A

A afirmação de que, quando a mensageria é utilizada com linguagem Java, as requisições são processadas exclusivamente de forma síncrona é incorreta.

Explicação:

  1. Mensageria: Refere-se a sistemas que permitem a comunicação entre diferentes componentes de uma aplicação através do envio de mensagens. Isso é comum em arquiteturas distribuídas.
  2. Síncrono vs. Assíncrono:
    • Síncrono: O remetente aguarda uma resposta do destinatário antes de continuar a execução.
    • Assíncrono: O remetente envia a mensagem e não aguarda uma resposta imediata, permitindo que continue sua execução.
  3. Mensageria em Java:
    • Em sistemas de mensageria, como Java Message Service (JMS), é possível implementar tanto a comunicação síncrona quanto a assíncrona.
    • Com JMS, você pode usar Queue (fila) para comunicação assíncrona, onde o remetente não espera uma resposta imediata, e Topic para publicar e assinar mensagens, também permitindo o processamento assíncrono.

Conclusão:
Portanto, a mensageria em Java não se limita ao processamento síncrono; ela pode ser configurada para operar de maneira assíncrona, dependendo das necessidades da aplicação.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q
  1. (CESPE – SEED PR –2021) Java é uma linguagem construída a partir de um legado das linguagens C e C++.

No entanto, ela apresenta características únicas que a diferem das demais, como:

I. o applet, que é um tipo especial de programa Java projetado para ser transmitido pela
Internet e executado por um navegador web compatível com Java.

II. a saída de seu compilador não gera um código executável e, sim, um bytecode.

III. o fato de um programa Java ser executado somente pela Java virtual machine (JVM).

Assinale a opção correta.

a) Apenas o item I está certo.
b) Apenas o item II está certo.
c) Apenas os itens I e III estão certos.
d) Apenas os itens II e III estão certos.
e) Todos os itens estão certos.

A

Pessoal, perfeita a assertiva I:

applet é um tipo especial de programa Java projetado para ser transmitido pela Internet e executado por um navegador web compatível com Java.

A assertiva II também está de acordo com o que vimos! O compilador transforma o arquivo .java em código de máquina e em um arquivo .class, também chamado bytecode.

Por fim, a assertiva III também está correta, exatamente como dissemos anteriormente: O bytecode é um código intermediário, que é posteriormente interpretado e executado por uma Java Virtual Machine (JVM).

O código fonte é entendido pelo sistema operacional, mas varia em cada um deles.

Quando você usa o bytecode, através do .class você consegue rodar facilmente em qualquer sistema operacional, sem ter que usar o código-fonte.

Gabarito: Letra E

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q
  1. (CESPE – PGDDF – 2021) Julgue o item subsecutivo, a respeito de lógica e de estrutura de programação.

função avaliar( a, b )
início
ma <-a;
se (ma < b) então ma <- b;
me <-a;
se (me > b) então me <- b;
resultado <- ( ma % me );
se (resultado = 0)
então retorne me
senão avaliar(me, ma)
fim
escreva avaliar (120,30);

O resultado do pseudocódigo precedente será 120.

A

O item está incorreto. Vamos analisar o pseudocódigo apresentado para entender o que ele realmente faz.

Análise do Pseudocódigo

  1. Inicialização:
    • ma recebe o valor de a (120).
    • me recebe o valor de b (30).
  2. Primeiro se:
    • se (ma < b) então ma <- b;
    • Isso não é verdade, pois 120 não é menor que 30, então ma permanece 120.
  3. Segundo se:
    • se (me > b) então me <- b;
    • Isso não é verdade, pois 30 não é maior que 30, então me permanece 30.
  4. Cálculo do resultado:
    • resultado <- (ma % me);
    • Aqui, resultado será 120 % 30, que é 0.
  5. Verificação do resultado:
    • se (resultado = 0) então retorne me
    • Como resultado é 0, a função retorna o valor de me, que é 30.

Conclusão

Portanto, a chamada escreva avaliar(120, 30); resulta em 30, não 120.

O resultado final é que o pseudocódigo retorna 30, tornando a afirmação do item falsa.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q
  1. (CESPE – TJ-RJ – 2021) Considere o trecho de código a seguir, de um programa escrito na
    linguagem Java.

Com relação aos trechos de código precedentes, é correto afirmar que

a) o parâmetro this, na linha 7 da classe CarroEsportivo, é uma palavra reservada usada para mostrar que está sendo feita referência ao atributo privado marca da classe Carro.

b) o comando this, na linha 7 da classe CarroEsportivo, é uma palavra reservada que faz referência ao atributo público marca da classe Carro.

c) a instrução super, na linha 6 da classe CarroEsportivo, é usada para importar o pacote
atributos privados da classe Carro, a fim de se tornarem públicos para a classe CarroEsportivo.

d) a instrução super, na linha 6 da classe CarroEsportivo, permite à classe CarroEsportivo acessar os atributos privados da classe Carro.

e) a instrução super, na linha 6 da classe CarroEsportivo, pode permitir à classe CarroEsportivo acessar atributos públicos da classe Carro.

A

Vejamos cada uma das alternativas a partir da análise do código apresentado.

A letra A está errada, pois diz que o parâmetro this, na linha 7 da classe CarroEsportivo, é uma palavra reservada usada para mostrar que está sendo feita referência ao atributo privado marca da classe Carro, sendo que o parâmetro this faz referência ao atributo privado marca da classe CarroEsportivo.

A letra B também está errada porque o comando this, na linha 7, faz referência a marca da classe CarroEsportivo.

Já a alternativa C está errada pois não é possível importar o pacote atributos privados da classe Carro, a fim de se tornarem públicos dado que eles estão com o modificador private.

A alternativa D também está errada, assim como a anterior, pois não é possível acessar
atributos privados, mesmo que seja uma classe filha.

Por fim, a alternativa e é o nosso gabarito!

De fato, a instrução super chama membros da classe-pai.

Ou seja, é uma variável de referência usada para referenciar o objeto da classe pai.

Gabarito: Letra E

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q
  1. (CESPE – PGDF – 2021) Com relação a servidores de aplicação e seus serviços e a teoria de becapes, julgue o item a seguir.

Apenas uma única instância do Tomcat pode existir em uma única JVM (Java virtual machine);
no entanto, é possível ter múltiplas instâncias em uma mesma máquina virtual, desde que em processos Java separados, em execução em portas separadas.

A

A afirmação é parcialmente correta. Aqui está a análise:

  1. Uma única instância do Tomcat por JVM: É verdade que em uma única JVM pode haver apenas uma instância do Tomcat em execução. Isso significa que todos os aplicativos implantados dentro dessa instância compartilham a mesma memória e recursos.
  2. Múltiplas instâncias em processos separados: A parte que diz que é possível ter múltiplas instâncias em uma mesma máquina virtual, desde que em processos Java separados e em execução em portas separadas, é imprecisa. Na verdade, para ter várias instâncias do Tomcat, cada uma precisa ser executada em uma JVM separada (não apenas em processos separados). Cada instância do Tomcat deve ser iniciada em uma JVM diferente, geralmente em portas diferentes.

Portanto, a afirmação original pode levar a confusões. Se fosse reformulada para esclarecer que cada instância deve estar em uma JVM separada, seria mais precisa.

Gabarito: Errado.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q
  1. (CESPE -– Ministério da Economia – 2020)

Em Java 8, o método de limite de fluxo tem como objetivo eliminar elementos com base em um critério.

A

Na verdade, o método limit é utilizado para limitar a quantidade de elementos em um fluxo.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q
  1. (CESPE – Ministério da Economia – 2020) Uma expressão lambda é usada principalmente para definir a implementação procedural de uma interface associativa.
A

Uma expressão lambda é usada principalmente para definir a implementação procedural de uma interface funcional.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q
  1. (CESPE – Pref. Barra dos Coqueiros – 2020) A máquina virtual do Java (JVM) utiliza uma tecnologia especificamente para aumentar o desempenho da aplicação, identificando códigos que serão muito executados, normalmente dentro de loops.

Essa tecnologia é chamada de

a) hotspot.
b) bytecode.
c) compilação estática.
d) JRE (Java Runtime Environment).
e) JDK (Java Development Kit).

A

A opção correta é:

a) hotspot.

Justificativa:
A HotSpot é a tecnologia utilizada pela JVM (Java Virtual Machine) para melhorar o desempenho da execução de aplicações Java. Ela identifica partes do código que são executadas com frequência, como loops, e aplica técnicas de otimização, como a compilação JIT (Just-In-Time), transformando o bytecode em código de máquina nativo, o que acelera a execução da aplicação.

Gabarito: A

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q
  1. (CESPE – STM – 2018) Os membros de uma classe definidos como PUBLIC não podem ser acessados ou usados por nenhuma outra classe.
A

A afirmativa está incorreta.

No contexto da linguagem Java, membros de uma classe (atributos e métodos) que são definidos como public podem ser acessados e usados por qualquer outra classe, tanto dentro do mesmo pacote quanto em pacotes diferentes. O modificador de acesso public garante que os membros da classe sejam visíveis em todas as outras classes, independentemente de onde elas estejam.

Portanto, membros public podem ser acessados por outras classes, o que torna a afirmação errada.

Gabarito: Errado.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q
  1. (CESPE – CGM-Joao Pessoa– 2018) A JME oferece um ambiente robusto e flexível para aplicativos executados em dispositivos móveis e integrados cuja capacidade de memória, de vídeo e de processamento são limitados, tais como set-top boxes e reprodutores de discos blu-ray.
A

A afirmativa está correta.

A Java ME (Micro Edition) é uma plataforma da tecnologia Java que oferece um ambiente robusto e flexível para o desenvolvimento de aplicativos voltados para dispositivos com recursos limitados, como memória, vídeo e processamento, incluindo dispositivos móveis, integrados, set-top boxes e reprodutores de discos Blu-ray. A Java ME foi projetada para rodar em dispositivos com capacidades mais restritas em comparação com os que utilizam Java SE (Standard Edition).

Gabarito: Certo.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q
  1. (CESPE – TER-TO– 2017) Na orientação a objetos, a alteração do comportamento dos métodos herdados das superclasses para um comportamento mais específico nas subclasses, de forma a se criar um novo método na classe filha que contém a mesma assinatura e o mesmo tipo de retorno, relaciona-se a

a) sobrecarga.
b) overloading.
c) portabilidade.
d) abstração.
e) sobrescrita.

A

A opção correta é e) sobrescrita.

A sobrescrita de métodos (overriding) ocorre quando uma subclasse redefine um método herdado de sua superclasse, mantendo a mesma assinatura (nome do método, parâmetros) e o mesmo tipo de retorno. Isso permite que a subclasse forneça um comportamento específico para o método que é diferente do comportamento definido na superclasse.

Essa técnica é uma das formas de polimorfismo na orientação a objetos, onde o método da subclasse será invocado em vez do método da superclasse, quando a instância for de um objeto da subclasse.

Gabarito: e) sobrescrita.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q
  1. (CESPE – TCE-PA – 2016) O fato de as expressões lambda terem sido excluídas do Java 8 possibilitou que a linguagem Java ficasse mais flexível e que a implementação de seu código se tornasse mais precisa.
A

A afirmativa está incorreta.

As expressões lambda foram, na verdade, introduzidas no Java 8, e sua inclusão tornou a linguagem mais flexível e permitiu escrever código de maneira mais concisa e funcional.

A introdução de lambdas facilitou a manipulação de coleções e a implementação de interfaces funcionais, tornando o código mais expressivo.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q
  1. (CESPE – FUNPRESP-JUD – 2016) Para lidar com um conjunto de objetos em JSon, é necessário utilizar um array que permita realizar, em uma única operação, a carga de todos os objetos.
A

Não é necessário utilizar um array.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q
  1. (CESPE – TRE-PI – 2016) A linguagem Java foi, originalmente, desenvolvida para

a) permitir a comunicação entre aparelhos domésticos e computadores.

b) traduzir fórmulas matemáticas utilizando-se cartões perfurados.

c) processar valores inteiros, em um ambiente negócios, em computadores de grande porte.

d) trabalhar com inteligência artificial por meio de uma abordagem puramente lógica.

e) demonstrar a viabilidade da implementação da álgebra relacional de dados.

A

A história de Java começou a ser escrita quando James Gosling, Patrick Naughton e Mike Sheridan se uniram a dois fundadores da Sun, Andy Bechtolsheim e Bill Joy, para pensar sobre a nova onda
do mundo digital.

Eles não demoraram muito para concluir que seria a convergência de
computadores aos dispositivos e eletrodomésticos utilizados no dia a dia, tudo interconectado e remotamente controlado.

Uma questão sobre “curiosidades”, temos como gabarito a letra A, já
que, Java foi, originalmente, desenvolvida para permitir a comunicação entre computadores aos dispositivos e eletrodomésticos.

Gabarito: Letra A

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q
  1. (CESPE – TER-GO – 2015) Em um grupo do tipo Array, podem-se armazenar dados de diferentes tipos.
A

Errado pessoal! Um Array é um objeto contêiner que contém um número fixo de valores de um único tipo.

O comprimento de um array é estabelecido quando o array é criado.

Após a criação, seu comprimento é fixo.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q
  1. (CESPE – TJDFT – 2015) Na tecnologia JSP (Java Server Pages), cada documento é convertido pelo contêiner JSP em um servlet, o que ajuda a separar a apresentação do conteúdo.
A

Perfeito, pessoal! O JSP é uma ferramenta baseada em Java para criação de páginas dinâmicas para uso na web.

Com isso, cada parte do documento é convertida, através de um Contêiner, como um TomCat por exemplo, em um Servlet.

Gabarito: Correto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q
  1. (CESPE – SERPRO – 2013) A tecnologia JSE (Java Small Editon) utilizada pela plataforma iOS permite o desenvolvimento de aplicações para todos os seus dispositivos, como estações
    gráficas, iPad, iPod, entre outros.
A

Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos compactos ou móveis, como smartphones, tablets, controles remotos, etc.

Permite o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um dispositivo de propósito específico, desempenhando alguma tarefa útil.

Em geral, possuem limitações de recursos como memória ou
processamento. Conforme vimos em aula, a questão está cheia de erros!

Primeiro, JSE é a sigla de Java Standard Edition.
Segundo, a tecnologia proposta no item é o JME!

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q
  1. (CESPE – MPOG – 2013) O JME foi criado para trabalhar com ambientes de programação multiprocessados em ambientes distribuídos.
A

Java Micro Edition (Java ME): trata-se do padrão aplicado a dispositivos compactos ou móveis, como smartphones, tablets, controles remotos, etc.

Permite o desenvolvimento de softwares embarcados, i.e., aplicações que rodam em um dispositivo de propósito específico,
desempenhando alguma tarefa útil.

Em geral, possuem limitações de recursos como memória ou
processamento.

Java Enterprise Edition (Java EE): trata-se do padrão para desenvolvimento de sistemas corporativos, voltada para aplicações multicamadas, baseadas em componentes executados em servidores de aplicações – ele inclui o Java SE.

Contém bibliotecas para acesso a base de dados, RPC, CORBA, entre outras. As aplicações podem ou não estar na internet.

Conforme vimos em aula, Java ME possui diversas limitações de recursos.

Na verdade, é o Java EE que é ideal para ambientes distribuídos.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q
  1. (CESPE – ANTT – 2013) JSE, JME, JEE e JCE são edições da tecnologia Java voltadas para o desenvolvimento de aplicações para desktop/servidores, dispositivos móveis, ambientes corporativos e ambientes em nuvem, respectivamente.
A

A afirmação está incorreta.

As edições da tecnologia Java são voltadas para diferentes tipos de ambientes, mas a descrição na questão contém erros. Veja a correção para cada uma das edições mencionadas:

  • JSE (Java Standard Edition): Voltada para o desenvolvimento de aplicações para desktop e servidores, provendo a base para a linguagem Java e suas bibliotecas fundamentais.
  • JME (Java Micro Edition): Voltada para o desenvolvimento de aplicações em dispositivos móveis e embarcados, com recursos limitados.
  • JEE (Java Enterprise Edition): Focada no desenvolvimento de aplicações empresariais de grande porte, geralmente distribuídas, em ambientes corporativos, como sistemas web e transacionais.
  • JCE (Java Cryptography Extension): Não é uma edição voltada para ambientes em nuvem, mas sim uma extensão da plataforma Java que fornece bibliotecas para criptografia, assinaturas digitais e outros recursos de segurança.

Portanto, a afirmação falha ao descrever corretamente o JCE e ao associar cada edição ao ambiente mencionado.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q
  1. (CESPE – TRT 10ª Região – 2013) O uso de System.out.println() possibilita a exibição de textos; para a exibição de valores de variáveis, é necessário utilizar showAttributes().
A

Errado! O System.out.println() pode perfeitamente ser utilizada para exibir variáveis.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q
  1. (CESPE – TRT 10ª Região – 2013) No código abaixo, caso a variável salário assuma o valor igual a 5000, o valor b da variável avaliação será atribuído corretamente.

if (salario > 10000) {
avaliacao=”a”;
else
avaliacao=”b”;
}

A

Como o valor apresentado (5.000) é menor que 10.000, a assertiva está correta!

Gabarito: Correto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q
  1. (CESPE – TRT 10ª Região – 2013) A execução do código abaixo informará a classe do objeto que foi atribuído à variável de nome var4.

String nome = var4.getname();

A

Errado, na verdade, getname retorna o nome do objeto.

O código apresentado pelo item declara e inicializa uma variável nome, do tipo String.

O valor que essa variável receberá é o que for retornado pelo método getname, invocado sobre o objeto var4.

Apenas com as informações trazidas, é impossível saber qual a classe à qual o objeto var4 pertence.

Gabarito: Errado

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
28. (CESPE – MPU – 2013) O tratamento de exceção em Java consiste no bloco try-catch-finally. O bloco finally sempre executa ao término do bloco try.
Aqui está um resumo sobre os blocos **try**, **catch** e **finally** em Java: - **try**: O bloco `try` contém o código que pode lançar exceções. É usado para "tentar" executar um conjunto de instruções que podem gerar erros em tempo de execução. - **catch**: O bloco `catch` é usado para capturar e tratar as exceções que foram lançadas no bloco `try`. Ele especifica o tipo de exceção que pode ser tratada e define o que deve ser feito se essa exceção ocorrer. - **finally**: O bloco `finally` é opcional e contém código que será executado **sempre**, independentemente de uma exceção ter sido lançada ou não. Ele é geralmente usado para liberar recursos, como fechar arquivos ou conexões de banco de dados. Exemplo: ```java try { // Código que pode lançar uma exceção } catch (ExceptionType e) { // Tratamento da exceção } finally { // Código que sempre será executado } ``` A afirmação está **parcialmente correta**, mas precisa de uma ressalva. O bloco `finally` em Java **geralmente** sempre é executado ao final do bloco `try`, **independentemente** de uma exceção ter sido lançada ou não, exceto em alguns casos específicos, como quando o programa é encerrado abruptamente (por exemplo, com um `System.exit()`), ou se ocorrer uma falha no ambiente da JVM. Portanto, a parte correta da afirmação é que o `finally` tende a ser sempre executado, mas há situações excepcionais em que ele pode não ser executado. Gabarito: Errado
26
29. (CESPE – MPU – 2013) Se a thread executando um código try ou catch for interrompida ou abortada, o bloco finally poderá não ser executado, apesar de a aplicação como um todo continuar.
Aqui está um resumo sobre os blocos **try**, **catch** e **finally** em Java: - **try**: O bloco `try` contém o código que pode lançar exceções. É usado para "tentar" executar um conjunto de instruções que podem gerar erros em tempo de execução. - **catch**: O bloco `catch` é usado para capturar e tratar as exceções que foram lançadas no bloco `try`. Ele especifica o tipo de exceção que pode ser tratada e define o que deve ser feito se essa exceção ocorrer. - **finally**: O bloco `finally` é opcional e contém código que será executado **sempre**, independentemente de uma exceção ter sido lançada ou não. Ele é geralmente usado para liberar recursos, como fechar arquivos ou conexões de banco de dados. Exemplo: ```java try { // Código que pode lançar uma exceção } catch (ExceptionType e) { // Tratamento da exceção } finally { // Código que sempre será executado } ``` A instrução try permite que você defina um bloco de código para ser testado quanto a erros enquanto está sendo executado. A instrução catch permite definir um bloco de código a ser executado, caso ocorra um erro no bloco try. Por fim, a instrução finally permite que você execute código, depois do try...catch, independentemente do resultado. Mas há casos em que o finally não é executado. Questão correta! Gabarito: Correto
27
30. (CESPE – TRE-MA – 2009) Para definição e manipulação de uma exceção em Java, devem constar no programa, obrigatoriamente, os termos: a) try e catch. b) try e finally. c) finally e catch. d) finally e retry. e) try e retry.
Pessoal, o correto é Try e catch. Gabarito: Letra A
28
31. (CESPE – SERPRO – 2008) A linguagem Java, orientada a objetos, tem como característica ser compilada em um código executado em máquina virtual.
A afirmação está **correta**. A linguagem Java é orientada a objetos e tem como uma de suas principais características a compilação do código-fonte em **bytecode**. Esse bytecode não é executado diretamente pelo sistema operacional ou processador, mas sim pela **Máquina Virtual Java (JVM)**. Isso permite que o mesmo código Java seja executado em diferentes plataformas, desde que haja uma JVM adequada, garantindo a portabilidade do código (o famoso conceito de "escreva uma vez, execute em qualquer lugar"). Gabarito: Correto
29
32. (CESPE – TRT - 5ª Região – 2008) A instrução import Java.awt.* indica que o programa irá utilizar componentes gráficos.
A afirmação está **correta**. A instrução `import java.awt.*;` em Java indica que o programa utilizará classes do pacote **AWT (Abstract Window Toolkit)**, que contém componentes gráficos e ferramentas para construção de interfaces gráficas de usuário (GUI), como janelas, botões, e outros elementos gráficos. Portanto, a instrução permite o uso de componentes gráficos, como o próprio texto afirma. Gabarito: Correto
30
33. (CESPE – TRT - 5ª Região – 2008) Em Java, os métodos public de uma classe são utilizados pelos clientes da classe para manipular dados armazenados em objetos dessa classe.
Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses elementos. Vamos vê-los agora em mais detalhes:: essa instrução indica que a classe, método ou atributo assim declaradas podem ser acessadas em qualquer lugar e a qualquer momento da execução do programa – é o modificador menos restritivo. Perfeito, são públicos para toda e qualquer classe. Gabarito: Correto
31
1. (FGV – CGU – 2022) Observe o trecho de código a seguir. 1 import java.io.*; 2 3 interface Segunda { public void segunda();} 4 interface Terca { public void terca();} 5 interface Quarta extends Segunda, Terca { public void quarta();} 6 7 class Quinta implements Segunda { 8 public void segunda(){System.out.println("Segunda");} 9 } 10 11 class Sexta extends Quinta implements Quarta { 12 public void segunda(){System.out.println("Segunda!");} 13 public void terca(){System.out.println("Segunda!!");} 14 public void quarta(){System.out.println("Segunda!!!");} 15 } 16 17 public class teste 18 { 19 public static void main( String[] args ) 20 { 21 Quinta dia = (Quinta) new Sexta(); 22 dia.segunda(); 23 } 24 } A saída produzida pela execução do código é: a) Erro de compilação na linha 5 b) Segunda c) Segunda! d) Segunda!! e) Segunda!!!
A resposta correta é a **letra C) Segunda!** Aqui está a explicação: 1. A classe `Sexta` estende `Quinta` e implementa a interface `Quarta`, que por sua vez estende as interfaces `Segunda` e `Terca`. Isso significa que `Sexta` deve implementar os métodos das três interfaces, o que ela faz. 2. Na linha 21, o código cria uma instância da classe `Sexta`, mas o objeto é referenciado como `Quinta`, ou seja, ele é tratado como um objeto da superclasse `Quinta` (polimorfismo). 3. Ao chamar `dia.segunda()` na linha 22, o método `segunda()` da **classe `Sexta`** é executado, porque em Java, mesmo que a referência seja de uma classe pai (`Quinta`), a versão do método da classe filha (`Sexta`) será chamada devido ao **polimorfismo**. 4. A versão de `segunda()` em `Sexta` imprime `"Segunda!"`. Portanto, a saída do programa será **"Segunda!"**. Gabarito: C
32
2. (FGV – TJDFT – 2022) Observe as classes abaixo descritas na linguagem de programação Java. public class DocumentoProcesso extends Object { private String docNumero; private int classificacao; public DocumentoProcesso (String docNumero, int classificacao){ if (classificacao < 1) throw new IllegalArgumentException ( "A classificação do documento deve ser no mínimo 1."); this.docNumero = docNumero; this.classificacao = classificacao; } public String getDocNumero() { return docNumero; } public int getClassificacao() { return classificacao; } public void setDocNumero(String docNumero) { this.docNumero = docNumero; } public void setClassificacao(int classificacao) { this.classificacao = classificacao; } public int promove() { return classificacao + 1; } } public class Oficio extends DocumentoProcesso { private int precedencia; public Oficio (String docNumero, int classificacao, int precedencia) {super(docNumero,classificacao); this.precedencia = precedencia; } public int getPrecedencia() { return precedencia; } public void setPrecedencia(int precedencia) { this.precedencia = precedencia; } @Override public int promove() { return precedencia + 1; } } Com base nos conceitos de orientação a objetos, é correto afirmar que: a) os atributos private de DocumentoProcesso são acessíveis por Oficio; b) a anotação @Override indica que o método promove() é abstrato e polimórfico; c) a classe Oficio representa uma herança múltipla das classes DocumentoProcesso e Object; d) a classe Oficio é composta pela classe DocumentoProcesso, permitindo que uma instância da classe Oficio faça referências a instâncias da classe DocumentoProcesso; e) os métodos getDocNumero() e setDocNumero() da classe DocumentoProcesso encapsulam o atributo docNumero e asseguram que os objetos da classe mantenham estados consistentes.
A questão trata de conceitos de orientação a objetos, como encapsulamento, herança e polimorfismo, no contexto da linguagem Java. Vamos analisar cada uma das opções: **a) os atributos private de DocumentoProcesso são acessíveis por Oficio;** Essa afirmação está incorreta. Em Java, os atributos marcados como `private` em uma classe não são diretamente acessíveis por suas subclasses. No caso, `Oficio` não pode acessar diretamente os atributos `private` de `DocumentoProcesso`. **b) a anotação @Override indica que o método promove() é abstrato e polimórfico;** Essa afirmação também está incorreta. A anotação `@Override` não indica que um método é abstrato. Ela indica que um método da classe filha está sobrescrevendo um método da classe pai. No caso, o método `promove()` na classe `Oficio` está sobrescrevendo o método `promove()` da classe `DocumentoProcesso`, mas nenhum deles é abstrato. **c) a classe Oficio representa uma herança múltipla das classes DocumentoProcesso e Object;** Essa afirmação está incorreta. Java não suporta herança múltipla de classes, ou seja, uma classe não pode herdar diretamente de mais de uma classe. A classe `Oficio` herda apenas de `DocumentoProcesso`, e `DocumentoProcesso` herda implicitamente de `Object`, pois todas as classes em Java herdam de `Object`. **d) a classe Oficio é composta pela classe DocumentoProcesso, permitindo que uma instância da classe Oficio faça referências a instâncias da classe DocumentoProcesso;** Essa afirmação está incorreta. A relação entre `Oficio` e `DocumentoProcesso` é de herança (a classe `Oficio` herda de `DocumentoProcesso`), e não de composição. Composição envolve uma classe conter instâncias de outra classe como atributos, o que não é o caso aqui. **e) os métodos getDocNumero() e setDocNumero() da classe DocumentoProcesso encapsulam o atributo docNumero e asseguram que os objetos da classe mantenham estados consistentes;** Essa afirmação está correta. Os métodos `getDocNumero()` e `setDocNumero()` fornecem acesso ao atributo `docNumero` da classe `DocumentoProcesso`, e esse mecanismo é uma forma de **encapsulamento**. O encapsulamento permite proteger os atributos e garantir que eles sejam acessados e modificados de maneira controlada, o que ajuda a manter a consistência do estado do objeto. Portanto, a resposta correta é **letra e**. Gabarito: E
33
3. (FGV – PGE-AM – 2022) Considere o trecho de programa Java abaixo. É correto afirmar que a) o código mostra um exemplo de sobrescrita de métodos, pois há vários métodos com o mesmo nome, porém, com parâmetros diferentes. b) ocorrerá um erro no último método reajuste, pois este não pode ser estático. c) uma chamada correta ao método reajuste, em condições ideais, é double sal = 1000.5; double c = Calcular.reajuste(sal); d) ocorrerá um erro na classe Calcular, pois não é permitido criar vários métodos com o mesmo nome, como ocorre com o método reajuste. e) uma chamada correta ao método reajuste, em condições ideais, é float sal = (float) 1000.5; double c = Calcular.reajuste(sal);
Vamos analisar o código da classe **Calcular** e as afirmações: ```java public class Calcular { public double reajuste(double salario, double percentual) { return salario + salario * percentual / 100; } public double reajuste(double salario) { return salario * 1.30; } public static double reajuste(float salario) { return salario * 0.20; } } ``` Agora, analisemos cada opção: **a) o código mostra um exemplo de sobrescrita de métodos, pois há vários métodos com o mesmo nome, porém, com parâmetros diferentes.** Essa afirmação está incorreta. O que ocorre aqui é **sobrecarga de métodos** (overloading), não sobrescrita (overriding). A sobrecarga ocorre quando há métodos com o mesmo nome, mas com assinaturas diferentes (diferentes tipos ou quantidades de parâmetros). Sobrescrita ocorre quando uma classe filha redefine um método da classe pai. **b) ocorrerá um erro no último método reajuste, pois este não pode ser estático.** Essa afirmação está incorreta. O método estático é permitido e não causará erro. Métodos estáticos podem coexistir com métodos não estáticos, desde que suas assinaturas sejam diferentes, o que é o caso aqui (o método estático recebe um `float`, enquanto os outros recebem `double`). **c) uma chamada correta ao método reajuste, em condições ideais, é:** ```java double sal = 1000.5; double c = Calcular.reajuste(sal); ``` Essa afirmação está incorreta. O método `reajuste` que recebe `double` e tem apenas um parâmetro não é estático. Portanto, para chamá-lo, seria necessário criar uma instância da classe `Calcular`, como: ```java Calcular calc = new Calcular(); double c = calc.reajuste(sal); ``` **d) ocorrerá um erro na classe Calcular, pois não é permitido criar vários métodos com o mesmo nome, como ocorre com o método reajuste.** Essa afirmação está incorreta. Em Java, é perfeitamente permitido ter vários métodos com o mesmo nome, desde que suas assinaturas sejam diferentes (sobrecarga de métodos). **e) uma chamada correta ao método reajuste, em condições ideais, é:** ```java float sal = (float) 1000.5; double c = Calcular.reajuste(sal); ``` Essa afirmação está **correta**. O método `reajuste` que recebe `float` é estático, então pode ser chamado diretamente pela classe `Calcular`, sem precisar de uma instância. Portanto, a resposta correta é **letra e**. Gabarito: E
34
4. (FGV – DPE-RJ – 2019) Considere as seguintes afirmativas sobre class constructor na linguagem Java. I. Deve receber o mesmo nome da classe a ele associada. II. Não deve ser especificado um tipo de retorno na sua declaração. III. É útil para a definição de valores iniciais para os atributos da classe. IV. É sempre declarado como public. É correto somente o que se afirma em: a) I e II; b) II e III; c) III e IV; d) I, II e III; e) I, III e IV.
Um **class constructor** em Java é um método especial usado para inicializar objetos de uma classe. Ele tem o mesmo nome da classe, não possui tipo de retorno (nem mesmo `void`) e é executado automaticamente quando um objeto é criado com o operador `new`. O construtor é utilizado principalmente para definir valores iniciais dos atributos da classe e garantir a correta criação do objeto. ------------------- Vamos analisar cada uma das afirmativas sobre **construtores (class constructor)** em Java: **I. Deve receber o mesmo nome da classe a ele associada.** Essa afirmativa é **correta**. Em Java, o construtor deve ter exatamente o mesmo nome da classe. Caso contrário, o compilador não o reconhecerá como um construtor. **II. Não deve ser especificado um tipo de retorno na sua declaração.** Essa afirmativa é **correta**. Construtores em Java não têm tipo de retorno, nem mesmo `void`. Se for especificado algum tipo de retorno, ele será tratado como um método regular, e não como um construtor. **III. É útil para a definição de valores iniciais para os atributos da classe.** Essa afirmativa é **correta**. O principal propósito de um construtor é inicializar os atributos de uma classe quando um objeto é criado. **IV. É sempre declarado como public.** Essa afirmativa é **incorreta**. Construtores podem ter qualquer modificador de acesso, como `public`, `protected`, `private`, ou mesmo o modificador padrão (sem especificar), dependendo do controle que se deseja sobre a criação de objetos. Construtores privados, por exemplo, são comuns em padrões de projeto como o **Singleton**. Agora, analisando as opções: - **a) I e II;** Correta, mas incompleta, já que a afirmativa III também é correta. - **b) II e III;** Correta, mas incompleta, já que a afirmativa I também é correta. - **c) III e IV;** Incorreta, pois a afirmativa IV está errada. - **d) I, II e III;** **Correta**, pois as três afirmativas são verdadeiras. - **e) I, III e IV;** Incorreta, pois a afirmativa IV está errada. Portanto, a resposta correta é **letra d**. Gabarito: D
35
6. (FGV – MPE – AL – 2018) No Java, a classe Error e Exception derivam da classe a) ClassNotFoundException. b) IOException. c) MainException. d) RuntimeException. e) Throwable.
Em Java, tanto a classe **`Error`** quanto a classe **`Exception`** derivam da classe **`Throwable`**. A classe `Throwable` é a superclasse de todas as classes que podem ser usadas com a palavra-chave **`throw`** ou capturadas por um **`try-catch`**. Ela tem duas subclasses principais: - **`Error`**: Representa erros graves no ambiente de execução que normalmente não podem ser recuperados, como `OutOfMemoryError`. - **`Exception`**: Representa exceções que podem ser tratadas durante a execução normal do programa. Portanto, a resposta correta é: **e) Throwable.**
36
7. (FGV – MPE-AL – 2018) Sobre as variáveis e os métodos declarados como private, em Java, analise as afirmativas a seguir. I. Ficam acessíveis somente aos membros da própria classe. II. Ficam acessíveis somente às classes definidas no mesmo package. III. Ficam acessíveis somente para suas classes derivadas. Está correto o que se afirma em a) I, apenas. b) II, apenas. c) III, apenas. d) I e II, apenas. e) II e III, apenas.
Em Java, variáveis e métodos declarados como **`private`**: - São acessíveis apenas pela própria classe. - Não podem ser acessados por classes no mesmo pacote ou por subclasses. Portanto, a única afirmativa correta é a I. **Resposta:** a) I, apenas. Gabarito: A
37
8. (FGV – BANESTES – 2018) Considere a compilação de um ou mais programas por meio da linha de comando, num ambiente Java. Nesse caso, o comando que está corretamente formado para esse fim é: a) compile teste.java –type java b) java teste.java c) javac *.java d) jvm Teste1.java teste2.java e) parse java teste.java
Para compilar um ou mais arquivos Java na linha de comando, o comando correto utiliza o compilador Java, que é o **`javac`**. - O comando **`javac`** é usado para compilar arquivos `.java`, gerando arquivos `.class` que podem ser executados pela JVM. - No caso de compilar todos os arquivos `.java` no diretório, você pode usar o comando **`javac *.java`**. Agora, vamos analisar as opções: - **a) compile teste.java –type java** Incorreto. Não existe o comando `compile` em Java. - **b) java teste.java** Incorreto. O comando `java` é usado para **executar** programas já compilados (arquivos `.class`), não para compilá-los. - **c) javac *.java** **Correto**. Esse comando compila todos os arquivos `.java` no diretório atual. - **d) jvm Teste1.java teste2.java** Incorreto. Não existe o comando `jvm` para compilar ou executar programas Java. - **e) parse java teste.java** Incorreto. O comando `parse` não é um comando Java. Resposta correta: **c) javac *.java** Gabarito: C
38
9. (FGV – ALE-RO – 2018) Analise a definição de um array em Java. int[ ][ ] multi = new int[ 5 ][ 10 ]; Assinale o código que exibe corretamente um elemento de cada linha desse array. a) for (int i = 0; i < 5; i++) { System.out.println(multi[i][0]); }; b) for (int i = 0; i < 10; i++) { System.out.println(multi[i,1]); }; c) for (int i = 0; i <= 5; i++) { System.out.println(multi[i,0]); }; d) for (int i = 0; i <= multi.length; i++) { System.out.println(multi[1,i]); }; e) for (int i = 1; i < multi[0].length; i++) { System.out.println(multi[i,1]); };
Vamos analisar o código e as opções fornecidas para exibir corretamente um elemento de cada linha do array bidimensional **`multi`** definido como: ```java int[][] multi = new int[5][10]; ``` Esse array possui 5 linhas e 10 colunas. Para exibir um elemento de cada linha, o índice da coluna deve ser um valor válido (de 0 a 9), e o índice da linha deve ser de 0 a 4. Agora, vamos analisar as opções: **a) `for (int i = 0; i < 5; i++) { System.out.println(multi[i][0]); };`** - **Correta.** Este código percorre as 5 linhas do array e imprime o primeiro elemento de cada linha (`multi[i][0]`). **b) `for (int i = 0; i < 10; i++) { System.out.println(multi[i,1]); };`** - **Incorreta.** A sintaxe de acesso ao array está errada. Deve ser `multi[i][1]` em vez de `multi[i,1]`. **c) `for (int i = 0; i <= 5; i++) { System.out.println(multi[i,0]); };`** - **Incorreta.** O índice `i` vai de 0 a 5, mas o último índice válido para as linhas é 4. Isso causará um **ArrayIndexOutOfBoundsException**. **d) `for (int i = 0; i <= multi.length; i++) { System.out.println(multi[1,i]); };`** - **Incorreta.** O índice `i` também vai de 0 a 5, o que causará uma exceção, além de estar usando a sintaxe errada (`multi[1,i]` deve ser `multi[1][i]`). **e) `for (int i = 1; i < multi[0].length; i++) { System.out.println(multi[i,1]); };`** - **Incorreta.** A sintaxe de acesso ao array está errada (`multi[i,1]` deve ser `multi[i][1]`) e `i` começa em 1, o que não acessará a primeira linha. Resumo da Resposta: A única opção correta que exibe um elemento de cada linha do array **`multi`** é: **a) `for (int i = 0; i < 5; i++) { System.out.println(multi[i][0]); };`** Gabarito: A
39
10. (FGV – ALE-RO – 2018) No contexto da linguagem Java, assinale o modificador (modifier) que se refere ao nível de acesso. a) abstract b) final c) protected d) static e) volatile
No contexto da linguagem Java, o modificador que se refere ao nível de acesso é **`protected`**. Esse modificador permite que membros (atributos e métodos) de uma classe sejam acessados por: - A própria classe. - Subclasses (mesmo que estejam em pacotes diferentes). - Outras classes no mesmo pacote. Vamos revisar brevemente as opções: - **a) abstract**: Indica que uma classe ou método é abstrato, ou seja, não pode ser instanciado e deve ser implementado em subclasses. - **b) final**: Indica que uma classe não pode ser estendida, um método não pode ser sobrescrito, ou uma variável não pode ser alterada após a inicialização. - **c) protected**: **Correto**. Refere-se ao nível de acesso dos membros da classe. - **d) static**: Indica que um membro pertence à classe em si, e não a instâncias específicas da classe. - **e) volatile**: É usado para indicar que uma variável pode ser alterada de forma inesperada, principalmente em ambientes multithreading, mas não se refere ao nível de acesso. Resposta correta: **c) protected.**
40
11. (FGV – ALE-RO – 2018) Sobre construtores (constructors), no contexto da linguagem Java, analise as afirmativas a seguir. I. Os construtores devem ser declarados como private. II. Uma interface não pode ter um construtor. III. Uma classe abstrata pode ter um construtor. Está correto o que se afirma em a) I, somente. b) II, somente. c) III, somente. d) I e II, somente. e) II e III, somente.
Vamos analisar cada uma das afirmativas sobre construtores em Java: **I. Os construtores devem ser declarados como private.** - **Incorreta.** Construtores podem ter qualquer modificador de acesso (como `public`, `protected`, `private`, ou padrão), dependendo do controle que se deseja sobre a criação de objetos. Um construtor `private` é usado, por exemplo, em padrões de projeto como o Singleton, mas não é uma obrigação. **II. Uma interface não pode ter um construtor.** - **Correta.** Interfaces não podem ter construtores, pois não podem ser instanciadas diretamente. Uma interface pode declarar métodos, mas não pode criar objetos. **III. Uma classe abstrata pode ter um construtor.** - **Correta.** Classes abstratas podem ter construtores, que podem ser usados por subclasses para inicializar os atributos herdados. Conclusão: - A afirmativa II e a afirmativa III estão corretas. Resposta correta: **e) II e III, somente.** Gabarito: E
41
12. (FGV – MPE AL – 2018) O package “java.util.regex” do Java permite a manipulação de expressões regulares. As três classes mais importantes desse pacote são denominadas: a) RegExp, Parser e Lexicon. b) RegExPattern, RegExVerifier e RegExCompiler. c) Pattern, Matcher e PatternSyntaxException. d) Collector, Retriever e SyntaxParser. e) Parser, Inspector e Evaluator.
O pacote **`java.util.regex`** em Java oferece classes para manipulação de expressões regulares, e as três classes mais importantes desse pacote são: - **`Pattern`**: Representa uma expressão regular compilada. - **`Matcher`**: Realiza a correspondência de padrões em uma sequência de caracteres. - **`PatternSyntaxException`**: Indica um erro de sintaxe em uma expressão regular. Portanto, a resposta correta é: **c) Pattern, Matcher e PatternSyntaxException.** Gabarito: C
42
13. (FGV – MPE – AL – 2018) Servidores de aplicação baseados em Java Platform Enterprise Edition possuem vários tipos de API. Assinale a opção que indica a API utilizada para fornecer acesso ao servidor de nomes e diretórios. a) JNDI. b) RMI. c) JMS. d) JTS. e) JDBC.
A API utilizada para fornecer acesso ao servidor de nomes e diretórios em servidores de aplicação baseados em Java Platform Enterprise Edition é a **JNDI** (Java Naming and Directory Interface). Aqui está um breve resumo das opções: - **a) JNDI**: **Correta.** Fornece uma interface para localizar e acessar recursos e serviços em um servidor de nomes e diretórios. - **b) RMI**: (Remote Method Invocation) permite que um objeto Java invoque métodos em objetos em outra máquina. - **c) JMS**: (Java Message Service) fornece uma interface para comunicação assíncrona entre componentes de aplicativos. - **d) JTS**: (Java Transaction Service) fornece suporte para transações distribuídas. - **e) JDBC**: (Java Database Connectivity) permite a conexão e a execução de consultas em bancos de dados relacionais. Resposta correta: **a) JNDI.** Gabarito: A
43
14. (FGV – IBGE – 2017) Os servidores de aplicação fornecem a infraestrutura básica necessária para o desenvolvimento e a distribuição de aplicações. Em relação aos servidores de aplicação da plataforma Java EE, analise as afirmativas a seguir: I. GlassFish e Apache Geronimo são servidores de aplicação open source compatível com a especificação J2EE. II. O Apache Tomcat não dispõe de um container EJB. III. JBoss é programado em Java, portanto, pode ser usado em qualquer sistema operacional que suporte essa linguagem de programação. Está correto o que se afirma em: a) somente I; b) somente II; c) somente III; d) somente I e II; e) I, II e III.
Vamos analisar as afirmativas sobre os servidores de aplicação da plataforma Java EE: **I. GlassFish e Apache Geronimo são servidores de aplicação open source compatível com a especificação J2EE.** - **Correta.** Tanto o GlassFish quanto o Apache Geronimo são servidores de aplicação de código aberto que implementam a especificação J2EE (Java 2 Platform, Enterprise Edition). **II. O Apache Tomcat não dispõe de um container EJB.** - **Correta.** O Apache Tomcat é um servidor de servlet que implementa as especificações de servlets e JSP, mas não suporta EJB (Enterprise JavaBeans) nativamente. **III. JBoss é programado em Java, portanto, pode ser usado em qualquer sistema operacional que suporte essa linguagem de programação.** - **Correta.** O JBoss (atualmente conhecido como WildFly) é um servidor de aplicação que é escrito em Java e, portanto, pode ser executado em qualquer sistema operacional que tenha uma JVM (Java Virtual Machine) instalada. Conclusão: Todas as afirmativas estão corretas. Resposta correta: **e) I, II e III.** Gabarito: E
44
15. (FGV – IBGE – 2017) Em Java, certo método da classe A deve poder ser invocado independentemente da criação prévia de uma instância de A. O modificador obrigatório na declaração desse método é: a) abstract; b) static; c) public; d) protected; e) final.
Para que um método possa ser invocado independentemente da criação de uma instância da classe, ele deve ser declarado como **`static`**. Métodos estáticos pertencem à classe em si, e não a instâncias específicas da classe. Assim, eles podem ser chamados sem que uma instância da classe seja criada. Vamos revisar as opções: - **a) abstract**: Indica que o método não tem uma implementação na classe, mas deve ser implementado em subclasses. Não é relevante para a invocação sem instância. - **b) static**: **Correta.** Permite que o método seja chamado sem uma instância da classe. - **c) public**: Indica que o método pode ser acessado de qualquer lugar, mas não garante que ele possa ser chamado sem uma instância. - **d) protected**: Permite que o método seja acessado apenas por subclasses e classes no mesmo pacote, mas não permite a chamada sem instância. - **e) final**: Indica que o método não pode ser sobrescrito em subclasses, mas não está relacionado com a criação de instâncias. Resposta correta: **b) static.** Gabarito: B
45
1. (FCC – PGE-AM - 2022) Considere o trecho de programa Java abaixo. A assinatura correta do método que deve ser colocada na lacuna I é a) public int[] verificar(int vet[]) b) private int[] verificar(int vet[]) c) public static int verificar(int vet[]) d) public int verificar(int vet) e) public static int[] verificar(int vet[])
A forma correta para a assinatura do método é conforme a sintaxe: [Palavras-Chave] TipoRetorno NomeMetodo ([Lista de Parâmetros]). Assim, temos um método public, daí eliminamos a letra B. É definido como static porque os métodos static tem um relacionamento com uma classe como um todo, enquanto os métodos que não são static são associados a uma instância de classe específica (objeto) e podem manipular as variáveis de instância do objeto. Portanto eliminamos as alternativas a, b e d. O retorno é um vetor de inteiros, portanto int[], daí eliminamos as alternativas c e d. Ficamos então com a alternativa E que é o nosso gabarito: public static int[] verificar(int vet[]) Gabarito: Letra E
46
2. (FCC – PGE-AM – 2022) Considere st um objeto do tipo PreparedStatement e conn um objeto do tipo Connection, ambos em condições ideais para a execução do método salvar, de uma classe Java. Nas condições apresentadas, para que o método salvar grave as informações do cliente no banco de dados aberto, a lacuna I deve ser corretamente preenchida com a instrução a) INSERT INTO cliente VALUES(cpf,nome,endereco,bairro,cidade,telefone,renda) b) INSERT INTO cliente VALUES(?,?,?,?,?,?,?) c) INSERT INTO cliente (nome,cpf,endereco,bairro,cidade,telefone, renda) VALUES(?,?,?,?,?,?,?) d) INSERT INTO cliente VALUES([cpf],[nome],[endereço],[bairro],[cidade],[telefone],[renda]) e) INSERT TO cliente (cpf,nome,endereco,bairro,cidade,telefone, renda) VALUES(?,?,?,?,?,?,?)
Um PreparedStatement é um objeto que representa uma instrução SQL pré-compilada. Uma instrução SQL é pré-compilada e armazenada em um objeto PreparedStatement. Esse objeto pode ser usado para executar com eficiência essa instrução várias vezes. Às vezes, é mais conveniente usar um objeto PreparedStatement para enviar instruções SQL ao banco de dados. Esse tipo especial de instrução é derivado da classe mais geral, Statement, que você já conhece. Se você deseja executar um objeto Statement muitas vezes, geralmente reduz o tempo de execução para usar um objeto PreparedStatement. A principal característica de um objeto PreparedStatement é que, diferentemente de um objeto Statement, ele recebe uma instrução SQL quando é criado. A vantagem disso é que, na maioria dos casos, essa instrução SQL é enviada imediatamente ao DBMS, onde é compilada. Como resultado, o objeto PreparedStatement contém não apenas uma instrução SQL, mas uma instrução SQL que foi pré-compilada. Isso significa que quando o PreparedStatement é executado, o DBMS pode apenas executar a instrução SQL PreparedStatement sem ter que compilá-lo primeiro. A ideia é preparar as querys do SQL para armazenamento no banco de dados. O tutorial da Oracle diz que nós devemos usar a interrogação para inserir na tabela cliente (?,?,?,?,?,?,?). Portanto o gabarito é a letra B. Gabarito: Letra B
47
3. (FCC – PGE-AM – 2022) No método doPost de uma servlet Java, deseja-se receber um parâmetro de um campo de nome renda contido em um formulário HTML, converter o valor recebido deste campo para número real e armazená-lo em uma variável chamada renda. A instrução correta para realizar esta tarefa é a) long renda = Long.parseLong(request.getParameter("renda")); b) double renda = parseDouble(request.getParameter("renda")); c) double renda = request.getParameter("renda").toDouble(); d) double renda = Double.parseDouble(request.getParameter("renda")); e) number renda = parseNumber(request.getParameter("renda"));
A opção correta para receber e converter um parâmetro "renda" de um formulário HTML em um número real no método `doPost` de uma servlet Java é: **d) `double renda = Double.parseDouble(request.getParameter("renda"));`** Análise das opções: - **a)** Incorreta: Converte para `long`, não para número real. - **b)** Incorreta: Falta o prefixo da classe `Double`. - **c)** Incorreta: `toDouble()` não é um método válido em Java. - **d)** Correta: Converte a string recebida em um número real (double). - **e)** Incorreta: `number` não é um tipo em Java; `parseNumber` não é um método padrão. **Conclusão:** A opção **d** é a única correta. Gabarito: D
48
4. (FCC – AFAP – 2019) Considere o método Java abaixo. Caso o driver JDBC não esteja disponível na aplicação e não exista o banco de dados trf3, as exceções que deverão ser tratadas nas lacunas I e II são, correta e respectivamente, a) NullPointerExceptionException e DatabaseException. b) DriverNotFoundException e MySQLException. c) JDBCDriverException e DatabaseException. d) ClassNotFoundException e SQLException. e) JDBCDriverException e DatabaseSQLException.
Pessoal, caso o driver JDBC não esteja disponível na aplicação, irá acusar um erro chamado ClassNotFoundException. Os comandos não irão conseguir encontrar a classe informada, pois não há o driver disponível. Por fim, como não existe o BD, o JDBC informa que é um erro chamado SQLException, ele acusa algum erro no banco de dados, como a questão nos informou que ele não existe não precisamos ficar procurando esse erro na aplicação. Gabarito: Letra D
49
5. (FCC – AFAP – 2019) Para criar array um Analista de Informática digitou os comandos abaixo no método main de uma classe Java em condições ideais. I. int[] a = {1,3}; II. int b[] = new int[2]; b[0]=1; b[1]=3; III. int[] c = new int[2]; c.add(1); c.add(2); IV. int[][] d = {{1,3},{4,5}}; V. int e[][] = {{1,3},{4,5}}; Ao tentar compilar e executar a classe, foi exibida a mensagem “Exception in thread "main" java.lang.RuntimeException: Uncompilable source code”. Essa mensagem foi exibida porque o item a) IV está incorreto, pois não especifica o tamanho da array. b) V está incorreto, pois deve haver apenas um par de colchetes após o nome da array. c) I está incorreto, pois não é permitido declarar um array e já incluir os valores nele. d) II está incorreto, pois os colchetes devem ficar antes do nome da variável b. e) III está incorreto, pois não existe o método add neste contexto.
Pessoal, a resposta correta é a letra E. Não existe o método add para array no Java, mas sim no ArrayList. Ademais, a letra a erra porque não é necessário especificar o tamanho. O erro da letra B está em dizer que deve haver apenas um par de colchetes. E a letra C está errada pois é possível sim declarar e incluir valores no array. Por fim, os colchetes podem ficar antes ou depois da variável. Gabarito: Letra E
50
6. (FCC – AFAP – 2019) Considere a classe Java abaixo, que usa um método de ordenação por inserção para rearranjar os valores em um vetor em ordem crescente. public class Organiza{ public static void main(String[] args) { int k[] = {88, 44, 42, 7, 72, 5}; int n = k.length; ordena(n, k); } static void ordena(int n, int v[]) { for (int j = 1; j < n; ++j) { int x = v[j]; int i; for (..I..){ v[i + 1] = v[i]; } ..II.. ; } } } Para que a ordenação por inserção ocorra corretamente, as lacunas I e II devem ser corretamente preenchidas com a) i=j-1; i >=0 && v[i]>x; − −i e v[i-1]=x b) i=j-1; i >=0; i++ e v[i+1]=x c) i=j-1; i >=0 && v[i]>x; − −i e v[i+1]=x d) i=j-1; i >=0 && v[i]>x; ++i e v[i]=x e) i=j-1; i >=0 || v[i]>x; − −i e v[i+1]=x
Para implementar corretamente o algoritmo de ordenação por inserção no método `ordena`, precisamos preencher as lacunas **I** e **II**. Vamos analisar o funcionamento do algoritmo e as opções dadas. Algoritmo de Ordenação por Inserção No algoritmo de ordenação por inserção: 1. O loop externo percorre o vetor a partir do segundo elemento (`j = 1`). 2. A variável `x` armazena o valor a ser inserido na posição correta. 3. O loop interno deve deslocar os elementos maiores que `x` para a direita, para criar espaço para `x`. 4. Após o deslocamento, `x` deve ser colocado na posição correta. Lacuna I Para a lacuna **I**, precisamos inicializar `i` para o índice do elemento anterior ao que estamos tentando inserir (`j - 1`). O loop interno deve continuar enquanto `i` for maior ou igual a zero e enquanto o valor em `v[i]` for maior que `x`. Lacuna II Na lacuna **II**, precisamos inserir `x` na posição correta, que será `v[i + 1]`, após o deslocamento dos elementos. Análise das opções Agora, vamos analisar cada uma das opções: - **a)** `i=j-1; i >=0 && v[i]>x; − −i e v[i-1]=x` - **Incorreta.** O deslocamento está errado, e a inserção não está na posição correta. - **b)** `i=j-1; i >=0; i++ e v[i+1]=x` - **Incorreta.** O loop não é definido corretamente, e o deslocamento não funcionará. - **c)** `i=j-1; i >=0 && v[i]>x; − −i e v[i+1]=x` - **Correta.** O loop interno é configurado corretamente, e `x` é inserido na posição `v[i+1]`. - **d)** `i=j-1; i >=0 && v[i]>x; ++i e v[i]=x` - **Incorreta.** A inserção de `x` não está na posição correta. - **e)** `i=j-1; i >=0 || v[i]>x; − −i e v[i+1]=x` - **Incorreta.** O uso de `||` é inadequado aqui e causaria comportamento inesperado. Conclusão As lacunas **I** e **II** devem ser preenchidas como segue: - **Lacuna I:** `i=j-1; i >=0 && v[i]>x; --i` - **Lacuna II:** `v[i + 1] = x` Portanto, a resposta correta é: **c) i=j-1; i >=0 && v[i]>x; − −i e v[i+1]=x** Gabarito: C
51
7. (FCC - TRF 3ª Região /2019) No interior do método main da classe principal de uma aplicação Java SE um método foi chamado usando as instruções abaixo. double[] dados; double [] d={1, 20, 7, 8}; dados = Aluno.cadastraDados(d); O método cadastraDados na classe Aluno deve ter a declaração a) public static double[] cadastraDados(double[] d) b) public static double[] cadastraDados(double d) c) public double[] cadastraDados(double[] d) d) public final double[] cadastraDados(double d[]) e) public static double cadastraDados(double[] d)
Para responder a questão devemos ter em mente que é necessário fazer o método cadastraDados passar algo por parâmetro. Para isso, devemos utilizar a alternativa A: public static double[] cadastraDados(double[] d) Gabarito: Letra A
52
8. (FCC – SANASA – 2019) Na orientação a objetos uma classe abstrata é construída para ser um modelo para classes derivadas e na sua construção há algumas restrições. Assim, considere a classe abstrata abaixo, criada na Linguagem Java. public abstract class Calcula { private static final double VALOR=10; public abstract double soma(double n1, double n2); public abstract void exibeResultado( ); protected abstract double soma(double n1, double n2, double n3); private abstract int multiplica(double n1, int n2); private double multiplica(double n1, double n2){return n1*n2;} public Calcula( ) { } } A instrução que NÃO é permitida nessa classe é a) private abstract int multiplica(double n1, int n2); b) public abstract void exibeResultado( ); c) public Calcula( ) { } d) private static final double VALOR=10; e) private double multiplica(double n1, double n2){return n1*n2;}
Pessoal, analisando as alternativas, podemos observar na letra A a criação de um método "private abstract". Porém, em Java, não é permitido declarar um método como "private abstract"! daí já sabemos que a alternativa errada (gabarito da questão) é a letra A. Já, a letra B está correta, veja é a declaração de um método abstrato sem implementação. As demais alternativas também estão plenamente corretas. Gabarito: Letra A.
53
9. (FCC – TJ TRF3 – 2019) Em uma aplicação Java, um vetor n foi criado por meio da instrução double n=new double[3]; e alimentado com 3 valores reais. Para exibir o conteúdo da segunda posição (índice) deste vetor utiliza-se a instrução a) JOptionPane.showMessageDialog(null, n[2]); b) System.out.println(n[1]); c) JOptionPane.ShowMessageDialog(n[2]); d) System.Out.Println(null, n[1]); e) JOptionPane.showWindows(0, n[2]);
O comando para imprimir a segunda posição de um vetor de três posições deverá pegar a posição n[1] já que, em Java, o vetor inicia na posição 0. Portanto ficamos apenas com as alternativas b e d. A letra d apresenta um erro porque System.out.Println não possui o parâmetro null como é apresentado na questão. Portanto nosso gabarito é a letra B. Gabarito: Letra B
54
10. (FCC – AFAP – 2019) Considere a classe Java a seguir em condições ideais. import java.sql.*; public class ClienteDados { public int conectar(){ Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection ("jdbc:mysql://localhost:3306/banco", "root", ""); Statement st = con.createStatement(); return 1; } } No método conectar podem ser lançadas duas exceções que o Analista de Informática deseja que sejam tratadas não no interior do método, mas sim por quem o chamar. Para que isso seja permitido, deve-se inserir o comando a) try na linha abaixo da declaração do método e catch (DataBaseException, SQLQueryException) abaixo do comando return 1. b) throws ClassNotFoundException, SQLException na linha de declaração do método. c) Exception ClassNotFoundException, SQLException na linha de declaração do método. d) try na linha abaixo da declaração do método e catch (ClassNotFoundException, SQLException) abaixo do comando return 1. e) throws DataBaseException, SQLQueryException na linha de declaração do método.
Para permitir que exceções sejam tratadas fora do método `conectar` na classe `ClienteDados`, o método deve declarar as exceções que pode lançar. No caso apresentado, as exceções relevantes são `ClassNotFoundException` e `SQLException`. Análise das opções a) **`try` na linha abaixo da declaração do método e `catch (DataBaseException, SQLQueryException)` abaixo do comando `return 1`.** - **Incorreta**: Usar `try` e `catch` dentro do método não atende ao requisito de lançar as exceções para serem tratadas fora dele. b) **`throws ClassNotFoundException, SQLException` na linha de declaração do método.** - **Correta**: Essa é a forma correta de indicar que o método pode lançar essas exceções, permitindo que quem chamar o método trate essas exceções. c) **`Exception ClassNotFoundException, SQLException` na linha de declaração do método.** - **Incorreta**: Essa sintaxe é inválida em Java. Não se pode declarar exceções desta forma. d) **`try` na linha abaixo da declaração do método e `catch (ClassNotFoundException, SQLException)` abaixo do comando `return 1`.** - **Incorreta**: Novamente, usar `try` e `catch` dentro do método não atende ao requisito de lançar as exceções. e) **`throws DataBaseException, SQLQueryException` na linha de declaração do método.** - **Incorreta**: `DataBaseException` e `SQLQueryException` não são exceções padrão da biblioteca Java. As exceções corretas são `ClassNotFoundException` e `SQLException`. Conclusão A opção correta para permitir que as exceções sejam tratadas fora do método `conectar` é: **b) `throws ClassNotFoundException, SQLException` na linha de declaração do método.** Gabarito: B
55
11. (FCC / TRF3 – 2019) Uma classe Colaborador de uma aplicação Java tem o método abaixo. public void setNome(String nome) { this.nome = nome; } Para instanciar um objeto dessa classe e armazenar o nome "Pedro" no atributo nome utiliza-se a) Colaborador.setNome("Pedro"); b) Colaborador c -> new Colaborador(); c->Nome="Pedro"; c) Colaborador c = new Colaborador(c.setNome("Pedro")); d) Colaborador c = new Colaborador(); c.setNome("Pedro"); e) Colaborador c = new Colaborador().setNome("Pedro");
A alternativa correta para instanciar um objeto da classe `Colaborador` e armazenar o nome "Pedro" no atributo `nome` é: **d)** `Colaborador c = new Colaborador(); c.setNome("Pedro");` Resumo das alternativas: - **a)** Incorreto — Método de instância não pode ser chamado diretamente na classe. - **b)** Incorreto — Sintaxe errada e acesso direto a atributo privado. - **c)** Incorreto — `setNome` não retorna um objeto. - **e)** Incorreto — `setNome` não retorna a instância. A única alternativa correta é a **d**. Gabarito: D
56
12. (FCC / SABESP – 2018) As interfaces são usadas nas aplicações Java quando se deseja permitir que diversas classes implementem determinados métodos, mesmo que de formas diferentes. Em uma interface Java a) os métodos não podem ter os modificadores protected ou private. b) não pode haver assinaturas de métodos cujo tipo de retorno seja void. c) pode haver múltiplos construtores, desde que recebam parâmetros diferentes. d) não pode haver dois ou mais métodos com o mesmo nome, mesmo que recebam parâmetros diferentes. e) todo método deverá ser implementado por uma das subclasses da aplicação pelo menos uma vez
A alternativa correta sobre as interfaces em Java é: **a)** os métodos não podem ter os modificadores protected ou private. Justificativas para as outras alternativas: - **b)** Incorreto — Em uma interface, pode haver métodos com retorno do tipo `void`. - **c)** Incorreto — Interfaces não têm construtores, pois não podem ser instanciadas. - **d)** Incorreto — Em uma interface, pode haver métodos com o mesmo nome, desde que tenham parâmetros diferentes (sobrecarga). - **e)** Incorreto — Um método em uma interface deve ser implementado pelas classes que a implementam, mas não necessariamente por todas as subclasses; se uma subclasse não implementar o método, ela deve ser declarada como abstrata. Portanto, a alternativa **a** é a única correta. Gabarito: A
57
13. (FCC – TRF 3ª Região – 2014) Herança e interfaces são conceitos da orientação a objetos que possibilitam a obtenção de polimorfismo. Em Java, uma interface pode a) herdar de mais de uma interface. b) ser instanciada diretamente por meio da instrução new. c) possuir apenas assinaturas de métodos públicos e protegidos. d) possuir métodos abstratos e estáticos. e) conter declarações de constantes e de variáveis não inicializadas.
A alternativa correta sobre o que uma interface pode fazer em Java é: **a)** herdar de mais de uma interface. Justificativas para as outras alternativas: - **b)** Incorreto — Interfaces não podem ser instanciadas diretamente. Elas precisam ser implementadas por classes. - **c)** Incorreto — Uma interface pode possuir apenas assinaturas de métodos públicos, pois todos os métodos em uma interface são implicitamente públicos (não podem ser protegidos ou privados). - **d)** Incorreto — Interfaces podem ter apenas métodos abstratos (a partir do Java 8, métodos default e estáticos são permitidos, mas a afirmação não é completamente correta). - **e)** Incorreto — Interfaces podem conter declarações de constantes (variáveis `static final`), mas não podem ter variáveis não inicializadas. Portanto, a alternativa **a** é a única correta. Gabarito: A
58
14. (FCC – TRE-RN – 2011) Em relação ao Java Standard Edition, é INCORRETO afirmar: a) Possui gerenciamento de memória embutido, por meio do coletor de lixo. b) Ambiente indicado para o desenvolvimento de aplicativos para dispositivos móveis ou portáteis. c) Permite o desenvolvimento de aplicações desktop de linha de comando e interfaces gráficas Swing. d) Portabilidade dos programas compilados para diversos sistemas operacionais, sem necessidade de recompilação. e) Usa conceitos tais como orientação a objetos e multithreading.
A alternativa **INCORRETA** sobre o Java Standard Edition (Java SE) é: **b)** Ambiente indicado para o desenvolvimento de aplicativos para dispositivos móveis ou portáteis. Justificativas para as outras alternativas: - **a)** Correto — Java SE possui gerenciamento de memória embutido por meio do coletor de lixo. - **c)** Correto — Permite o desenvolvimento de aplicações desktop, tanto de linha de comando quanto com interfaces gráficas usando Swing. - **d)** Correto — A portabilidade dos programas compilados é uma das principais características do Java, permitindo que sejam executados em diversos sistemas operacionais sem necessidade de recompilação. - **e)** Correto — Java utiliza conceitos de orientação a objetos e multithreading. Assim, a alternativa **b** é a única que não se aplica ao Java SE, pois ele não é especificamente voltado para o desenvolvimento de aplicativos móveis, que é mais associado ao Java Micro Edition (Java ME). Gabarito: B
59
15. (FCC – TRT 22ª Região – 2010) A plataforma Java disponibiliza um interpretador que traduz, em tempo de execução, o bytecode para instruções nativas do processador, permitindo, dessa forma, que uma mesma aplicação seja executada em qualquer plataforma computacional que possua essa implementação. Trata-se de: a) Java Virtual Machine. b) Java API. c) JavaBeans. d) J2SE. e) JavaFX.
O bytecode é um código intermediário, que é posteriormente interpretado e executado por uma Java Virtual Machine (JVM). Gabarito: Letra A
60
16. (FCC – Sergipe Gás– 2010) É tida como uma das principais linguagens de programação orientada a objeto; tem como característica a compilação para um bytecode e execução por uma máquina virtual. Trata-se da linguagem: a) Algol. b) Delphi. c) C++. d) Java. e) PHP.
Java é também uma linguagem portável e multiplataforma! O Compilador é capaz de gerar um código intermediário (bytecode), que permite que o mesmo programa possa ser executado em qualquer máquina ou sistema operacional que possua uma JVM. Ademais, busca que todos os aspectos da linguagem sejam independentes de plataforma (Ex: ela especifica o tamanho e comportamento de cada tipo de dado). Conforme vimos em aula, trata-se da linguagem Java. Gabarito: Letra D
61
17. (FCC – TCE-SP – 2010) Os aplicativos Java “rodam” em diferentes ambientes. A tradução dos códigos Java (bytecode), para instruções específicas de cada sistema e dispositivo, é uma função do programa: a) Java Community Process (JCP). b) Java Virtual Module (JVM). c) Java Virtual Machine (JVM). d) Java Comunication Process (JCP). e) Java Enterprise Machine (JEM).
O bytecode é um código intermediário, que é posteriormente interpretado e executado por uma Java Virtual Machine (JVM). Gabarito: Letra C
62
1. (UFMA – UFMA – 2019) Duas características importantes e relacionadas entre si, presentes em Java por ser uma linguagem orientada a objetos, são a herança e o polimorfismo. Considere as afirmativas I e II a seguir e depois marque a alternativa correta. I. Herança múltipla é um recurso existente em Java para permitir que uma classe possa herdar atributos e métodos de mais de uma classe. II. Polimorfismo em Java é a capacidade de duas ou mais classes derivadas de uma mesma superclasse possuírem a mesma assinatura de um método, porém com comportamento diferente. a) Apenas a afirmativa II está correta. b) Ambas as afirmativas I e II estão corretas. c) Ambas as afirmativas I e II estão erradas. d) Apenas a afirmativa I está correta. e) A correção ou não das afirmativas I e II depende de qual versão de Java se está levando em consideração.
Pessoal, é necessário saber os conceitos de herança e polimorfismo. Primeiramente, devemos ter em mente que não existe Herança múltipla em Java. Daí a assertiva I está incorreta. Vejamos o que diz a assertiva II: Polimorfismo em Java é a capacidade de duas ou mais classes derivadas de uma mesma superclasse possuírem a mesma assinatura de um método, porém com comportamento diferente. Está perfeita a definição. Gabarito: Letra A
63
2. (FUNDEP – Prefeitura de Lagoa Santa– 2019) Qual é a forma correta de se criar uma classe que não poderá ser instanciada, mas ainda poderá ser reutilizada? a) public abstract class NomeDaClasse b public abstract NomeDaClasse c) public class NomeDaClasse d) public class private NomeDaClasse
Pessoal, para criar uma classe que não poderá ser instanciada, mas ainda poderá ser reutilizada devemos utilizar public abstract class NomeDaClasse. Porque a classe abstrata é sempre uma superclasse que não possui instâncias. Gabarito: Letra A
64
3. (UFRN – UFRN – 2019) Na programação orientada a objetos, o polimorfismo é a habilidade de objetos de classes diferentes responderem à mesma mensagem de maneiras diferentes. Um tipo de polimorfismo é a) polimorfismo de sobrecarga. b) polimorfismo de instanciação. c) polimorfismo de abstração. d) polimorfismo de classificação.
A resposta correta é a **letra a) polimorfismo de sobrecarga**. O polimorfismo na programação orientada a objetos pode ser classificado em dois tipos principais: **polimorfismo de sobrecarga** (ou ad-hoc) e **polimorfismo de subtipo** (ou de inclusão). No caso da sobrecarga, o polimorfismo ocorre quando diferentes funções ou métodos com o mesmo nome podem ser chamados com diferentes tipos ou números de parâmetros, respondendo de maneira distinta conforme a assinatura. Gabarito: Letra A
65
4. (IADES – Hemocentro – DF– 2017) Considerando que Luta e Jogo são classes, e que Esporte, Individual e Coletivo são interfaces, com relação aos conceitos de classes e interfaces da linguagem Java, assinale a alternativa correta. a) interface Futebol implements Esporte, Jogo{}. b) interface Futebol extends Esporte,Coletivo{} c) interface Futebol implements Esporte{} d) class Judo extends Esporte, Individual{} e) interface Karate extends Luta{}
A alternativa correta é a **letra b) interface Futebol extends Esporte, Coletivo{}**. No Java, uma interface pode **estender** (extends) outras interfaces, mas não pode implementar (implements) outra interface. A palavra-chave **extends** é utilizada para herdar de interfaces, enquanto **implements** é usada por classes que implementam interfaces. Além disso, uma classe não pode estender (extends) uma interface, como apresentado na letra "d". Gabarito: Letra B
66
5. (ESAF – Receita Federal – 2012) Em programação Java, o comando while: a) executa um bloco exclusivamente de comandos de atribuição. b) executa um bloco de comandos enquanto sua condição for verdadeira. c) executa um bloco de comandos até que sua condição seja verdadeira. d) equivale ao comando what-if. e) é idêntico ao comando do while.
(a) Na verdade, podem ter outros comandos – não é só atribuição; (b) Perfeito, enquanto for verdadeira, continua a iteração; (c) Não, enquanto ela for verdadeira; (d) Não, esse comando não existe; (e) Não, esse comando entra no bloco e só depois avalia a condição. Gabarito: Letra B
67
1. (CESGRANRIO – Banco do Brasil – 2023) Um programador foi instruído pelo seu gerente a implementar, em Java, uma classe MemoriaCalculoVenda que implementasse a interface MemoriaCalculo, já criada pela organização e que representa as exigências da organização para classes que implementam memórias de cálculo. Nesse cenário, com que fragmento de código o programador deve começar, de forma correta, a implementação da classe? a) class MemoriaCalculoVenda extends MemoriaCalculo b) class MemoriaCalculoVenda implements MemoriaCalculo c) class MemoriaCalculoVenda imports MemoriaCalculo d) class MemoriaCalculoVenda inherits MemoriaCalculo e) class MemoriaCalculoVenda uses MemoriaCalculo
A resposta correta é a **letra b) class MemoriaCalculoVenda implements MemoriaCalculo**. No Java, uma classe usa a palavra-chave **implements** para declarar que está implementando uma interface. Nesse caso, como a interface **MemoriaCalculo** já foi criada pela organização e a classe **MemoriaCalculoVenda** deve implementar essa interface, a sintaxe correta é utilizar **implements** para indicar essa relação entre a classe e a interface. A palavra **extends** seria usada apenas no caso de herança entre classes, não entre uma classe e uma interface. Gabarito: B
68
23. (CESGRANRIO - BASA - 2018) A linguagem de programação Java suporta a) passagem de parâmetros de tipos primitivos por referência b) sobrecarga de operadores c) herança múltipla d) polimorfismo e) ponteiros
A resposta correta é a **letra d) polimorfismo**. A linguagem Java **suporta polimorfismo**, que é a capacidade de uma classe utilizar métodos de uma superclasse ou interface de maneira que comportamentos diferentes possam ser implementados, dependendo do tipo real do objeto. Analisando as outras alternativas: - **a) passagem de parâmetros de tipos primitivos por referência**: Java utiliza **passagem por valor** para tipos primitivos, não por referência. - **b) sobrecarga de operadores**: Java **não suporta sobrecarga de operadores** (diferente de linguagens como C++). - **c) herança múltipla**: Java **não permite herança múltipla** de classes, mas permite herança múltipla através de **interfaces**. - **e) ponteiros**: Java **não utiliza ponteiros** diretamente, ao contrário de linguagens como C/C++. Portanto, a característica correta que Java suporta é **polimorfismo**. Gabarito: D
69
1. (CESPE – Petrobrás – 2022) package cadastroUsuario; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.*; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class CadastroServlet extends HttpServlet { protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { String nome = request.getParameter(“nome”); String endereco = request.getParameter(“endereco”); String telefone = request.getParameter(“telefone”); response.setContentType(“text/html”); PrintWriter out = response.getWriter( ); out.println(““); out.println(““); out.println(““); out.println(““); out.println(““); out.println(“

Prezado(a) “, “ + nome + “

“); out.println(“

Obrigado por se cadastrar.

“); out.println(“

Entraremos em contato através do telefone”, “ + telefone+ “ em breve.

“); out.println(““); out.println(““); out.close( ); } } Tendo como referência o código precedente, julgue o item que se segue. A linha String nome = request.getParameter(“nome”); pode ser alterada para String nome = request.getAttribute(“nome”); sem perda de funcionalidade no código.
❌ **Gabarito: ERRADO (Falso)** A afirmativa está **incorreta**. Justificativa técnica (padrão CESPE/Cebraspe): No contexto de **Servlets Java**, há uma **diferença fundamental** entre **parâmetros** e **atributos** da requisição. --- 🔹 `getParameter("nome")` ✅ * Recupera **dados enviados pelo cliente** na requisição HTTP: * formulário HTML (``) * query string * corpo do `POST` * É exatamente o caso do código apresentado, que trata dados submetidos por um formulário. ```java String nome = request.getParameter("nome"); ``` --- 🔹 `getAttribute("nome")` ❌ * Recupera **objetos previamente armazenados no servidor** na requisição: * via `request.setAttribute("nome", valor)` * geralmente usados para comunicação entre servlets ou JSPs * **Não acessa dados do formulário** automaticamente. ```java String nome = (String) request.getAttribute("nome"); ``` --- ❌ Por que há perda de funcionalidade? * O código **não define nenhum atributo** chamado `"nome"` usando `setAttribute`. * Ao substituir `getParameter` por `getAttribute`, a variável `nome` passaria a ser **`null`**, quebrando a lógica de exibição da resposta. 📌 Em provas do **CESPE/Cebraspe**, trocar **parâmetro** por **atributo** **não é equivalente** e caracteriza erro conceitual clássico. --- ✅ Conclusão A linha **não pode ser alterada sem perda de funcionalidade**. 👉 **Resposta final: ERRADO.**
70
0. (CESPE – Pref. Barra dos Coqueiros – 2020) A máquina virtual do Java (JVM) utiliza uma tecnologia especificamente para aumentar o desempenho da aplicação, identificando códigos que serão muito executados, normalmente dentro de loops. Essa tecnologia é chamada de a) hotspot. b) bytecode. c) compilação estática. d) JRE (Java Runtime Environment). e) JDK (Java Development Kit).
✅ **Gabarito: letra A) hotspot** **Justificativa:** A **JVM (Java Virtual Machine)** utiliza a tecnologia chamada **HotSpot** para **aumentar o desempenho da aplicação**. 📌 **HotSpot** funciona da seguinte forma: * Identifica **trechos de código executados com muita frequência** (*hot spots*), normalmente: * dentro de **loops**, * métodos chamados repetidamente; * Esses trechos são então **compilados dinamicamente (JIT – Just-In-Time)** para código nativo otimizado; * O resultado é **execução mais rápida** em tempo de execução. Análise das alternativas: * **a) hotspot** ✅ ✔ Tecnologia da JVM voltada à **otimização dinâmica de desempenho**. * **b) bytecode** ❌ Código intermediário executado pela JVM, não uma tecnologia de otimização. * **c) compilação estática** ❌ Java utiliza majoritariamente **compilação dinâmica (JIT)**, não estática. * **d) JRE (Java Runtime Environment)** ❌ Ambiente de execução, não uma tecnologia específica de otimização. * **e) JDK (Java Development Kit)** ❌ Kit de desenvolvimento, não relacionado à execução otimizada. 👉 **Resposta correta:** **A) hotspot**.
71
1. (CESPE / TRT-PA e AP – 2016) Acerca de DevOps, assinale a opção correta. a) O DevOps concentra-se em reunir diferentes processos e executá-los mais rapidamente e com mais frequência, o que gera baixa colaboração entre equipes. b) O DevOps tem como princípio produzir, a partir da avaliação dos times de desenvolvimento do serviço, grandes mudanças e farta documentação com valor agregado para os usuários, assemelhando-se, por isso, com objetivos dos métodos iterativos e em cascata. c) A infraestrutura de nuvem de provedores internos e externos vem restringindo o uso de DevOps pelas organizações. d) O DevOps parte da premissa de adoção de grandes equipes de especialistas, com a menor interação possível, visando à padronização de processos e à mínima automação de atividades. e) Atividades típicas em DevOps compreendem teste do código automatizado, automação de fluxos de trabalho e da infraestrutura e requerem ambientes de desenvolvimento e produção idênticos.
✅ **Gabarito: letra E** **Justificativa (padrão CESPE/Cebraspe):** A alternativa **E** é a **única correta**, pois descreve adequadamente os **princípios e práticas do DevOps**. --- ✅ **e) Correta** > *Atividades típicas em DevOps compreendem teste do código automatizado, automação de fluxos de trabalho e da infraestrutura e requerem ambientes de desenvolvimento e produção idênticos.* ✔ DevOps enfatiza: * **Automação de testes** (CI – Continuous Integration); * **Automação de pipelines, fluxos e infraestrutura** (CI/CD, Infrastructure as Code); * **Paridade entre ambientes** (desenvolvimento, homologação e produção), reduzindo erros do tipo *“funciona na minha máquina”*. --- ❌ Análise das demais alternativas: * **a) Incorreta** ❌ DevOps **aumenta** a colaboração entre equipes (Dev + Ops), não reduz. * **b) Incorreta** ❌ DevOps prioriza **pequenas mudanças frequentes**, pouca documentação excessiva e **valor contínuo ao usuário**, aproximando-se de métodos ágeis — não do cascata. * **c) Incorreta** ❌ A **nuvem favorece** DevOps, pois facilita automação, escalabilidade e provisionamento rápido. * **d) Incorreta** ❌ DevOps prega **equipes integradas, alta interação e forte automação**, exatamente o oposto do que foi afirmado. --- 🎯 **Conclusão** A alternativa que reflete corretamente os fundamentos do **DevOps** é: 👉 **E** ✅
72
2. (CESPE / TRE-PE – 2017) O DevOps consiste em: a) um processo similar ao IRUP (IBM Rational Unified Process), que tem como objetivo dividir o processamento em fases e disciplinas de software para paralelizar as ações de desenvolvimento e de manutenção das soluções. b) uma plataforma aberta cuja função é substituir a virtualização de aplicações e serviços em containers e, com isso, agilizar a implantação de soluções de software. c) um aplicativo que permite o gerenciamento de versões de códigos-fonte e versões de programas, bem como a implantação da versão mais recente de um software em caso de falha. d) um processo de promoção de métodos que objetivam aprimorar a comunicação, tornando a colaboração eficaz especialmente entre os departamentos de desenvolvimento e teste e entre os departamentos de operações e serviço para o negócio. e) uma metodologia ágil que, assim como a XP (extreme programming) e o Scrum, tem foco na gestão de produtos complexos relativos à equipe de desenvolvimento.
✅ **Gabarito: letra D** **Justificativa (padrão CESPE/Cebraspe):** A alternativa **D** é a **correta**, pois define adequadamente o conceito de **DevOps**. --- ✅ **d) Correta** > *um processo de promoção de métodos que objetivam aprimorar a comunicação, tornando a colaboração eficaz especialmente entre os departamentos de desenvolvimento e teste e entre os departamentos de operações e serviço para o negócio.* ✔ **DevOps** é um **conjunto de práticas, cultura e métodos** que: * promovem **integração e colaboração**; * reduzem silos entre **desenvolvimento (Dev)** e **operações (Ops)**; * visam **entrega contínua de valor ao negócio**; * enfatizam **automação, comunicação e feedback contínuo**. --- ❌ Análise das demais alternativas: * **a) Incorreta** ❌ DevOps **não é um processo estruturado em fases** como o RUP/IRUP. * **b) Incorreta** ❌ DevOps **não é uma plataforma** nem substitui containers ou virtualização. * **c) Incorreta** ❌ Descreve ferramentas como **Git**, **SVN** ou **CI/CD**, não o conceito de DevOps. * **e) Incorreta** ❌ DevOps **não é uma metodologia ágil**, embora se relacione e complemente práticas ágeis. --- 🎯 **Conclusão** A definição que melhor representa **DevOps** é: 👉 **D** ✅
73
3. (CESPE / CEBRASPE - 2022 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da Informação) A respeito de testes automatizados, no contexto de DevOps e DevSecOps, assinale a opção correta. a) Em um teste unitário, os métodos da classe sendo testada e suas dependências podem ter relação com recursos externos. b) Os bugs são detectados no final do ciclo de desenvolvimento, o que pode aumentar o tempo na criação de novos produtos. c) Os testes unitários são testes de caixa preta com cada função que compõe o software. d) O TDD (Test Driven Development) eleva o nível dos testes unitários e tem como característica criar a classe de testes antes da classe de produção, de forma que os testes guiem o código a ser implementado. e) Os testes de integração são caracterizados pela verificação de partes internas do sistema, que se inter-relacionam entre si, conforme definido pelos clientes.
✅ **Gabarito: letra D** **Justificativa (padrão CESPE/Cebraspe):** A alternativa **D** é a **única correta**, pois descreve com precisão o conceito de **TDD (Test Driven Development)** no contexto de **DevOps/DevSecOps**. --- ✅ **d) Correta** > *O TDD (Test Driven Development) eleva o nível dos testes unitários e tem como característica criar a classe de testes antes da classe de produção, de forma que os testes guiem o código a ser implementado.* ✔ No **TDD**: * primeiro escreve-se o **teste** (que falha); * depois escreve-se o **código mínimo** para o teste passar; * em seguida, ocorre a **refatoração**; * os **testes unitários guiam o desenvolvimento** do código. Esse ciclo está totalmente alinhado com práticas modernas de **DevOps e DevSecOps**. --- ❌ Análise das demais alternativas: * **a) Incorreta** ❌ Testes unitários **não devem depender de recursos externos** (banco, rede, arquivos). Dependências externas devem ser **mockadas**. * **b) Incorreta** ❌ Em DevOps/DevSecOps, busca-se detectar bugs **o mais cedo possível** (*shift left*), e não no final do ciclo. * **c) Incorreta** ❌ Testes unitários são **tipicamente testes de caixa branca**, pois conhecem a implementação interna. * **e) Incorreta** ❌ Testes de integração verificam a **integração entre componentes**, mas **não são definidos pelos clientes** (isso é mais associado a testes de aceitação). --- 🎯 **Conclusão** A opção correta é: 👉 **D** ✅
74
4. (CESPE / CEBRASPE - 2024 - APEX Brasil - Analista - Operações e Segurança de Tecnologia da Informação (TIC) - Especialidade: Infraestrutura de TIC) Assinale a opção em que todas as ferramentas apresentadas são usadas para aplicação do conceito DevOps e DevSecOps. A) NGIX, Zabbix, Terraform, GitLab e Teams B) Azure DevOps, Jira, Trello, Confluence e WhatsApp C) GitHub, Docker, Vagrant, Jenkins, Kubernetes e Nagios D) Ansible, Puppet, Gradle, Lync, Flutter e Eclipse
✅ **Gabarito: letra C** **Justificativa (padrão CESPE/Cebraspe):** A alternativa **C** é a **única em que todas as ferramentas estão diretamente associadas a práticas de DevOps e DevSecOps**, cobrindo automação, versionamento, CI/CD, conteinerização, orquestração e monitoramento. --- ✅ **C) Correta — GitHub, Docker, Vagrant, Jenkins, Kubernetes e Nagios** Essas ferramentas se encaixam claramente no ecossistema DevOps/DevSecOps: * **GitHub** → versionamento de código e colaboração * **Docker** → conteinerização de aplicações * **Vagrant** → provisionamento de ambientes reprodutíveis * **Jenkins** → CI/CD (integração e entrega contínuas) * **Kubernetes** → orquestração de containers * **Nagios** → monitoramento de infraestrutura e serviços 📌 Conjunto **coerente, técnico e alinhado** ao ciclo DevOps de ponta a ponta. --- ❌ Análise das demais alternativas: * **A) Incorreta** ❌ Apesar de conter ferramentas DevOps (Terraform, GitLab, Zabbix), inclui **Teams**, que é ferramenta de comunicação corporativa, **não DevOps**. * **B) Incorreta** ❌ Ferramentas majoritariamente de **gestão e comunicação** (Jira, Trello, Confluence, WhatsApp), **não DevOps técnico**. * **D) Incorreta** ❌ Mistura ferramentas DevOps (Ansible, Puppet, Gradle) com: * **Lync** (comunicação), * **Flutter** (framework de desenvolvimento), * **Eclipse** (IDE), que **não são ferramentas DevOps**. --- 🎯 **Conclusão** A única opção em que **todas as ferramentas são efetivamente usadas em DevOps/DevSecOps** é: 👉 **C** ✅
75
5. (CESPE / CEBRASPE - 2022 - APEX Brasil - Perfil 7: Tecnologia da Informação e Comunicação (TIC) - Especialidade: Sistemas e Aplicações) São tarefas do DevOps o(a) I monitoramento (monitor). II planejamento (plan). III codificação (code). Assinale a opção correta. A) Apenas os itens I e II estão certos. B) Apenas os itens I e III estão certos. C) Apenas os itens II e III estão certos. D) Todos os itens estão certos.
✅ **Gabarito: letra D — Todos os itens estão certos** **Justificativa (padrão CESPE/Cebraspe):** O **DevOps** é entendido como um **conjunto integrado de práticas ao longo de todo o ciclo de vida do software**, e não apenas como automação de deploy ou operações. Os itens apresentados correspondem a **etapas clássicas do ciclo DevOps**, frequentemente representadas pelo *DevOps Infinity Loop*: * **I. Monitoramento (monitor)** ✅ Parte essencial do DevOps, envolvendo: * monitoramento de aplicações, * infraestrutura, * logs, * métricas e feedback contínuo. * **II. Planejamento (plan)** ✅ Inclui: * definição de requisitos, * priorização, * backlog, * alinhamento com o negócio. É uma etapa fundamental do ciclo contínuo. * **III. Codificação (code)** ✅ Relaciona-se diretamente às atividades de: * desenvolvimento, * versionamento de código, * integração contínua (CI). 📌 Em DevOps, **planejar, codificar e monitorar** fazem parte do mesmo fluxo contínuo, integrando **desenvolvimento e operações**. --- 🎯 **Conclusão** Como **todos os itens listados são tarefas do DevOps**, a alternativa correta é: 👉 **D) Todos os itens estão certos.**
76
51. O operador '==' em Java pode ser usado para comparar o conteúdo de dois objetos String.
❌ **Falsa.** Em **Java**, o operador **`==`** **não compara o conteúdo** de dois objetos `String`. 🔹 O **`==`** verifica se **as duas variáveis apontam para o mesmo objeto na memória** (comparação de referência). 🔹 Para comparar o **conteúdo textual** das `String`, deve-se usar o método **`equals()`**. 📌 Exemplo correto: ```java String a = new String("Java"); String b = new String("Java"); a == b // false (referências diferentes) a.equals(b) // true (conteúdo igual) ``` ✔ Portanto, para comparar o conteúdo de `String`, **use sempre `equals()`**, e não `==`.
77
52. Em Java, um bloco 'try-catch-finally' pode ter múltiplos blocos 'catch' para capturar diferentes tipos de exceções, mas é obrigatório ter um bloco 'finally' ao final da estrutura.
❌ **Falsa.** Em **Java**, um bloco `try` **pode ter múltiplos blocos `catch`**, mas **o bloco `finally` não é obrigatório**. 🔹 As formas válidas incluem: * `try` + `catch` * `try` + `finally` * `try` + múltiplos `catch` * `try` + múltiplos `catch` + `finally` 🔹 O **`finally`** é usado para código que deve ser executado **independentemente de ocorrer exceção**, mas sua presença é **opcional**. 📌 Portanto, a afirmação está incorreta ao dizer que o `finally` é obrigatório.
78
53. Uma classe em Java pode implementar várias interfaces.
✅ **Verdadeira.** Em **Java**, uma **classe pode implementar várias interfaces** simultaneamente. 🔹 Isso permite que a classe herde **múltiplos comportamentos**, já que Java **não permite herança múltipla de classes**, mas **permite múltiplas interfaces**. 📌 Exemplo: ```java class MinhaClasse implements InterfaceA, InterfaceB { // implementação dos métodos } ``` ✔ Portanto, a afirmação está correta.
79
54. O operador ternário em Java, também conhecido como operador condicional, pode ser usado para simplificar declarações if-else ao avaliar uma expressão booleana e retornar um dos dois valores possíveis com base no resultado da avaliação.
✅ **Verdadeira.** O **operador ternário** em **Java** (também chamado de **operador condicional**) serve exatamente para **simplificar estruturas `if-else` simples**. 🔹 Ele avalia uma **expressão booleana** e retorna **um de dois valores possíveis**, conforme o resultado da condição. 📌 Sintaxe: ```java condicao ? valorSeVerdadeiro : valorSeFalso; ``` ✔ Portanto, a afirmação está correta.
80
55. As variáveis declaradas dentro de um bloco try em Java são acessíveis fora do bloco try-catch-finally.
❌ **Falsa.** Em **Java**, variáveis declaradas **dentro de um bloco `try`** possuem **escopo limitado** a esse bloco (e, em alguns casos, aos blocos `catch` e `finally` associados, dependendo da declaração). 🔹 Em regra geral: * uma variável declarada **dentro do `try`** **não é acessível fora** da estrutura `try-catch-finally`. 📌 Exemplo: ```java try { int x = 10; } // x não é visível aqui ``` ✔ Portanto, a afirmação está incorreta.
81
56. Interfaces em Java podem ter métodos estáticos e métodos padrão com corpo desde o Java 8.
✅ **Verdadeira.** Desde o **Java 8**, **interfaces podem conter métodos com implementação**: 🔹 **Métodos padrão (*default*)**: * possuem corpo; * permitem adicionar novos métodos a interfaces **sem quebrar** classes que já as implementam. 🔹 **Métodos estáticos**: * também podem ter corpo; * pertencem à **interface**, não às classes que a implementam. 📌 Exemplo: ```java interface Exemplo { default void metodoPadrao() { System.out.println("Método default"); } static void metodoEstatico() { System.out.println("Método estático"); } } ``` ✔ Portanto, a afirmação está correta.
82
57. Quando se declara uma classe em Java como 'final', essa classe não pode ser estendida, mas seus métodos podem ser sobrescritos por qualquer subclasse.
❌ **Falsa.** Quando uma **classe é declarada como `final` em Java**, ela **não pode ser estendida** por nenhuma outra classe. 🔹 Se a classe **não pode ter subclasses**, então **não existe possibilidade de sobrescrita de métodos**, pois **não há subclasses** para fazer isso. 🔹 A sobrescrita de métodos só ocorre quando uma classe **herda** de outra — o que é proibido no caso de classes `final`. 📌 Portanto, a afirmação está incorreta ao dizer que os métodos podem ser sobrescritos por subclasses.
83
58. Um método 'synchronized' em Java garante que apenas uma thread por vez possa executar esse método em qualquer instância de uma classe.
❌ **Falsa.** Um método **`synchronized`** em Java **não garante exclusão mútua em todas as instâncias da classe** — isso depende do **tipo de sincronização**. 🔹 **Método `synchronized` de instância**: * o bloqueio é feito no **objeto (`this`)**; * **uma thread por vez por instância**, **não por classe**; * duas threads podem executar o mesmo método simultaneamente **em instâncias diferentes**. 🔹 **Método `static synchronized`**: * o bloqueio é feito no **objeto `Class`**; * nesse caso, **apenas uma thread por vez em toda a classe**, independentemente da instância. 📌 A afirmação erra ao generalizar que isso vale para **qualquer instância**. Isso só é verdadeiro para **métodos `static synchronized`**, não para métodos de instância.
84
59. O método System.gc() em Java é uma chamada direta e garantida para o Garbage Collector.
❌ **Falsa.** Em **Java**, a chamada **`System.gc()` não é garantida** como uma execução imediata do **Garbage Collector**. 🔹 Ela funciona apenas como uma **sugestão (hint)** para a JVM, indicando que seria um bom momento para executar a coleta de lixo. 🔹 A **JVM decide** se, quando e como o Garbage Collector será executado, com base em suas próprias heurísticas. 📌 Portanto, a afirmação está incorreta ao dizer que `System.gc()` é uma chamada **direta e garantida**.
85
60. Em Java, é possível sobrecarregar o método main.
✅ **Verdadeira.** Em **Java**, é **possível sobrecarregar o método `main`**, ou seja, definir **múltiplos métodos `main`** com assinaturas diferentes na mesma classe. 🔹 Exemplo válido: ```java public class Exemplo { public static void main(String[] args) { main(10); } public static void main(int x) { System.out.println("Main sobrecarregado: " + x); } } ``` 🔹 **Importante**: * A JVM **só reconhece como ponto de entrada** o método: ```java public static void main(String[] args) ``` * Os outros `main` sobrecarregados **não são chamados automaticamente**, apenas se forem invocados explicitamente no código. 📌 Portanto, a sobrecarga do método `main` é permitida, embora **apenas uma assinatura seja usada para iniciar o programa**.
86
61. Jenkins é uma ferramenta de Integração Contínua (CI) que também suporta pipelines de entrega contínua (CD).
✅ **Verdadeira.** O **Jenkins** é amplamente conhecido como uma ferramenta de **Integração Contínua (CI)** e também **suporta Entrega Contínua (CD)**. 🔹 Com o uso de **pipelines** (especialmente o **Jenkins Pipeline**, definido em *Jenkinsfile*), é possível: * automatizar **build**, **testes** e **deploy**; * implementar fluxos completos de **CI/CD**; * integrar com diversas ferramentas (Git, Docker, Kubernetes, etc.). 📌 Portanto, a afirmação está correta: o Jenkins vai além de CI e é amplamente usado em **pipelines de entrega contínua**.
87
62. O processo de 'Shift Left' no DevSecOps implica na introdução de práticas de segurança nas últimas etapas do ciclo de desenvolvimento de software.
❌ **Falsa.** O conceito de **Shift Left** no **DevSecOps** significa exatamente o **oposto** do que a afirmação descreve. 🔹 **Shift Left** implica em **antecipar** as práticas de **segurança** para as **primeiras etapas** do ciclo de desenvolvimento, como: * levantamento de requisitos, * design, * codificação, * integração contínua. 🔹 A ideia é **detectar e corrigir vulnerabilidades o mais cedo possível**, reduzindo custos, retrabalho e riscos em produção. 📌 Portanto, a afirmação está incorreta ao dizer que o Shift Left introduz segurança **nas últimas etapas** do ciclo de desenvolvimento.
88
63. Jenkins, uma ferramenta amplamente utilizada em DevOps, é especializada em orquestração de contêineres, permitindo a automação do escalonamento e gerenciamento de contêineres Docker em ambientes de produção.
❌ **Falsa.** O **Jenkins** é uma ferramenta de **automação e CI/CD**, **não** uma solução especializada em **orquestração de contêineres**. 🔹 O Jenkins pode: * **construir imagens Docker**, * **executar testes** em contêineres, * **acionar deploys** em ambientes conteinerizados. 🔹 Porém, a **orquestração**, o **escalonamento** e o **gerenciamento de contêineres em produção** são funções de ferramentas como: * **Kubernetes**, * Docker Swarm, * OpenShift. 📌 Portanto, a afirmação está incorreta ao atribuir ao Jenkins o papel de orquestrador de contêineres.
89
64. O objetivo do Test-Driven Development (TDD) é escrever os testes depois que o código de produção está completo.
❌ **Falsa.** O **Test-Driven Development (TDD)** segue exatamente o **fluxo oposto** ao descrito. 🔹 No TDD, o ciclo clássico é: 1. **Escrever o teste primeiro** (que inicialmente falha), 2. **Escrever o código mínimo** para fazer o teste passar, 3. **Refatorar** o código mantendo os testes verdes. 🔹 O objetivo é **guiar o desenvolvimento pelo teste**, melhorar o **design**, aumentar a **qualidade** e reduzir defeitos. 📌 Portanto, a afirmação está incorreta ao dizer que os testes são escritos **após** o código de produção estar completo.
90
65. O GitLab CI/CD é uma ferramenta exclusivamente para controle de versão de código, sem capacidades de integração ou entrega contínua.
❌ **Falsa.** O **GitLab CI/CD** **não é apenas uma ferramenta de controle de versão**. 🔹 Embora o **GitLab** inclua **controle de versão Git**, ele também oferece **CI/CD nativo**, permitindo: * automação de **build**, **testes** e **deploy**; * definição de pipelines por meio do arquivo **`.gitlab-ci.yml`**; * implementação completa de **Integração Contínua e Entrega/Implantação Contínua**. 📌 Portanto, a afirmação está incorreta: o GitLab vai muito além do versionamento e é uma **plataforma completa de DevOps com CI/CD integrado**.
91
66. Infraestrutura como Código (IaC) pode ser aplicada em ambientes de nuvem pública, privada e em data centers on-premises.
✅ **Verdadeira.** A **Infraestrutura como Código (IaC)** **pode ser aplicada em praticamente qualquer ambiente**, incluindo: 🔹 **Nuvem pública** (AWS, Azure, GCP), 🔹 **Nuvem privada**, 🔹 **Data centers on-premises**. Ferramentas de IaC como **Terraform**, **Ansible**, **CloudFormation** e **Pulumi** permitem **provisionar, configurar e gerenciar infraestrutura de forma automatizada**, reproduzível e versionada, independentemente do local onde os recursos estão hospedados. 📌 Portanto, a afirmação está correta.
92
67. Kubernetes é uma plataforma que permite a automação do ciclo de vida completo de aplicativos, incluindo implantação, escalonamento e gerenciamento de contêineres em um ambiente distribuído.
✅ **Verdadeira.** O **Kubernetes** é exatamente uma plataforma voltada para a **orquestração de contêineres** em ambientes distribuídos. 🔹 Ele automatiza: * **implantação (deploy)** de aplicações, * **escalonamento** automático, * **gerenciamento do ciclo de vida** dos contêineres, * **auto-recuperação** (*self-healing*), * balanceamento de carga. 📌 Portanto, a afirmação descreve corretamente as funcionalidades e o propósito do Kubernetes.
93
68. Terraform e Ansible são ferramentas usadas para orquestração de contêineres, semelhantes ao Kubernetes.
❌ **Falsa.** **Terraform** e **Ansible** **não são ferramentas de orquestração de contêineres** como o **Kubernetes**. 🔹 **Terraform**: * é uma ferramenta de **Infraestrutura como Código (IaC)**; * usada para **provisionar recursos** (VMs, redes, clusters, serviços de nuvem). 🔹 **Ansible**: * é uma ferramenta de **automação e gerenciamento de configuração**; * usada para **configurar servidores, instalar software e automatizar tarefas**. 🔹 **Kubernetes**: * é especializado em **orquestração de contêineres** (deploy, escalonamento, self-healing). 📌 Portanto, a afirmação está incorreta ao equiparar Terraform e Ansible ao Kubernetes.
94
69. No DevSecOps, 'Shift Left' refere-se a mover as práticas de segurança para o final do ciclo de desenvolvimento.
❌ **Falsa.** No **DevSecOps**, o conceito de **Shift Left** significa **antecipar** as práticas de **segurança** para as **etapas iniciais** do ciclo de desenvolvimento, **não para o final**. 🔹 Isso inclui incorporar segurança já em: * requisitos, * design, * codificação, * pipelines de CI. 🔹 O objetivo é **detectar vulnerabilidades mais cedo**, reduzir custos e aumentar a qualidade do software. 📌 Portanto, a afirmação está incorreta.
95
70. Kubernetes é uma ferramenta de automação de TI usada principalmente para configuração e provisionamento de servidores, similar ao Ansible.
❌ **Falsa.** O **Kubernetes** **não é uma ferramenta de configuração e provisionamento de servidores**, como o **Ansible**. 🔹 **Kubernetes**: * é uma plataforma de **orquestração de contêineres**; * gerencia **deploy**, **escalonamento**, **auto-recuperação** e **balanceamento de carga** de aplicações conteinerizadas. 🔹 **Ansible**: * é voltado para **automação de TI e gerenciamento de configuração**; * usado para **provisionar e configurar servidores e serviços**. 📌 Portanto, a afirmação está incorreta ao comparar Kubernetes a uma ferramenta como o Ansible.