WorksheetsQuestões de Programação Orientada a Objetos
Total questions: 80
Worksheet time: 40mins
Noah está desenvolvendo um aplicativo em Java para diferentes sistemas operacionais, como Windows, Linux e macOS. Ele sabe que o compilador javac gera bytecodes a partir do código-fonte Java, e que esses bytecodes podem ser executados em qualquer computador que tenha a Máquina Virtual Java (JVM) instalada. Noah quer garantir que seu aplicativo seja portátil e funcione em todas essas plataformas sem precisar recompilar o código para cada uma delas. Considerando esse cenário, qual das afirmações abaixo está correta?
O bytecode é específico de cada arquitetura de hardware e precisa ser recompilado para cada plataforma.
A JVM permite executar o mesmo bytecode em diferentes plataformas, garantindo portabilidade.
A compilação em Java gera diretamente código nativo, dispensando a JVM.
O garbage collector da JVM transforma bytecode em código nativo.
O POO impede a utilização de bytecodes na JVM.
Aria está estudando para uma prova de programação em Java e precisa lembrar quais são os tipos primitivos da linguagem. Quais das opções abaixo lista corretamente os tipos primitivos em Java?
byte, short, int, long, float, double, char, boolean
String, Integer, Double, Boolean
array, list, map, set
void, enum, class, interface
Abigail está desenvolvendo um sistema de controle financeiro em Java e precisa garantir que as operações matemáticas e conversões de tipos sejam feitas corretamente para evitar erros no processamento dos dados. Ela sabe que operadores aritméticos (+, -, *, /, %) aplicam-se a tipos numéricos; operadores relacionais (==, !=, <, >, <=, >=) servem para comparações; operadores lógicos (&&, ||, !) combinam expressões booleanas. Conversões entre tipos primitivos podem ocorrer implicitamente (widening) ou explicitamente (casting). Operações entre tipos diferentes geralmente promovem o menor para o tipo de maior capacidade. Erros de overflow não geram exceção em tipos inteiros e o valor simplesmente "transborda". Abigail deve ficar atenta à precisão em operações com float/double e ao uso de operadores em expressões que envolvem conversões. Analise as alternativas: Avalie as seguintes proposições. I. O tipo int em Java tem tamanho fixo de 32 bits. II. A operação 1 / 2 quando ambos operandos são int resulta em 0. III. Uma conversão explícita pode causar perda de informação quando se converte double para int. IV. Em Java, boolean pode ser implicitamente convertido em int. Assinale a alternativa correta:
A) I e II, apenas.
B) II e III, apenas.
C) I, II e III, apenas.
D) III e IV, apenas.
E) I, II, III e IV.
Avery está desenvolvendo um sistema de cadastro de usuários em Java e precisa decidir qual estrutura de controle utilizar para lidar com diferentes tipos de entrada de dados. Segundo o texto, qual a afirmativa deve ser assinalada como correta sobre switch em Java moderno:
A) switch não aceita String em nenhuma versão do Java.
B) switch pode aceitar String desde Java 7.
C) switch não precisa de break porque sempre encerra cada case automaticamente.
D) switch aceita qualquer tipo de objeto como expressão de seleção.
E) switch substitui completamente a necessidade de if-else.
Nora está programando um sistema de controle de acesso em Java. Ela precisa usar estruturas de repetição para verificar tentativas de login dos usuários. Nora sabe que o while avalia a condição antes de entrar no laço, o do-while executa o corpo pelo menos uma vez antes de avaliar a condição, e o for é útil para contagens, pois permite inicialização, condição e iteração no mesmo cabeçalho. Ela também utiliza as palavras-chave break e continue para alterar o fluxo: break encerra o laço corrente, continue salta para a próxima iteração. Em loops aninhados, break e continue afetam apenas o laço mais interno, a menos que sejam usados com rótulos. O return faz o método sair imediatamente, ignorando iterações remanescentes. A escolha correta da estrutura ajuda Nora a evitar erros de lógica, como loops infinitos.
Um do-while sempre executa seu corpo pelo menos uma vez.
continue em um for pula diretamente para a execução do incremento e reavaliação da condição.
break com rótulo pode interromper um laço externo.
Aria está programando um sistema de controle de estoque e está revisando o comportamento de comandos dentro de laços. Ela encontra a seguinte afirmação: "IV. return dentro de um laço encerra apenas a iteração atual do laço, continuando o método." Considerando o contexto do desenvolvimento de software, qual das alternativas está correta?
A) I e II, apenas.
B) II e III, apenas.
C) I, II e III, apenas.
D) III e IV, apenas.
E) I, II, III e IV.
Mason está desenvolvendo um sistema de cadastro de veículos em Java. Ele precisa decidir como organizar os atributos e métodos das classes. Por exemplo, todos os veículos devem compartilhar um contador total de veículos cadastrados, mas cada veículo tem sua própria placa e cor. Mason também quer garantir que os dados dos veículos sejam acessados de forma controlada, usando métodos apropriados. Considerando boas práticas de orientação a objetos em Java, qual das afirmações abaixo está correta?
A) Atributos static são únicos por classe e compartilhados entre todas as instâncias.
B) Construtores nunca podem ser sobrecarregados em Java.
C) Getters e setters quebram sempre o princípio de encapsulamento.
D) O compilador nunca cria um construtor padrão automaticamente.
E) Métodos static podem acessar diretamente atributos de instância sem referência a um objeto.
Abigail está desenvolvendo um sistema em Java para uma empresa e precisa garantir que os dados sensíveis das classes estejam protegidos contra acessos indevidos. Ela utiliza os modificadores de acesso: private, protected, public e o acesso de pacote (default). private restringe acesso à própria classe; protected permite acesso à mesma classe, subclasses e classes do mesmo pacote; public permite acesso por qualquer código; acesso default permite acesso dentro do mesmo pacote. O uso criterioso desses modificadores melhora a manutenção e protege invariantes. Getters e setters fornecem pontos controlados de acesso a atributos privados, permitindo validações e eventos em pontos de escrita/leitura. Pacotes e modificadores de acesso são instrumentos de organização e proteção em sistemas Java. Analise as alternativas: I. private impede acesso direto ao membro por classes fora do mesmo arquivo, mesmo que sejam subclasses. II. protected permite acesso em subclasses localizadas em pacotes diferentes. III. O modificador public permite acesso de qualquer classe, independente do pacote. IV. O acesso default (sem modificador) permite acesso apenas por classes no mesmo pacote. Assinale a alternativa correta:
A) I e II, apenas.
B) II e III, apenas.
C) I, II e IV, apenas.
D) III e IV, apenas.
E) I, II, III e IV.
Aria está desenvolvendo uma aplicação em Java e precisa garantir que suas classes sejam inicializadas corretamente. Ela leu que um construtor pode chamar outro construtor da mesma classe usando this(...) como primeira instrução do construtor. Também sabe que, se uma classe não declara nenhum construtor, o compilador fornece um construtor padrão sem argumentos. A ausência de um construtor sem argumentos pode afetar frameworks que usam reflexão para instanciar classes. Construtores private são usados em padrões como Singleton para controlar a criação de instâncias. Compreender a semântica de this(...) e sobrecarga facilita inicializações seguras e consistentes.
Considerando o cenário acima, assinale a alternativa correta.
Um construtor pode chamar outro construtor da mesma classe usando this(...) em qualquer posição do corpo.
Se nenhum construtor for declarado, o compilador providencia automaticamente um construtor padrão.
Construtores não podem ser sobrecarregados em Java.
private é um modificador inválido para construtores.
this não pode ser usado em construtores para diferenciar parâmetros de atributos.
Oliver está desenvolvendo um sistema bancário em Java. Ele precisa garantir que, ao comparar dois objetos Conta, a comparação seja feita pelo conteúdo (por exemplo, número da conta e titular) e não apenas pela referência dos objetos. Ele também está lidando com conversões entre tipos primitivos e objetos, sabendo que conversões entre tipos primitivos podem ser implícitas (widening) ou explícitas (casting), enquanto conversões entre objetos exigem compatibilidade de herança ou interfaces e podem lançar ClassCastException em tempo de execução se incorretas. Oliver deve decidir quando usar == para identidade de referência ou equals() para igualdade de conteúdo, e lembrar de sobrescrever hashCode() ao sobrescrever equals().
Verdadeiro
Falso
Elijah está revisando o código de um sistema em Java e encontra as seguintes afirmações: II. equals() por padrão, na classe Object, compara conteúdo das instâncias. III. Converter um objeto para um tipo incompatível pode lançar ClassCastException. IV. Sempre que equals() é sobrescrito, deve-se também sobrescrever hashCode().
Com base no cenário apresentado, quais afirmações estão corretas?
A) I e III, apenas.
B) II e IV, apenas.
C) I, III e IV, apenas.
D) III e IV, apenas.
E) I, II, III e IV.
Mia está desenvolvendo um sistema de cadastro de veículos em Java. Ela cria uma classe Veiculo com atributos e métodos comuns, e depois define uma subclasse Carro que herda de Veiculo. Mia sabe que pode usar a palavra-chave extends para indicar herança entre as classes, e implements para indicar que uma classe fornece implementações para métodos de uma interface. Ela também aprende que pode sobrescrever métodos da superclasse para especializar o comportamento na subclasse, mas métodos final não podem ser sobrescritos, e classes final não podem ter subclasses. A chamada a super() em um construtor invoca o construtor da superclasse; se omitida explicitamente, o compilador insere uma chamada ao construtor padrão sem argumentos da superclasse. Mia deve usar herança quando há relação de tipo “é-um” (is-a) para modelar corretamente hierarquias. Segundo o cenário, marque a afirmativa correta.
Um método final pode ser sobrescrito pela subclasse.
A chamada a super() em construtores é opcional apenas quando a superclasse tem um construtor padrão sem argumentos.
extends é usado para declarar que uma classe implementa uma interface.
Classes final podem servir como superclasses para outras classes.
Herança é utilizada para modelar relações “tem-um” (has-a).
Emma está desenvolvendo um sistema de gerenciamento de veículos em Java. Ela precisa decidir entre usar classes abstratas e interfaces para estruturar seu código. Emma sabe que classes abstratas podem declarar métodos abstratos e métodos concretos, mas não podem ser instanciadas. Já as interfaces declaram métodos, mas desde Java 8 podem ter métodos default com implementação e métodos static. Emma também sabe que uma classe que implementa uma interface deve fornecer implementações para seus métodos abstratos, a menos que seja abstract. Além disso, interfaces permitem múltipla “herança” de tipo, enquanto Java não permite múltiplas heranças de classes concretas. Projetar APIs limpas muitas vezes envolve usar interfaces para separar contrato de implementação. Analise as alternativas: I. Uma classe abstrata pode ter métodos com implementação. II. Interfaces Java nunca puderam conter métodos com implementação. III. Uma classe pode implementar várias interfaces. IV. Uma interface pode ser instanciada diretamente com new. Assinale a alternativa correta:
A) I e III, apenas.
B) II e IV, apenas.
C) I, II e III, apenas.
D) III e IV, apenas.
E) I, II, III e IV.
Arjun está desenvolvendo um sistema em Java e precisa lidar com exceções. Com base nessa situação, assinale a alternativa correta sobre o tratamento de exceções em Java.
finally é executado apenas se nenhuma exceção for lançada.
throw é usado para declarar que um método pode lançar uma exceção.
Exceções verificadas devem ser tratadas ou declaradas com throws.
try-with-resources foi introduzido em Java 5.
RuntimeException é uma exceção verificada.
Arjun está desenvolvendo um sistema bancário em Java e precisa lidar com situações em que operações podem falhar, como ao tentar acessar um arquivo de dados que não existe. Ele sabe que pode usar a instrução throw dentro de um método para realmente lançar (instanciar e propagar) uma exceção, e que o uso de throws na assinatura do método indica que o método pode repassar determinadas exceções verificadas para o chamador. Exceções verificadas (por exemplo, IOException) obrigam o programador a tratar ou declarar throws; RuntimeException e subclasses são não verificadas. Lançar exceções apropriadas ajuda a tornar o comportamento de erro explícito e legível. Entender a diferença entre propagar e lançar é importante para a correta documentação e tratamento de erros.
I. throw efetivamente lança uma instância de Throwable.
II. throws na assinatura de método impede que o método lance exceções.
III. throws declara que o método pode propagar exceções para o chamador.
IV. throw e throws são intercambiáveis.
Grace está desenvolvendo um sistema de gerenciamento de biblioteca em Java e precisa escolher a coleção mais adequada para diferentes funcionalidades. Ela sabe que o framework de coleções oferece implementações como ArrayList, LinkedList, HashSet, TreeSet, HashMap e TreeMap, cada uma com características de complexidade e comportamento distintos: ArrayList é baseada em array dinâmico com acesso O(1) por índice; LinkedList é eficiente em inserções/exclusões em extremidades; HashSet e HashMap usam hashing para acesso amortizado O(1); TreeSet e TreeMap mantêm ordem e têm operações O(log n). A escolha correta depende de requisitos de ordenação, duplicidade e complexidade. Iteradores e a API Collections fornecem utilitários para manipulação. Conformação de chave/valor requer implementação apropriada de equals() e hashCode() para coleções baseadas em hashing. Qual das afirmações abaixo é correta sobre essas coleções?
ArrayList fornece acesso por índice em tempo O(1) amortizado.
TreeMap usa hashing para obter acesso O(1).
HashSet mantém elementos em ordem crescente natural.
LinkedList e ArrayList têm desempenho idêntico para acesso por índice.
HashMap garante ordem de inserção dos pares chave-valor.
Nora está desenvolvendo um sistema orientado a objetos para uma loja online. Ela decide organizar o sistema em camadas: apresentação, negócio (serviço) e persistência/dados. Essa separação facilita a manutenção, teste e evolução incremental do sistema. Nora opta por uma implementação progressiva, construindo e validando cada camada gradualmente, assegurando contratos entre elas. Assinale a alternativa correta sobre a estruturação em camadas:
A) Apenas a camada de apresentação é responsável pela persistência dos dados.
B) A separação em camadas dificulta a manutenção do sistema.
C) A implementação progressiva permite evolução incremental do sistema.
D) Todas as camadas devem ser implementadas simultaneamente.
E) A camada de negócio é responsável apenas pela interface com o usuário.
Daniel está desenvolvendo um sistema em Java para uma empresa e precisa garantir que o código seja bem organizado, reutilizável e fácil de manter. Ele decide separar o sistema em camadas claras, utilizando frameworks e padrões como DAO e Service para organizar as responsabilidades. Para evitar expor diretamente as entidades de persistência, Daniel utiliza DTOs na comunicação entre as camadas. Analise as alternativas: I. Separar em camadas melhora testabilidade e manutenção. II. DTOs são usados para evitar acoplamento entre camadas. III. Implementação progressiva incentiva construir todas as camadas simultaneamente para rapidez. IV. Padrões como DAO ajudam a isolar lógica de persistência. Assinale a alternativa correta:
A) I e II, apenas.
B) II e III, apenas.
C) I, II e IV, apenas.
D) III e IV, apenas.
E) I, II, III e IV.
Charlotte está desenvolvendo uma aplicação Java com interface gráfica. Ela percebe que, se não tomar cuidado, a interface pode travar quando muitos eventos acontecem ao mesmo tempo. Qual das seguintes funções é responsabilidade do Event Dispatch Thread (EDT) em Java para evitar esse problema?
Gerenciar a execução de eventos e atualizações de interface gráfica para evitar congelamento da UI.
Compilar o código-fonte Java para bytecode.
Controlar o acesso à internet de applets Java.
Executar operações matemáticas complexas em segundo plano.
Daniel está desenvolvendo uma aplicação Java com interface gráfica e está estudando diferentes abordagens para lidar com eventos de usuário. Segundo o texto que ele leu, assinale a alternativa correta sobre o modelo de eventos em Java.
Applets continuam sendo a forma recomendada para aplicações web modernas.
O modelo de eventos usa listeners para notificação de ações do usuário.
O Event Dispatch Thread pode ser ignorado sem risco de congelamento da GUI.
Eclipse não fornece recursos para desenvolvimento visual de interfaces.
Navegar entre frames em Java é impossível sem bibliotecas externas.
Jackson está desenvolvendo uma aplicação Java desktop para gerenciar uma pequena loja. Ele utiliza JFrame como janela principal, cria menus com JMenuBar, JMenu e JMenuItem, e precisa alternar entre diferentes telas de cadastro e relatórios. Para isso, Jackson considera usar CardLayout para trocar os painéis dentro do mesmo frame. Ele também sabe que a escolha do layout manager (BorderLayout, FlowLayout, GridLayout, etc.) pode afetar o posicionamento e redimensionamento dos componentes. Além disso, Jackson se preocupa em manipular a interface no Event Dispatch Thread usando SwingUtilities.invokeLater quando necessário, e trata eventos de menu com listeners, assim como faz com botões. Analise as alternativas: I. JFrame é comumente usado como janela principal em aplicações Swing. II. CardLayout facilita alternância entre diferentes painéis em um mesmo frame. III. JMenuBar é usado para criar menus; JMenuItem representa o item de menu. IV. Layout managers não influenciam o comportamento de redimensionamento de componentes.
A) I e II, apenas.
B) II e III, apenas.
C) I, II e III, apenas.
Priya está desenvolvendo uma aplicação Java que precisa acessar um banco de dados relacional para armazenar e recuperar informações de clientes. Ela utiliza JDBC (Java Database Connectivity) para conectar-se ao banco, enviar consultas SQL e manipular os resultados. Priya sabe que é necessário configurar drivers JDBC específicos para cada SGBD e fornecer URL de conexão, usuário e senha. Durante o desenvolvimento, ela utiliza objetos como Connection, Statement/PreparedStatement e ResultSet para realizar operações de persistência. Priya também aprende que PreparedStatement ajuda a prevenir SQL injection e melhora a performance em consultas repetidas. Para garantir a escalabilidade da aplicação, ela implementa pools de conexões e se preocupa em abrir e fechar recursos corretamente para evitar vazamentos. Além disso, Priya considera o uso de mapeadores objeto-relacional (ORM) para facilitar a tradução entre objetos Java e tabelas do banco, reduzindo o boilerplate.
JDBC não requer drivers específicos para cada SGBD.
PreparedStatement ajuda a prevenir injeção de SQL e pode melhorar performance.
ResultSet representa a conexão com o banco de dados.
Pools de conexão prejudicam a escalabilidade de aplicações.
ORM é incompatível com Java.
Emma está desenvolvendo uma aplicação corporativa utilizando uma ferramenta de desenvolvimento visual que suporta componentes. Ela precisa garantir que os componentes criados possam ser facilmente reutilizados, configurados visualmente e integrados com outros frameworks. Para isso, Emma segue convenções como construtor público sem argumentos, propriedades acessíveis via getters/setters, serializabilidade opcional e suporte a eventos. Por que a adoção dessas práticas é importante no contexto do desenvolvimento de componentes Java?
JavaBeans não são reutilizáveis.
JavaBeans não seguem convenções de getters/setters.
JavaBeans facilitam interoperabilidade e montagem visual.
JavaBeans não permitem introspecção.
JavaBeans não são suportados por IDEs.
Abigail está desenvolvendo uma aplicação Java e precisa criar componentes reutilizáveis usando JavaBeans. Analise as alternativas que Abigail considerou: I. JavaBean deve ter construtor público sem argumentos para ser manipulado por ferramentas visuais. II. Getters e setters são convenções obrigatórias para propriedades de JavaBean. III. JavaBeans nunca podem ser serializados. IV. Introspecção de beans permite que ferramentas listem propriedades e eventos. Assinale a alternativa correta:
I e II, apenas.
II e III, apenas.
I, II e IV, apenas.
III e IV, apenas.
I, II, III e IV.
Evelyn está desenvolvendo um sistema em Java e percebe que, ao compilar seu código fonte .java, são gerados arquivos .class. Cada vez que executa o sistema, a JVM carrega as classes conforme necessário usando carregadores de classe (class loaders). Durante a execução, Evelyn utiliza a API de reflexão para inspecionar e invocar métodos dinamicamente, mesmo sem conhecê-los em tempo de compilação. Compreender o fluxo fonte → bytecode → execução ajuda Evelyn a depurar erros como NoClassDefFoundError.
Cada arquivo .class contém bytecode para exatamente uma classe compilada.
O carregador de classes (class loader) tem papel irrelevante na execução Java.
Samuel está desenvolvendo uma aplicação em Java e precisa invocar métodos de objetos cujas assinaturas ele não conhece em tempo de compilação. Qual recurso da linguagem Java permite que Samuel faça isso?
Objetos não são alocados no heap pela JVM.
Reflection em Java permite invocar métodos sem conhecimento estático das assinaturas.
.java é o formato binário gerado pela JVM.
Emma está desenvolvendo um sistema em Java para gerenciar uma biblioteca. Ela precisa criar métodos para manipular livros e usuários. Ao revisar o código, Emma observa que métodos em Java definem assinaturas com tipos de retorno e parâmetros. O uso de void indica ausência de retorno; retornos incompatíveis com a assinatura causam erro de compilação. Parâmetros em Java são passados por valor; para tipos primitivos copia-se o valor, para referências copia-se a referência (o objeto referenciado não é clonado). Operadores unários e binários mudam o valor de expressões, e o posicionamento de operadores de incremento (++i vs i++) altera o valor retornado em expressões. Emma sabe que é importante conhecer a semântica de passagem por valor para evitar erros ao manipular objetos em métodos.
I. Em Java, argumentos são passados por valor — referências também são passadas por valor.
II. Usar void em uma assinatura indica que o método retorna null.
III. i++ retorna o valor atual e depois incrementa a variável.
IV. Um método declarado com tipo de retorno int pode não conter uma instrução return em todos os caminhos de execução sem erro.
James está desenvolvendo um aplicativo em Java para ser utilizado tanto em computadores Windows quanto em computadores Mac, sem precisar modificar ou recompilar o código para cada sistema. Ele sabe que isso é possível graças ao uso de bytecodes, que são instruções intermediárias interpretadas pela Máquina Virtual Java (JVM). O compilador javac gera bytecodes a partir do código fonte, e a JVM traduz esses bytecodes em instruções específicas da máquina hospedeira em tempo de execução. Essa abordagem difere das linguagens compiladas diretamente para código nativo, como C ou C++. Além da portabilidade, o uso da JVM traz vantagens como segurança, isolamento de execução e gerenciamento automático de memória, mas também introduz certa sobrecarga de desempenho. Considerando as informações apresentadas, avalie as asserções a seguir e a relação proposta entre elas: I. A JVM é responsável por garantir a portabilidade do código Java entre diferentes plataformas. PORQUE II. O compilador Java gera código nativo específico para cada processador, o que elimina a necessidade de uma máquina virtual. A respeito dessas asserções, assinale a opção correta:
A) As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
B) As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
C) A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
Evelyn está desenvolvendo um sistema para uma biblioteca em Java. Ela decide estruturar o programa utilizando o paradigma de orientação a objetos (OO), criando entidades como Livro, Usuário e Empréstimo, cada uma combinando dados (atributos) e comportamentos (métodos) relacionados. A principal motivação de Evelyn é promover reutilização, modularidade e facilidade de manutenção no sistema. Considerando esse contexto, qual das alternativas melhor descreve a abordagem que Evelyn está utilizando?
O POO busca centralizar o controle do programa em uma função principal.
O POO separa dados e comportamentos em estruturas distintas.
O POO une dados e comportamentos em unidades chamadas objetos.
O POO não permite reutilização de código.
O POO é incompatível com linguagens de tipagem estática, como Java.
Nora está desenvolvendo um sistema de controle de acesso em Java para uma empresa. Ela precisa garantir que apenas funcionários autorizados possam acessar determinadas áreas. Para isso, Nora utiliza estruturas de controle de fluxo: if-else para verificar permissões individuais, switch para lidar com diferentes cargos e for, while e do-while para processar listas de funcionários. O uso incorreto dessas estruturas pode gerar Loops infinitos ou condições inatingíveis, comprometendo a segurança do sistema. Uma das alternativas abaixo apresenta a relação correta entre asserção e razão:
D) A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
E) As asserções I e II são proposições falsas.
Michael está desenvolvendo um sistema de controle de acesso em Java para uma empresa. Ele precisa garantir que diferentes tipos de usuários (administrador, funcionário e visitante) tenham permissões distintas. Para isso, ele utiliza estruturas como if e switch para definir o fluxo condicional de execução do programa. Considerando esse contexto, avalie as asserções a seguir e a relação proposta entre elas: I. Estruturas como if e switch são utilizadas para definir o fluxo condicional de execução de um programa Java. PORQUE II. O uso de estruturas condicionais permite que diferentes caminhos de execução sejam escolhidos com base em valores booleanos ou literais. A respeito dessas asserções, assinale a opção correta:
As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
As asserções I e II são proposições falsas.
Hannah está programando um robô para regar plantas em seu jardim. Ela precisa escolher entre os laços for, while e do-while em Java. Qual é a principal diferença entre esses laços que pode ajudá-la a decidir qual usar?
O laço for é geralmente usado quando se sabe o número de repetições, while quando não se sabe, e do-while garante que o bloco será executado pelo menos uma vez.
O laço for nunca executa o bloco de código.
O laço while sempre executa o bloco de código pelo menos uma vez.
O laço do-while só pode ser usado com números inteiros.
Grace está programando um sistema que precisa garantir que uma determinada ação seja executada pelo menos uma vez, mesmo que a condição de repetição seja falsa desde o início. De acordo com o texto, qual estrutura de repetição ela deve usar para garantir esse comportamento?
Executa o corpo zero vezes, se a condição for falsa.
Avalia a condição antes da primeira execução.
Executa o corpo pelo menos uma vez antes de avaliar a condição.
Não permite a utilização de instruções break.
Requer variáveis de controle explícitas obrigatoriamente.
Mia está aprendendo programação orientada a objetos em Java e decide criar um sistema para gerenciar livros em uma biblioteca. Ela define uma classe Livro, que possui atributos como título e autor, e métodos para exibir informações do livro. Para adicionar novos livros ao sistema, Mia utiliza o operador new para criar instâncias da classe Livro, garantindo que cada livro tenha seu próprio estado. Ela sabe que o uso correto de encapsulamento e construtores é essencial para proteger o estado interno dos objetos e garantir que cada livro seja inicializado corretamente. Considerando essa situação, avalie as asserções a seguir e a relação proposta entre elas: I. O operador new é utilizado em Java para criar instâncias de classes. PORQUE II. O operador new executa automaticamente o método main() de uma classe ao instanciá-la. A respeito dessas asserções, assinale a opção correta:
A) As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
B) As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
C) A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
D) A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
E) As asserções I e II são proposições falsas.
Emma está desenvolvendo um sistema bancário orientado a objetos. Ela precisa garantir que o saldo da conta bancária não seja alterado diretamente por outras partes do sistema, mas apenas por meio de métodos específicos, como depositar e sacar. Para isso, ela utiliza modificadores de acesso como private, protected e public, além de métodos de acesso (getters e setters) para controlar o acesso ao saldo. Essa abordagem permite proteger o estado interno do objeto e facilita a manutenção do sistema. Qual conceito da programação orientada a objetos Emma está aplicando?
Expor todos os detalhes internos da classe para facilitar o acesso.
Ocultar detalhes internos e controlar o acesso ao estado do objeto.
Eliminar completamente o uso de métodos públicos em uma classe.
Impedir a criação de instâncias de objetos.
Substituir a herança no modelo orientado a objetos.
Zoe está aprendendo Java e decidiu criar uma classe chamada Carro. Ela percebeu que pode criar diferentes construtores para a classe, desde que cada um tenha uma lista de parâmetros diferente. Zoe também notou que os construtores não têm tipo de retorno e que o nome deles é igual ao da classe.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
As asserções I e II são proposições falsas.
Michael está desenvolvendo um sistema de cadastro de veículos em Java. Ele deseja permitir diferentes formas de inicialização dos objetos da classe Veiculo, como inicializar apenas com o modelo ou com modelo e ano. Se nenhum construtor for declarado, o compilador gera um construtor padrão sem argumentos. Michael sabe que construtores podem chamar outros da mesma classe usando this() ou de sua superclasse usando super(). A primeira instrução dentro de um construtor deve ser sempre uma dessas chamadas, se utilizadas. Avalie: I. A sobrecarga de construtores permite criar múltiplas formas de inicializar um objeto. PORQUE II. Em Java, o compilador proíbe o uso de super() e this() no mesmo construtor. A respeito dessas asserções, assinale a opção correta:
A) As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
B) As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
C) A asserção I é verdadeira, e a II é falsa.
D) A asserção I é falsa, e a II é verdadeira.
E) As asserções I e II são falsas.
Scarlett está desenvolvendo um sistema para uma empresa de transporte. Ela percebe que tanto a classe Carro quanto a classe Caminhão compartilham vários comportamentos e atributos, mas cada uma tem suas particularidades. Segundo o texto, em qual situação Scarlett deve utilizar herança?
Relação “tem-um” entre duas classes.
Necessidade de compartilhar métodos privados.
Relação “é-um” entre classes, visando reutilização de código.
Desejo de substituir composição por associação.
Criação de métodos estáticos entre classes distintas.
Aria está desenvolvendo um sistema de gerenciamento de veículos em Java. Ela criou uma superclasse chamada Veiculo e várias subclasses como Carro e Moto, cada uma sobrescrevendo o método mover() de forma diferente. No sistema, Aria utiliza referências do tipo Veiculo para manipular objetos de Carro e Moto, permitindo que o método mover() execute comportamentos distintos dependendo do tipo real do objeto em tempo de execução. Avalie: I. O polimorfismo em Java permite que uma referência de tipo superclasse invoque métodos sobrescritos em subclasses. PORQUE II. A ligação dinâmica determina, em tempo de execução, qual implementação de método será executada. A respeito dessas asserções, assinale a opção correta:
As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
As asserções I e II são proposições falsas.
Jackson está desenvolvendo um sistema para uma empresa e precisa garantir que diferentes módulos do sistema possam realizar operações semelhantes, mesmo que sejam implementados de formas distintas. Ele sabe que classes abstratas em Java não podem ser instanciadas e servem como base para outras classes, podendo conter tanto métodos concretos quanto métodos abstratos. Já as interfaces definem apenas contratos, especificando o que uma classe deve fazer, sem dizer como. Desde o Java 8, interfaces podem incluir métodos default e static, oferecendo implementações reutilizáveis. Enquanto uma classe só pode estender outra, pode implementar várias interfaces, o que facilita a modelagem de múltiplos comportamentos. De acordo com o texto, o papel principal de uma interface em Java é:
Definir uma hierarquia rígida entre classes concretas.
Fornecer múltiplas implementações automáticas para classes.
Estabelecer contratos de comportamento a serem implementados por classes.
Impedir o uso de herança múltipla.
Substituir completamente o uso de classes abstratas.
Isla está desenvolvendo um sistema bancário em Java e precisa garantir que certos valores, métodos e classes não sejam modificados para evitar falhas de segurança. Ela decide usar a palavra-chave final: em variáveis, para tornar valores constantes; em métodos, para impedir sobrescrita; e em classes, para evitar herança. Essa restrição é útil para preservar comportamentos e evitar alterações acidentais em componentes críticos. Entretanto, o uso excessivo de final pode reduzir a flexibilidade de extensões em frameworks e bibliotecas.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é verdadeira, e a II é falsa.
A asserção I é falsa, e a II é verdadeira.
As asserções I e II são falsas.
Jackson está desenvolvendo um sistema em Java e precisa garantir que certos métodos não sejam modificados por subclasses, além de evitar que algumas classes sejam estendidas. Avalie: I. O modificador final em um método impede que ele seja sobrescrito por subclasses. PORQUE II. O modificador final aplicado a uma classe evita que novas subclasses sejam criadas. A respeito dessas asserções, assinale a opção correta:
As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é verdadeira, e a II é falsa.
A asserção I é falsa, e a II é verdadeira.
As asserções I e II são falsas.
Aiden está desenvolvendo um sistema bancário em Java e precisa garantir que, ao tentar realizar uma transação, certos recursos sejam sempre liberados, como fechar a conexão com o banco de dados, independentemente de ocorrer ou não uma exceção durante a operação. Segundo as práticas de tratamento de exceções em Java, qual é a principal função do bloco finally nesse contexto?
Reexecutar o bloco try em caso de falha.
Garantir a execução de código, ocorra ou não uma exceção.
Zoe está desenvolvendo um sistema em Java e precisa garantir que exceções verificadas sejam tratadas corretamente. Sobre o tratamento de exceções em Java, assinale a alternativa correta que Zoe deve seguir:
C) Substituir o uso de catch na captura de erros.
D) Interromper o programa quando uma exceção não for tratada.
E) Declarar exceções verificadas no método.
William está desenvolvendo um sistema bancário em Java. Em um dos métodos, ele precisa lançar uma exceção caso o saldo seja insuficiente para uma transferência. Para isso, ele utiliza a palavra-chave throw dentro do método. Além disso, ele declara na assinatura do método que pode ocorrer uma exceção, utilizando throws, para que o método chamador saiba que precisa tratar esse possível erro. Avalie: I. O comando throw cria e lança uma exceção durante a execução. PORQUE II. O uso de throws na assinatura de um método indica que ele pode propagar exceções para o chamador. A respeito dessas asserções, assinale a opção correta:
A) As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
B) As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
C) A asserção I é verdadeira, e a II é falsa.
D) A asserção I é falsa, e a II é verdadeira.
E) As asserções I e II são falsas.
Sophia está desenvolvendo um sistema em Java que manipula grandes volumes de dados utilizando diferentes coleções, como ArrayList, LinkedList, HashSet e HashMap. Ela deseja garantir que o código seja mais seguro e que erros de tipo sejam detectados durante a compilação, evitando a necessidade de casts explícitos. Qual é a principal vantagem de utilizar generics nas coleções de Java nesse contexto?
A) Aumentar o uso de casting em tempo de execução.
B) Permitir maior segurança de tipos em tempo de compilação.
C) Reduzir o desempenho de acesso às estruturas.
D) Impedir o uso de herança em coleções.
E) Tornar as classes das coleções abstratas.
David está desenvolvendo um sistema bancário em Java e decide utilizar a arquitetura em camadas para separar as responsabilidades e facilitar a manutenção do sistema. Ele divide a aplicação em camadas de apresentação, negócio e persistência, visando favorecer o reuso e a testabilidade. Para isso, David faz uso de interfaces e padrões de projeto, como DAO e Service, para reduzir o acoplamento e permitir a substituição de implementações sem alterar o restante do sistema. Avalie: I. A arquitetura em camadas promove a separação de responsabilidades entre as partes do sistema. PORQUE II. O uso de interfaces e padrões de projeto, como DAO e Service, contribui para reduzir o acoplamento e permitir substituição de implementações sem alterar o restante do sistema.
Ambas as afirmações estão corretas e a segunda justifica a primeira.
Ambas as afirmações estão corretas, mas a segunda não justifica a primeira.
A primeira afirmação está correta e a segunda está incorreta.
A primeira afirmação está incorreta e a segunda está correta.
Kai trabalha em uma empresa de tecnologia que desenvolve sistemas de comunicação em rede. Ele percebe que cada camada do sistema é responsável por uma função específica e comunica-se com as demais por meio de interfaces bem definidas. A respeito dessas asserções, assinale a opção correta:
As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é verdadeira, e a II é falsa.
A asserção I é falsa, e a II é verdadeira.
As asserções I e II são falsas.
Priya está trabalhando em um projeto de desenvolvimento de software orientado a objetos em Java para uma empresa. Ela adota uma abordagem progressiva, construindo funcionalidades de forma incremental. Graças à modularidade das classes e à independência entre camadas, Priya consegue implementar um módulo, testá-lo e integrá-lo gradualmente ao sistema. Isso reduz riscos e facilita o controle de qualidade. Essa prática é amplamente utilizada em metodologias ágeis, como Scrum, nas quais o produto é entregue em iterações curtas, com versões incrementais e testáveis. Segundo o texto, o desenvolvimento progressivo em Java tem como principal vantagem:
Permitir a entrega de sistemas completos apenas ao final do projeto.
Favorecer a modularidade e integração gradual das partes do sistema.
Impedir que partes do sistema sejam testadas isoladamente.
Substituir a análise de requisitos pela implementação direta.
Evitar a reutilização de componentes e bibliotecas.
Scarlett está desenvolvendo um aplicativo em Java usando a biblioteca Swing para criar a interface gráfica. Ela precisa garantir que, ao clicar em um botão, uma ação específica seja executada, mas deseja manter o código organizado e fácil de manter. Para isso, Scarlett associa ouvintes (listeners) aos componentes gráficos, permitindo que cada ação do usuário gere um evento entregue ao ouvinte correspondente. Essa abordagem separa a interface da lógica de controle, tornando o código mais modular. Avalie: I. O modelo de eventos do Java permite associar comportamentos específicos a ações do usuário. PORQUE II. O uso de listeners desacopla a lógica de controle da interface gráfica, facilitando manutenção e testes. A respeito dessas asserções, assinale a opção correta:
As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é verdadeira, e a II é falsa.
A asserção I é falsa, e a II é verdadeira.
As asserções I e II são falsas.
Em Java, qual classe é comumente utilizada para representar janelas gráficas na construção de interfaces com componentes como botões e rótulos?
JFrame
JPanel
JButton
JLabel
De acordo com o texto, qual prática não é recomendada no uso de JFrame em interfaces gráficas Java:
Criar menus com JMenu e JMenuItem.
Controlar a visibilidade de frames existentes.
Abrir várias janelas simultâneas sem controle.
Utilizar layouts para organizar os componentes.
Encerrar a aplicação com setDefaultCloseOperation.
O Eclipse é uma IDE amplamente utilizada para o desenvolvimento em Java. Ele fornece ferramentas para edição, depuração e design de interfaces gráficas por meio de plug-ins. O uso de editores visuais permite arrastar e soltar componentes (drag-and-drop), facilitando o desenvolvimento de GUIs. Apesar disso, é essencial compreender o código gerado automaticamente para evitar dependência excessiva da ferramenta. Avalie: I. O Eclipse oferece recursos visuais para criação de interfaces gráficas em Java. PORQUE II. O uso do Eclipse elimina a necessidade de compreender o código-fonte gerado. A respeito dessas asserções, assinale a opção correta:
As duas asserções são verdadeiras, e a segunda justifica a primeira.
As duas asserções são verdadeiras, mas a segunda não justifica a primeira.
A primeira asserção é verdadeira, e a segunda é falsa.
A primeira asserção é falsa, e a segunda é verdadeira.
As duas asserções são falsas.
A integração de Java com bancos de dados relacionais é realizada por meio da API JDBC (Java Database Connectivity). Essa API define classes e interfaces para conexão, execução de comandos SQL e manipulação de resultados. O uso de DriverManager e Connection permite estabelecer conexões, enquanto PreparedStatement previne injeções de SQL ao parametrizar consultas. Essa camada de abstração garante que aplicações Java possam trabalhar com diferentes bancos de dados de forma padronizada. Segundo o texto, o uso de PreparedStatement no JDBC é importante porque:
Melhora a segurança, evitando injeções de SQL.
Aumenta a complexidade do código e reduz desempenho.
Substitui completamente o uso de comandos SQL.
Exige o uso de frameworks ORM obrigatoriamente.
Dispensa a conexão via DriverManager.
Ao trabalhar com JDBC, é essencial gerenciar corretamente os recursos de conexão, pois conexões abertas consomem memória e podem causar falhas de desempenho. O fechamento adequado deve ocorrer em blocos finally, garantindo a liberação mesmo em caso de exceções. O uso de try-with-resources a partir do Java 7 simplificou esse processo.
As asserções I e II são proposições verdadeiras, e a II é uma justificativa correta da I.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa correta da I.
A asserção I é verdadeira, e a II é falsa.
A asserção I é falsa, e a II é verdadeira.
As asserções I e II são falsas.
Qual das alternativas abaixo descreve corretamente o uso do modificador static em métodos Java?
Métodos static pertencem à classe e podem ser chamados sem criar um objeto.
Métodos static não podem acessar outros métodos static da mesma classe.
Métodos static pertencem à instância e podem acessar atributos de instância diretamente.
Métodos static só podem ser usados em interfaces.
Sobre a interface List em Java, assinale a alternativa correta:
List não permite elementos nulos.
List permite elementos duplicados e mantém a ordem de inserção.
List é uma implementação concreta, não uma interface.
List não possui métodos para acessar elementos por índice.
Em relação ao tratamento de exceções em Java, qual afirmação está correta?
Exceções do tipo RuntimeException devem obrigatoriamente ser declaradas com throws.
O bloco finally é executado mesmo se uma exceção for lançada no bloco try.
O bloco catch é obrigatório em toda estrutura try.
Checked exceptions não precisam ser tratadas ou declaradas.
Em Java, qual das alternativas abaixo descreve corretamente o conceito de herança?
Permite que uma classe tenha múltiplos construtores com o mesmo nome e parâmetros iguais.
Permite que variáveis sejam acessadas diretamente de qualquer lugar do código.
Permite que métodos sejam executados em paralelo.
Permite que uma classe herde atributos e métodos de outra classe, promovendo reutilização de código.
Sobre o uso de interfaces em Java, assinale a alternativa correta:
Interfaces só podem ser implementadas por classes abstratas.
Interfaces podem conter atributos privados e métodos concretos apenas.
Uma classe pode implementar múltiplas interfaces, facilitando a flexibilidade do design.
Interfaces não podem ser utilizadas como tipos de referência.
Qual das opções abaixo representa uma vantagem do uso de coleções genéricas (Generics) no framework de coleções do Java?
Restringe o uso de iteradores nas coleções.
Impede a reutilização de código para diferentes tipos de dados.
Elimina a necessidade de conversão de tipos (casting) ao recuperar elementos da coleção.
Permite armazenar apenas tipos primitivos nas coleções.
Lucas está desenvolvendo um sistema em Java e precisa garantir que o código seja executado corretamente em diferentes sistemas operacionais, como Windows, Linux e macOS. Ele sabe que o bytecode gerado pelo compilador Java é interpretado pela JVM, tornando o código portátil. Qual das alternativas abaixo explica corretamente o papel da JVM nesse processo?
B) A JVM impede que o código Java seja executado em sistemas diferentes.
C) O bytecode só pode ser executado em sistemas Windows.
A) A JVM converte o bytecode em código nativo específico para cada plataforma em tempo de execução.
D) O compilador Java gera código nativo para cada sistema operacional.
Em Java, ao realizar operações entre diferentes tipos primitivos, como int e double, o que acontece normalmente?
A) O tipo de menor capacidade é promovido para o tipo de maior capacidade automaticamente.
B) Sempre ocorre um erro de compilação.
C) O resultado é sempre convertido para int.
D) Não é possível realizar operações entre tipos diferentes.
Em um sistema Java organizado em camadas, qual é a principal vantagem de utilizar padrões como DAO e Service?
A) Facilitar a separação de responsabilidades e permitir a troca de implementações sem afetar outras partes do sistema.
B) Tornar o código mais difícil de testar.
D) Impedir o uso de interfaces nas camadas.
C) Aumentar o acoplamento entre as camadas.
Lucas está desenvolvendo um sistema em Java e precisa garantir que recursos como arquivos sejam fechados corretamente, mesmo que ocorra uma exceção durante a leitura. Qual estrutura do Java é recomendada para garantir o fechamento automático de recursos?
Declarar todos os recursos como static.
Utilizar try-with-resources para garantir o fechamento automático dos recursos.
Utilizar apenas o bloco catch para tratar exceções.
Ignorar exceções e confiar no garbage collector.
Em Java, quando um método pode lançar uma exceção verificada, o que o compilador exige do desenvolvedor?
Que o método seja marcado como final.
Que a exceção seja convertida em erro em tempo de execução.
Que a exceção seja ignorada, pois o Java não obriga tratamento.
Que a exceção seja tratada com um bloco try-catch ou declarada com throws na assinatura do método.
Considere o seguinte código em Java:try {
int x = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Erro de divisão por zero");
} finally {
System.out.println("Finalizando operação");
}
O que será impresso na tela ao executar esse código?
Erro de divisão por zero
Finalizando operação
Erro de divisão por zero
Finalizando operação
Nenhuma saída, pois ocorre erro em tempo de compilação
Lucas está desenvolvendo um sistema de gerenciamento de funcionários em Java. Ele precisa garantir que diferentes módulos do sistema possam ser desenvolvidos e testados separadamente, facilitando a manutenção e a evolução do software. Para isso, Lucas opta por dividir o sistema em camadas bem definidas, utilizando interfaces para desacoplar as implementações. Qual das alternativas abaixo melhor descreve uma vantagem dessa abordagem?
B) Facilita a substituição de implementações sem impactar outras camadas.
C) Impede a reutilização de código entre diferentes partes do sistema.
D) Torna impossível a realização de testes unitários.
A) Aumenta o acoplamento entre os módulos do sistema.
Clara está desenvolvendo uma aplicação Java e precisa garantir que métodos de diferentes classes possam ser chamados de forma polimórfica, sem depender das implementações concretas. Ela decide utilizar interfaces para definir contratos de comportamento. Considerando as características das interfaces em Java, assinale a alternativa correta:
D) Interfaces só podem ser implementadas por classes abstratas.
B) Uma classe pode implementar múltiplas interfaces.
A) Interfaces podem conter atributos de instância não constantes.
C) Interfaces não podem declarar métodos abstratos.
Rafael está programando um sistema financeiro em Java e precisa garantir que recursos críticos, como conexões com o banco de dados, sejam sempre liberados, mesmo que ocorra uma exceção durante a execução de um método. Qual bloco de código Java é utilizado para garantir a execução de instruções de limpeza, independentemente de exceções?
C) throw
B) finally
D) switch
A) try-catch
Lucas está desenvolvendo um sistema de gerenciamento de funcionários em Java e deseja garantir que apenas métodos específicos possam modificar o salário de um funcionário. Para isso, ele utiliza atributos privados e fornece métodos públicos para alterar e consultar o valor do salário. Qual conceito da programação orientada a objetos está sendo aplicado por Lucas?
Encapsulamento
Polimorfismo
Abstração
Herança
Composição
Clara está criando uma interface gráfica em Java e precisa garantir que as ações do usuário, como clicar em botões, sejam tratadas corretamente. Qual mecanismo do Java permite que Clara associe ações específicas a eventos de interface gráfica?
Herança múltipla
Modificadores de acesso
Serialização de objetos
Listeners de eventos
Uso de construtores
Pedro está desenvolvendo um sistema em Java e precisa garantir que diferentes classes possam compartilhar um mesmo contrato de métodos, mesmo que cada uma tenha sua própria implementação. Qual recurso da linguagem Java permite que Pedro defina esse contrato?
Classe final
Enumeração
Interface
Construtor privado
Classe abstrata
Lucas está desenvolvendo uma aplicação Java e precisa garantir que diferentes tipos de coleções, como List, Set e Map, sejam manipulados de forma segura e eficiente. Ele decide utilizar generics para evitar erros de tipo e facilitar a reutilização de código. Qual das alternativas abaixo representa corretamente uma vantagem do uso de generics em coleções Java?
Impede a criação de coleções de tipos diferentes.
Obriga o uso de casts explícitos ao acessar elementos da coleção.
Permite detectar erros de tipo em tempo de compilação, aumentando a segurança do código.
Reduz a legibilidade do código e dificulta a manutenção.
Helena está desenvolvendo um sistema em Java e precisa garantir que certos métodos não sejam sobrescritos por subclasses, mantendo a integridade do comportamento original. Para isso, ela utiliza a palavra-chave final em métodos. Sobre o uso de final em Java, assinale a alternativa correta:
Variáveis final podem ser modificadas após a inicialização.
O modificador final impede a criação de objetos da classe.
Classes final não podem ser estendidas por outras classes.
Métodos final podem ser sobrescritos por qualquer subclasse.
Gabriel está desenvolvendo uma aplicação Java que utiliza JDBC para acessar um banco de dados. Ele deseja evitar problemas de segurança, como SQL injection, e melhorar a performance de consultas repetidas. Qual prática é recomendada para atingir esses objetivos?
Manter conexões abertas durante toda a execução da aplicação.
Utilizar PreparedStatement para consultas parametrizadas.
Utilizar Statement para todas as consultas SQL.
Evitar o uso de pools de conexão.
Lucas está desenvolvendo um sistema em Java e precisa garantir que diferentes objetos possam ser comparados corretamente em coleções como HashSet e HashMap. Ele sabe que a implementação adequada dos métodos equals() e hashCode() é fundamental para o funcionamento dessas coleções. Qual das alternativas abaixo está correta sobre a relação entre equals() e hashCode() em Java?
O método hashCode() não influencia o funcionamento de coleções baseadas em hashing.
O método equals() nunca deve ser sobrescrito em classes personalizadas.
É permitido sobrescrever apenas o método equals() sem afetar o comportamento das coleções.
Se dois objetos são iguais pelo método equals(), eles devem obrigatoriamente ter o mesmo valor de hashCode().
Marina está criando uma hierarquia de classes em Java e deseja garantir que uma determinada classe não possa ser estendida por outras. Qual palavra-chave ela deve utilizar para atingir esse objetivo?
final
private
abstract
static
Pedro está desenvolvendo um sistema em Java e precisa acessar métodos de uma classe sem criar instâncias dela. Qual modificador ele deve usar para que os métodos possam ser chamados diretamente pelo nome da classe?
final
static
protected
abstract
Julia está criando uma biblioteca de componentes JavaBeans para uma aplicação. Ela deseja que seus componentes possam ser facilmente configurados em ferramentas visuais. Qual das opções abaixo é uma característica obrigatória de um JavaBean?
A) Possuir apenas métodos estáticos.
B) Ter um construtor público sem argumentos.
C) Não permitir serialização.
D) Não utilizar getters e setters.
E) Ser uma interface.
