Curso 228517 Aula 03 c8cf Completo
Curso 228517 Aula 03 c8cf Completo
Curso 228517 Aula 03 c8cf Completo
Autor:
Raphael Henrique Lacerda, Paolla
Ramos e Silva
07 de Janeiro de 2023
Índice
1) Java SE - Conceitos Básicos - Teoria
..............................................................................................................................................................................................3
APRESENTAÇÃO DA AULA
Pessoal, o tema da nossa aula é Java – Parte I. Pessoal, esse é um assunto um pouco assustador
para quem não conhece a linguagem Java, mas não fiquem com medo, meu trabalho aqui é fazer
com que o assunto seja didático, leve e simples.
Pessoal, o que eu como professora posso dizer a vocês? Infelizmente a banca não define
especificamente o que vai solicitar em prova, e dizem “por aí” que TI é um “MUNDO” ... talvez TI
seja um OCEANO... Devemos ter noção do básico e fazer o máximo possível de questões para
conhecer o perfil da banca. Estar preparado para questões mais elaboradas ou novidades nunca
cobradas! Como professora, tenho a obrigação de passar os conceitos a cada questão. Então
vamos lá!
Java é a linguagem das possibilidades! Java está impulsionando a inovação por trás do nosso
mundo digital. Há muitos anos dizia-se que Java era uma linguagem lenta, porém isso já mudou
MUITO! Vamos ver isso e muito mais em nossa aula!
Bora, bora, pessoal, porque quem já chegou até aqui está com garra e vontade de ser aprovado!
O pensamento do estudante (concurseiro) que quer ser aprovado deve ser sempre este: fazer o
melhor que puder nas condições que possui! No contexto da nossa aula, o ponto mais importante
não é tornar você um programador, e sim, fazer você acertar questões em prova! Portanto, foque
nisso!
Para ajudá-los a realizar o sonho de ser aprovado, o time de TI do ESTRATÉGIA criou jogos bem
legais para vocês fixarem o conteúdo das aulas! Aaaahhhh, o Estratégia é o melhorrr! também
acho!
Brincadeiras à parte, pessoal, durante minha preparação, eu sempre busquei estudar o máximo
possível, pois eu pensava assim: Poxa, o professor já teve um trabalhão de criar a aula, escrever o
PDF, gravar os vídeos, comentar questões. Eu só preciso ESTUDAR! Só isso! É o mínimo que eu
tenho que fazer. Portanto, deem o máximo que vocês podem dar, lembrem-se é por VOCÊ, é pelos
seus SONHOS!
JAVA
Introdução
INCIDÊNCIA EM PROVA: média
Vamos falar agora sobre uma das linguagens mais famosas do mundo! O Java é a principal
linguagem de programação e plataforma de desenvolvimento. Reduz custos e prazos de
desenvolvimento, impulsiona a inovação e aprimora os serviços de aplicativos. Com milhões de
desenvolvedores executando mais de 51 bilhões de Java Virtual Machines em todo o mundo, o
Java continua sendo a plataforma de desenvolvimento preferida de empresas e desenvolvedores.
É isso ai galera! Java 17, a versão mais recente da plataforma de desenvolvimento e linguagem de
programação que é número um do mundo! Java é uma linguagem de programação orientada
a objetos, multiplataforma, robusta, portável, segura, extensível, concorrente e distribuída
Java é uma linguagem de programação portável, tendo em vista que basta compilar a
aplicação apenas uma vez para que esta possa ser executada em qualquer plataforma que
possua máquina virtual Java.
O Java só suporta herança única, na qual cada classe é derivada exatamente de uma superclasse
direta. Ao contrário de C++, o Java não suporta herança múltipla, que ocorre quando uma classe
é derivada de mais de uma superclasse direta.
• Carga Dinâmica de Código - Programas em Java são formados por uma coleção de classes
armazenadas independentemente e que podem ser carregadas no momento de utilização.
Característica Descrição
Não contém redundâncias e é fácil de entender, implementar e usar. Parecida com
Concisa e simples C++ para facilitar compreensão por grande parte de programadores. É uma evolução
de C++: não suporta aritmética de ponteiros, registros, coercions, etc.
Orientada a objetos Suporta os principais conceitos de orientação a objetos. Favorece reusabilidade.
Altamente tipada. Programas são confiáveis. Reduz imprevistos em tempo de
Robusta execução: variáveis são automaticamente inicializadas, uso disciplinado de
ponteiros, rotinas devem ser chamadas corretamente, etc.
Completamente especificada. Não contém aspectos dependentes da
Portável
implementação: o tamanho dos tipos é fixo para qualquer implementação, etc.
Restrições de acesso a arquivos, manipulação de ponteiros, etc. Implica que não é útil
Segura
para desenvolver certas aplicaçoes como `device drivers'.
Concorrente Suporta aplicações concorrentes: multithreads, monitores, execução atômica.
Independente de Geração de bytecode que pode ser interpretado para qualquer arquitetura e sistema
plataforma operacional tendo o sistema Java. Facilita distribuição de software.
Interpretada Facilita desenvolvimento exploratório.
Utilizando compiladores, bytecodes podem ser traduzidos em tempo de execução
Compilada
para código de máquina.
segura
extensível
concorrente
distribuída
híbrida: compilada e interpretada
Em 1991, na Sun Microsystems, foi iniciado o Green Project, o berço do Java. Em 2008 a Oracle
Corporation adquire a empresa responsável pela linguagem Java, a Sun Microsystems, por US$
7,4 bilhões, com o objetivo de levar o Java e outros produtos da Sun ao dispor dos consumidores.
Há anos falava-se que Java era lento, porém houve melhorias na JVM incluindo o compilador
Just-In-Time (JIT) que é um componente do Java™ Runtime Environment que melhora o
desempenho de aplicativos Java no tempo de execução. Dessa forma temos que o limite de
compilação JIT ajuda a JVM a ser iniciada rapidamente e ainda assim ter desempenho melhorado.
Java é uma linguagem WORA, que significa Write once, run anywhere ou "Escreva uma vez,
execute em qualquer lugar", é o slogan da Sun MicroSystems para exemplificar os benefícios
multiplataforma da linguagem Java. Idealmente, isso significa que Java pode ser desenvolvido em
qualquer dispositivo, compilado em um bytecode padrão e espera-se que seja executado em
qualquer dispositivo equipado com uma máquina virtual Java (JVM).
Java utiliza o compilador Java para converter o código-fonte Java em bytecodes que representam
as tarefas a serem executadas na fase de execução. Diferentemente das instruções em linguagem
de máquina, que são dependentes de plataforma (isto é, de hardware específico de computador),
instruções bytecode são independentes de plataforma. Portanto, os bytecodes do Java são
portáveis — sem recompilar o código-fonte, as mesmas instruções em bytecodes podem ser
executadas em qualquer plataforma contendo uma JVM que entende a versão do Java na qual os
bytecodes foram compilados. A JVM é invocada pelo comando java. Exemplo: java Welcome.
Quando estudarmos o ambiente de desenvolvimento Java típico vocês vão ver que a JVM analisa
os bytecodes à medida que eles são interpretados, procurando hot spots (pontos ativos) — partes
dos bytecodes que executam com frequência. Para essas partes, um compilador just in time (JIT),
como o compilador Java HotSpot™ da Oracle, traduz os bytecodes para a linguagem de máquina
do computador subjacente.
Quando a JVM encontra de novo essas partes compiladas, o código de linguagem de máquina
mais rápido é executado. Portanto, os programas Java realmente passam por duas fases de
compilação: uma em que o código-fonte é traduzido em bytecodes (para a portabilidade entre
JVMs em diferentes plataformas de computador) e outra em que, durante a execução, os
bytecodes são traduzidos em linguagem de máquina para o computador real no qual o programa
é executado.
Quando dizemos que duas tarefas operam concorrentemente, queremos dizer que ambas
progridem ao mesmo tempo. Desde sua criação, o Java suporta a concorrência. Quando dizemos
que duas tarefas operam em paralelo, queremos dizer que elas são executadas simultaneamente.
caminhar, por exemplo, podem ocorrer em paralelo, assim como todos os sentidos — visão,
audição, tato, olfato e paladar. Acredita-se que esse paralelismo é possível porque se acredita que
o cérebro humano contém bilhões de “processadores”. Computadores multiprocessados de
hoje em dia têm múltiplos processadores que podem realizar tarefas em paralelo.
Entre os atrativos de Java está a facilidade que essa linguagem oferece para desenvolver
aplicações para execução em sistemas distribuídos. Já em sua primeira versão, Java oferecia
facilidades para o desenvolvimento de aplicações cliente-servidor usando os mecanismos da
Internet, tais como os protocolos TCP/IP e UDP.
O bytecode Java contém mais informações de tipos do que seria estritamente necessário para o
interpretador. A pilha de operandos armazena informações sobre tipos. Cada tipo primitivo de
dados possui operações especializadas feitas para operar sobre operandos do tipo apropriado. A
coleção de tipos de informações, isto é, todos os registros da pilha de operandos e todas as
variáveis locais constituem o chamado estado de tipos do quadro de execução.
Por fim, devido ao fato de integrar várias bibliotecas, integrar vários pacotes e possibilitar a criação
de novos tipos de classe conforme necessário; o Java é conhecido como uma linguagem
extensível.
Java é uma linguagem de programação amplamente usada para codificar aplicações Web. Ela tem
sido uma escolha popular entre os desenvolvedores há mais de duas décadas, com milhões de
aplicações Java em uso hoje. Java é uma linguagem multiplataforma, orientada a objetos e
centrada em rede que pode ser usada como uma plataforma em si. É uma linguagem de
programação rápida, segura e confiável para codificar tudo, desde aplicações móveis e software
empresarial até aplicações de big data e tecnologias do servidor.
Como o Java é uma linguagem de uso gratuito e versátil, ele cria software local e distribuído.
Alguns usos comuns de Java incluem:
Computação em nuvem: a linguagem Java é muitas vezes chamada de Write Once and Run
Anywhere (WORA – Escreva uma vez e execute em qualquer lugar), tornando-a perfeita para
aplicações baseadas na nuvem descentralizadas. Os provedores de serviços de nuvem escolhem a
linguagem Java para executar programas em uma ampla variedade de plataformas subjacentes.
Big data: a linguagem Java é usada para mecanismos de processamento de dados que podem
trabalhar com conjuntos de dados complexos e grandes quantidades de dados em tempo real.
Inteligência artificial: Java é uma potência de bibliotecas de machine learning. Sua estabilidade e
velocidade o tornam perfeito para o desenvolvimento de aplicações de inteligência artificial, como
processamento de linguagem natural e aprendizado profundo.
Internet das Coisas: Java tem sido usado para programar sensores e hardware em dispositivos de
borda que podem se conectar de forma independente à Internet.
• Java Standard Edition (Java SE): O Java Standard Edition é a plataforma central de
programação Java. Ele contém todas as bibliotecas e APIs que qualquer programador precisa
para o desenvolvimento java. O Open Java Development Kit (OpenJDK) é a implementação
gratuita e de código aberto do Java SE. É voltada para criação de applets e desenvolvimento
de softwares para desktop, destinados a computadores pessoais, notebooks ou outras
arquiteturas com maior capacidade de processamento e memória. Os aplicativos podem ser
executados em Windows, Mac OS, Linux, Solaris ou outros sistemas operacionais, contanto
que estes tenham instalado o ambiente de execução JRE (Java Runtime Environment).
• Java Enterprise Edition (Java EE): O Java EE, ou Java Platform, Enterprise Edition, é a
plataforma que disponibiliza recursos para o desenvolvimento de aplicações corporativas
voltadas para web e servidores de aplicação. Java EE foi projetada para suportar sistemas de
uso em larga escala, ou seja, para uma quantidade significativa de usuários, possibilitando o
desenvolvimento de aplicações escaláveis, robustas e multicamadas. Toda essa estrutura
incorpora características como segurança e confiabilidade, muitas vezes consideradas difíceis
de serem implementadas. Com o objetivo de amenizar as dificuldades de implementação
dessas características, o Java EE fornece um conjunto de tecnologias que reduz
significativamente o custo e a complexidade de desenvolvimento. Em uma aplicação
multicamadas, por exemplo, tem-se a estrutura do aplicativo separada em camadas, onde
cada uma possui uma responsabilidade específica. Atualmente é possível classificar essa
estrutura em duas partes: arquitetura lógica e arquitetura física.
• Java Micro Edition (Java ME): O Java Micro Edition é a plataforma para desenvolvimento de
aplicações para dispositivos móveis e sistemas integrados, como decodificadores de sinais. O
Java ME fornece um subconjunto da funcionalidade do Java SE, mas também apresenta
bibliotecas específicas para dispositivos móveis.
O usuário final da plataforma Java usa JRE para rodar aplicações Java. A Plataforma Java Standard
Edition Runtime Environment (JRE) destina-se a desenvolvedores e fornecedores de software
para uso com seus aplicativos.
O Java SE Runtime Environment contém a máquina virtual Java, bibliotecas de classes de tempo
de execução e o ativador de aplicativos Java que são necessários para executar programas escritos
na linguagem de programação Java. Não é um ambiente de desenvolvimento e não contém
ferramentas de desenvolvimento como compiladores ou depuradores.
Fica a informação que o JDK inclui ferramentas para desenvolver e testar programas escritos na
linguagem de programação Java e executados na plataforma Java. Já, o JRE é usado pelo usuário
final da plataforma Java para rodar aplicações.
_______________________
Comentários: Pessoal, na verdade, a extensão é .jdk (Gabarito: Errado).
_______________________
Comentários: É exatamente isso pessoal! As aplicações Java são executadas em uma máquina virtual! (Gabarito: Correto).
Compilação e Interpretação
Vejamos os passos para criar e executar um aplicativo Java. Normalmente, existem cinco fases:
editar, compilar, carregar, verificar e executar.
Vamos falar sobre Compilação e Interpretação. Compilar é uma fase mais elaborada. Consiste em
converter os programas de linguagem de alto nível em linguagem de máquina. Linguagens de alto
nível permitem aos programadores escrever instruções que se pareçam com o inglês cotidiano e
contenham notações matemáticas comumente utilizadas. Do ponto de vista do programador, as
linguagens de alto nível são preferíveis às de máquina. Java é uma das linguagens de programação
de alto nível mais amplamente usadas.
Compilar um programa grande de linguagem de alto nível em linguagem de máquina pode levar
tempo considerável de computador. Os programas interpretadores, desenvolvidos para executar
diretamente programas de linguagem de alto nível, evitam o tempo de espera da compilação,
embora sejam mais lentos do que programas compilados.
O programa Java foi a primeira linguagem a combinar os dois métodos acima (Compilação e
Interpretação) usando uma máquina virtual Java (JVM). O compilador de código Java é chamado
máquina virtual Java. Qualquer arquivo Java é compilado primeiro em bytecode. O bytecode Java
só pode ser executado na JVM. A JVM então interpreta o bytecode para executá-lo na plataforma
de hardware subjacente. Portanto, se a aplicação estiver sendo executada em uma máquina
Windows, a JVM a interpretará para o Windows. Mas se estiver sendo executada em uma
plataforma de código aberto como Linux, a JVM vai interpretá-la para o Linux.
Então quando Java compila (ou converte) todo o código .java transforma-o em um arquivo .class.
JavaC
Compilador
Bytecode (.class)
a) hashcode.
b) bytecode.
c) CIL (Common Intermediate).
d) assembly.
e) classcode.
_______________________
Comentários: Pessoal, JAVA utiliza uma JVM para “entender” bytecodes. Logo, se existe um compilador que seja capaz de
transformar o código-fonte em uma bytecode seguindo as especificações corretamente, o bytecode poderá ser interpretado
por uma JVM. A questão pergunta qual o produto resultante do processo de compilação de classes Java que é exatamente o
bytecode(Gabarito: Letra B).
Na Fase 2, utilize o comando javac (o compilador Java) para compilar um programa. Por exemplo,
a fim de compilar um programa chamado Welcome.java, você digitaria javac Welcome.java
O compilador cria bytecodes e os armazena em disco em um arquivo cujo nome termina com
.class.
Na Fase 3, a JVM armazena o programa na memória para executá-lo — isso é conhecido como
carregamento. O carregador de classe da JVM pega os arquivos .class que contêm os bytecodes
do programa e os transfere para a memória primária. Ele também carrega qualquer um dos
arquivos .class fornecidos pelo Java que seu programa usa. Os arquivos .class podem ser
carregados a partir de um disco em seu sistema ou em uma rede (por exemplo, sua faculdade local
ou rede corporativa ou a internet).
O carregador de classe lê os arquivos .class que contêm bytecodes a partir do disco e coloca esses
bytecodes na memória.
Na Fase 4, enquanto as classes são carregadas, o verificador de bytecode examina seus bytecodes
para assegurar que eles são válidos e não violam restrições de segurança do Java. O Java impõe
uma forte segurança para certificar-se de que os programas Java que chegam pela rede não
danificam os arquivos ou o sistema (como vírus e worms de computador).
O verificador de bytecode confirma que todos os bytecodes são válidos e não violam restrições de
segurança do Java.
Fase 5: execução
Na Fase 5, a JVM executa os bytecodes do programa, realizando, assim, as ações especificadas por
ele (Figura 1.10). Nas primeiras versões do Java, a JVM era simplesmente um interpretador para
bytecodes. A maioria dos programas Java executava lentamente, porque a JVM interpretava e
executava um bytecode de cada vez. Algumas arquiteturas modernas de computador podem
executar várias instruções em paralelo.
Portanto, os programas Java realmente passam por duas fases de compilação: uma em que o
código-fonte é traduzido em bytecodes (para a portabilidade entre JVMs em diferentes
plataformas de computador) e outra em que, durante a execução, os bytecodes são traduzidos em
linguagem de máquina para o computador real no qual o programa é executado
Para executar o programa, a JVM lê os bytecodes e os compila (isto é, traduz) no momento certo
(ou Just-In-Time — JIT) para uma linguagem que o computador possa entender. Como o programa
existe na memória ele pode armazenar valores de dados na memória principal.
_______________________
Comentários: Pessoal, na verdade, não há a extensão EXE no ambiente citado. Nas 5 fases há.jdk, .class, java. Mas não há
.exe (Gabarito: Errado).
A máquina virtual Java atua como uma camada de abstração adicional entre a plataforma Java e
o hardware da máquina subjacente. O código-fonte Java pode ser executado apenas nas máquinas
que possuem a JVM instalada nelas.
Uma máquina virtual é um software que simula uma máquina física e consegue executar vários
programas, gerenciar processos, memória e arquivos. Resumindo, ele constitui de uma
plataforma, onde a memória, o processador e seus outros recursos, são totalmente virtuais, não
dependendo de hardwares.
A execução de um código Java não está diretamente relacionada com o Sistema Operacional, ele
conversa diretamente com a JVM (Java Virtual Machine), possibilitando assim a portabilidade de
seu código. O que for escrito em um sistema operacional Windows, irá rodar em um sistema
operacional Linux (salvo algumas exceções de códigos nativos).
Esse processo cria uma independência do Sistema Operacional (SO), dando ao desenvolvedor
uma liberdade de desenvolver para múltiplas plataformas sem aquela preocupação de se o
código irá funcionar corretamente.
A JVM é desenvolvida em código nativo, pois ela conversa diretamente com o sistema
operacional para que o programa Java funcione na máquina.
Quando um argumento for passado por referência, o método chamado pode acessar o valor do
argumento no chamador diretamente e modificar esses dados, se necessário. Passar por
referência aprimora desempenho eliminando a necessidade de copiar quantidades de dados
possivelmente grandes.
Ao contrário de algumas outras linguagens, o Java não permite escolher passagem por valor ou
passagem por referência — todos os argumentos são passados por valor. Uma chamada de
método pode passar dois tipos de valores para um método — cópias de valores primitivos (por
exemplo, valores de tipo int e double) e cópias de referências para objetos. Os objetos em si não
podem ser passados para os métodos. Quando um método modifica um parâmetro do tipo
primitivo, as alterações no parâmetro não têm nenhum efeito no valor original do argumento no
método chamador.
Se você modificar um parâmetro de tipo por referência para que ele se refira a outro objeto,
apenas o parâmetro refere-se ao novo objeto — a referência armazenada na variável do chamador
ainda se refere ao objeto original.
Embora uma referência do objeto seja passada por valor, um método ainda pode interagir com o
objeto referenciado chamando seus métodos public que utilizam a cópia da referência do objeto.
Visto que a referência armazenada no parâmetro é uma cópia da referência que foi passada como
um argumento, o parâmetro no método chamado e o argumento no método chamador
referenciam o mesmo objeto na memória.
_______________________
Comentários: Quando um argumento for passado por valor, uma cópia do valor do argumento é passada para o método
chamado. Apenas seu valor é passado para a variável correspondente ao parâmetro dentro da função. (Gabarito: Correto).
_______________________
Comentários: Certo, pessoal! Como vimos, duas maneiras de passar argumentos em chamadas de método em muitas
linguagens de programação são passagem por valor e passagem por referência (Gabarito: Correto).
Empacotamento
Para empacotar seus aplicativos, você deve primeiro criar os componentes obrigatórios e os
componentes opcionais que farão parte do seu pacote. Você pode, então, construir o pacote
usando o comando pkgmk.
Você deve criar os objetos de pacote antes de construir o pacote. Os componentes abaixo fazem
parte do aplicativo. Podem ser os seguintes itens:
• Arquivos (arquivos executáveis ou arquivos de dados);
• Diretórios;
• Pipes nomeados;
• Links;
• Dispositivos;
• O arquivo pkginfo;
Raíz
Herança é um mecanismo que permite que características comuns a diversas classes sejam
fatoradas em uma classe base, ou superclasse. A partir de uma classe base, outras classes podem
ser especificadas. Cada classe derivada ou subclasse apresenta as características (estrutura e
métodos) da classe base e acrescenta a elas o que for definido de particularidade para ela.
Sendo uma linguagem de programação orientada a objetos, Java oferece mecanismos para
definir classes derivadas a partir de classes existentes. É fundamental que se tenha uma boa
compreensão sobre como objetos de classes derivadas são criados e manipulados, assim como
das restrições de acesso que podem se aplicar a membros de classes derivadas. Também
importante para uma completa compreensão da utilização desse mecanismo em Java é a
compreensão de como relacionam-se interfaces e herança.
Herança é sempre utilizada em Java, mesmo que não explicitamente. Quando uma classe é
criada e não há nenhuma referência à sua superclasse, implicitamente a classe criada é derivada
diretamente da classe Object. É por esse motivo que todos os objetos podem invocar os
métodos da classe Object, tais como equals() e toString().
Herança
Java oferece mecanismos para definir classes derivadas a partir de classes existentes
jobject
todos os objetos java
Pessoal, java é composto por uma infinidade de pacotes e classes que podem ser acessados no
índice: https://docs.oracle.com/javase/8/docs/api/index.html
Applet
Uma applet é uma pequena aplicação executada em uma janela de uma aplicação
(browser/appletviewer). Tem por finalidade estender as funcionalidades de browsers, adicionando
som, animação, etc., provenientes de fontes (URLs) locais ou remotas, sendo que cada página web
(arquivo .html) pode conter uma ou mais applets.
applet
Applets sempre executam nos clientes web, nunca nos servidores. Por esta razão a carga das
classes pode levar algum tempo. Para definir programas Java que rodem no servidor, veja como
construir servlets.
I. O método start é chamado uma vez pelo contêiner de applets para inicializar um
applet quando ele é carregado.
II. O método destroy é chamado pelo contêiner de applets quando o applet é removido
da memória.
III. Cinco métodos do ciclo de vida de um applet são chamados pelo contêiner de applets
entre o momento em que o applet é carregado no navegador e o momento em que ele
é fechado pelo navegador.
a) I e II.
b) I e III.
c) II e III.
d) III, apenas.
_______________________
Comentários: Pessoal, Os 5 métodos que definem o ciclo de vida de uma applet são: init , start, stop e destroy.1.init( ) -
inicialização; chamado quando a applet é inicialmente carregada; 2.start( ) - execução (animação); chamado após o init( );
3. stop( ) - interrupção; faz a applet parar a execução da animação, áudio ou vídeo; 4.paint() - para desenhar algo na applet; 5.
destroy( ) - liberação de recursos; chamado quando o browser é fechado. O item I está errado, o método init é chamado quando
a applet é inicialmente carregada. O item II está correto, destroy é chamado pelo contêiner de applets quando o applet é
removido da memória. E por fim, o item III está correto. (Gabarito: Letra C).
Toda applet é uma aplicação gráfica, não existindo, portanto, applets “modo texto”. A principal
diferença entre uma “Java application” e uma “applet” é o fato de que a janela base da aplicação é
derivada a partir da classe Applet (ou JApplet) e não a partir da classe Frame. Além disso, a parte
da aplicação que instancia a classe Applet e relaciona-a com o browser é padrão e, portanto, não
precisa ser descrita. Desta forma, applets não possuem a função “main( )”.
(CESPE / ANATEL – 2012) O Firefox 13, ou versão superior, disponibiliza suporte para
o uso de applets e aplicações Java, desde que esta ferramenta esteja devidamente
instalada no computador em uso e o plugin com suporte à Java esteja habilitado no
navegador.
_______________________
Comentários: Pessoal, de fato, applets têm por finalidade estender as funcionalidades de browsers, adicionando som,
animação, etc., provenientes de fontes (URLs) locais ou remotas. No caso do Firefox, deve estar devidamente instalada no
computador em uso e o plugin com suporte à Java habilitado. (Gabarito: Correto).
(UFMT / UFMT – 2014) Applets Java são pequenos programas que podem ser
embutidos em uma página Web e executados quando um navegador carrega essa
página.
_______________________
Comentários: Pessoal, perfeita questão! (Gabarito: Correto).
_______________________
Comentários: Pessoal, applets sempre executam nos clientes web, são escritos em Java, podem ser visualizadas em um
browser. (Gabarito: Correto).
Sintaxe
Identificadores
O Java é case sensitive, ou seja, Java diferencia maiúsculas de minúsculas: "MyClass" e "myclass"
têm significados diferentes assim como Analista é diferente de analista.
Por convenção, os nomes de classes iniciam com uma letra maiúscula e apresentam a letra
inicial de cada palavra que eles incluem em maiúscula (por exemplo, SampleClassName). O nome
de uma classe é um identificador — uma série de caracteres que consiste em letras, dígitos,
sublinhados ( _ ) e sinais de cifrão ($) que não inicie com um dígito e não contenha espaços. Alguns
identificadores válidos são Welcome1, $valor, _valor, m_campoDeEntrada1 e botao7. O nome
7botao não é um identificador válido porque inicia com um dígito, e o nome campo de entrada não
é um identificador válido porque contém espaços. Normalmente, um identificador que não inicia
com uma letra maiúscula não é um nome de classe. O Java faz distinção entre maiúsculas e
minúsculas — letras maiúsculas e letras minúsculas são diferentes — assim, value e Value são
identificadores diferentes (mas ambos válidos).
Observações: caracteres compostos (acentuados) não são interpretados igualmente aos não
compostos (não acentuados). Por exemplo, História e História não são o mesmo identificador.
Letras maiúsculas e minúsculas diferenciam os identificadores, ou seja, a é um identificador
diferente de A, História é diferente de história etc.
Blocos e Comandos
Blocos de programação são aglomerados de instruções e declarações que têm escopo conjunto.
Ou seja, as variáveis definidas como locais dentro de um bloco somente serão presentes dentro
deste bloco assim como as instruções ali presentes. Os blocos de programação são delimitados
por chaves e podem ser aninhados - colocados um dentro dos outros. Por exemplo:
{
// este é um bloco de programação
int a=10;
}
{
// este é um bloco de programação
int a=10;
int b=1;
if (b==3) {
// este é um bloco que é executado se b for igual a 3
b=a*10;
} else {
// este é um bloco que é executado se b for diferente de 3
int a=100;
b=a*10;
}
System.out.println("O valor de b é " + b);
}
Comentários
// Welcome1.java
// Programa de impressão de texto.
O Java também tem comentários tradicionais, que podem ser distribuídos ao longo de várias
linhas, como em
Eles começam e terminam com delimitadores, /* e */. O compilador ignora todo o texto entre os
delimitadores. O Java incorporou comentários tradicionais e comentários de fim de linha das
linguagens de programação C e C++, respectivamente. Preferimos usar comentários //.
O Java fornece comentários de um terceiro tipo: comentários Javadoc. Esses são delimitados por
//** e */. O compilador ignora todo o texto entre os delimitadores. Os comentários no estilo
Javadoc permitem-lhe incorporar a documentação do programa diretamente aos seus programas.
Esses comentários são o formato de documentação Java preferido na indústria. O programa
utilitário javadoc (parte do JDK) lê comentários Javadoc e os usa para preparar a documentação
do programa no formato HTML.
Palavras Reservadas
Em programação, palavras-chave, ou palavras reservadas, são as palavras que não podem ser
usadas como identificadores, ou seja, não podem ser usadas como nome de variáveis, nome
de classes, etc. Estas palavras são assim definidas ou porque já têm uso na sintaxe da linguagem
ou porque serão usadas em algum momento, seja para manter compatibilidade com versões
anteriores ou mesmo com outras linguagens. No caso do Java temos as seguintes palavras-chave:
Palavra Descrição
Um modificador sem acesso. Usado para classes e métodos: Uma classe abstrata não
pode ser usada para criar objetos (para acessá-la, ela deve ser herdada de outra
abstract
classe). Um método abstrato só pode ser usado em uma classe abstrata e não possui
um corpo. O corpo é fornecido pela subclasse (herdado de)
boolean Um tipo de dados que pode armazenar apenas valores verdadeiros e falsos
break Sai de um loop ou de um bloco de repetição
byte Um tipo de dados que pode armazenar números inteiros de -128 e 127
case Marca um bloco de código em instruções switch
catch Captura exceções geradas por instruções try
char Captura exceções geradas por instruções try
class Define uma classe
const Define uma constante. Não está em uso - use final.
continue Continua para a próxima iteração de um loop
default Especifica o bloco de código padrão em uma instrução switch
do Usado junto com while para criar um loop do-while.
double Um tipo de dados que pode armazenar números inteiros de 1,7e−308 a 1,7e+308
else Usado em instruções condicionais
enum Declara um tipo enumerado (imutável)
extends Estende uma classe (indica que uma classe é herdada de outra classe)
Um modificador sem acesso usado para classes, atributos e métodos, o que os torna
final
inalteráveis (impossíveis de herdar ou substituir)
Usado com exceções, um bloco de código que será executado independente de haver
finally
uma exceção ou não
float Um tipo de dados que pode armazenar números inteiros de 3.4e−038 a 3.4e+038
for Criar um loop for
goto Não está em uso
if Faz uma declaração condicional
implements Implementa uma interface
import Usado para importar um pacote, classe ou interface
instanceof Verifica se um objeto é uma instância de uma classe específica ou uma interface
Um tipo de dados que pode armazenar números inteiros de -2147483648 a
int
2147483647
Usado para declarar um tipo especial de classe que contém apenas métodos
interface
abstratos
Um tipo de dados que pode armazenar números inteiros de -9223372036854775808
long
a 9223372036854775808
módulo Declara um módulo. Novo no Java 9
Especifica que um método não é implementado no mesmo arquivo de origem Java
native
(mas em outra linguagem)
new Cria novos objetos
package Declara um pacote
Um modificador de acesso usado para atributos, métodos e construtores, tornando-
private
os acessíveis apenas dentro da classe declarada
Um modificador de acesso usado para atributos, métodos e construtores, tornando-
protected
os acessíveis no mesmo pacote e subclasses
Um modificador de acesso usado para classes, atributos, métodos e construtores,
public
tornando-os acessíveis por qualquer outra classe
requires Especifica as bibliotecas necessárias dentro de um módulo. Novo no Java 9
Finalizou a execução de um método e pode ser usado para retornar um valor de um
return
método
short Um tipo de dados que pode armazenar números inteiros de -32768 a 32767
Um modificador sem acesso usado para métodos e atributos. Métodos/atributos
static
estáticos podem ser acessados sem criar um objeto de uma classe
strictfp Restringir a precisão e o arredondamento dos cálculos de ponto flutuante
super Refere-se a objetos da superclasse (pai)
Pessoal, estes modificadores são MUITO importantes e caem MUITO nas provas! Portanto
repeti uma tabela com os modificadores de acesso!
modificadores Descrição
A classe e/ou seus membros são acessíveis somente por classes do mesmo pacote,
Default ou package na sua declaração não é definido nenhum tipo de modificador, sendo este
identificado pelo compilador. Permite que apenas classes do mesmo pacote tenham
acesso as propriedades que possuem este modificador.
public O código é acessível para todas as classes
Membros da classe definidos como private não podem ser acessados ou usados por
nenhuma outra classe. Esse modificador não se aplica às classes, somente para seus
private métodos e atributos. Esses atributos e métodos também não podem ser visualizados
pelas classes herdadas.
Tipos Primitivos
Os tipos do Java são divididos em primitivos e por referência. Os tipos primitivos são int, boolean,
byte, char, short, long, float e double.
Java requer que todas as variáveis tenham um tipo. Por essa razão, o Java é referido como
linguagem fortemente tipada. Em C e C++, os programadores frequentemente têm de escrever
versões separadas dos programas a fim de que ele suporte diferentes plataformas de computador,
uma vez que não há garantia de que tipos primitivos sejam idênticos entre um computador e
outro. Por exemplo, um int em uma máquina pode ser representado por 16 bits (2 bytes) de
memória, em uma segunda máquina por 32 bits (4 bytes) e em outra máquina por 64 bits (8 bytes).
No Java, valores int são sempre de 32 bits (4 bytes).
Uma variável de tipo primitivo pode armazenar exatamente um valor de seu tipo declarado por
vez. Por exemplo, uma variável int pode armazenar um número inteiro de cada vez. Quando outro
valor é atribuído a essa variável, ele substitui o anterior — que é perdido. Lembre-se de que as
variáveis locais não são inicializadas por padrão. Já as variáveis de instância de tipo primitivo são
inicializadas por padrão — dos tipos byte, char, short, int, long, float e double como 0, e as do tipo
boolean como false.
Todo tipo primitivo tem uma classe empacotadora de tipo correspondente (no pacote java.lang).
Essas classes chamam-se Boolean, Byte, Character, Double, Float, Integer, Long e Short. Elas
permitem manipular valores de tipo primitivo como objetos.
Cada uma das classes empacotadoras de tipo numéricas — Byte, Short, Integer, Long, Float e
Double — estende a classe Number. Além disso, as classes empacotadoras de tipo são classes
final, então não é possível estendê-las. Os tipos primitivos não têm métodos, então os métodos
relacionados a um tipo primitivo estão localizados na classe empacotadora de tipo
correspondente (por exemplo, o método parseInt, que converte uma String em um valor int, está
localizado na classe Integer).
O Java fornece conversões boxing e unboxing que convertem automaticamente entre valores de
tipo primitivo e objetos empacotadores de tipo. Uma conversão boxing converte um valor de um
tipo primitivo em um objeto da classe empacotadora de tipo correspondente. Uma conversão
unboxing converte um objeto de uma classe empacotadora de tipo em um valor do tipo primitivo
correspondente. Essas conversões são executadas automaticamente — o que é chamado de
autoboxing e auto-unboxing. Considere as seguintes instruções:
Nesse caso, o autoboxing ocorre ao atribuir-se um valor int (10) a Array[0] integer, porque Array
integer armazena referências a objetos Integer, não valores int. O auto-unboxing ocorre ao
atribuir-se integerArray[0] à variável int value, porque a variável value armazena um valor value,
não uma referência a um objeto Integer. As conversões boxing também ocorrem em condições
que podem ser avaliadas para valores boolean primitivos ou objetos Boolean
(FCC / TRF 3ª Região – 2019) Java possui um conjunto de tipos de dados conhecidos
como primitivos, dos quais NÃO faz parte o tipo
a) short.
b) long.
c) string.
d) byte.
e) float.
_______________________
Comentários: Pessoal, vejamos os nomes e os tipos primitivos existentes: lógico: boolean; caractere: char; inteiro: byte, short,
int, long, float; decimal: double. Das opções apresentadas, a única que não consta é a string. (Gabarito: Letra C).
Operadores
Operadores são símbolos que representam atribuições, cálculos e ordem dos dados. As operações
seguem uma ordem de prioridades, ou seja, alguns cálculos (ou outros) são processados antes de
outros. Por exemplo, na Álgebra podemos mostrar a seguinte ordem: primeiro divisão e
multiplicação e depois soma e subtração.
Operadores Aritméticos +, -, *, /, %.
Assim, as operações de divisão e multiplicação, por serem de ordem 1, serão executadas antes das
operações de soma e subtração (ordem 2). Também, as operações de divisão e multiplicação são
de mesma ordem (1) e não importa, entre si, a ordem da operação (2 dividido por 4 vezes 9 é igual
a 2 vezes 9 dividido por 4).
int a = 5, b = 2, c = 0;
a--; // -- é um operador unário pois opera apenas em
a;
c = a * b; // * é um operador binário pois opera em a e b.
c = c < 0 ? a : b; // ?: é O operador ternário. Opera em na
expressão booleana (c < 0), e em a ou b.
Precedência indica a ordem na qual um operador opera em relação à avaliação de uma expressão.
A tabela seguinte elenca os operadores por precedência, do maior para o menor.
Precedência 0: atribuições
Os operadores de atribuição são os mais numerosos e os que tem uma prioridade menor de serem
interpretados. Ele armazena o valor que aparecer à direita na variável presente à esquerda. Caso
deseje-se que a variável da esquerda receba o valor dela mesma após passar por alguma operação
com um segundo valor, basta colocar o símbolo da operação antes do sinal "=" e colocar o segundo
valor à direita. Exemplos de uso:
Quando em uma mesma linha forem encontrados vários operadores diferentes, serão executados
primeiro aqueles que tiverem maior precedência. Se existirem operadores com o mesmo valor de
precedência, será realizado primeiro aquele cujo símbolo aparecer primeiro. É possível alterar a
ordem natural com que são feitas as operações através do uso de parênteses. As operações entre
parênteses sempre são realizadas antes.
int numero1=245;
int numero2=123;
numero1=(numero1>numero2)?numero1:numero2; /* Faz com que a variavel
numero 1 receba sempreo maior valor entre ela mesma e a numero2. Neste
caso, ela receberá o seu prório valor por ele ser maior*/
boolean variavel;
variavel=(2<45)&&(45<2) //variavel passa a valer "falso"
variavel=(2<45)||(45<2) //variavel passa a valer "verdadeiro"
int numero;
numero=34&435; //numero passa a valer 34
numero=34^46; //numero passa a valer 12
numero=436|547; //numero passa a valer 951
boolean variavel;
variavel=(-5==5); //variavel recebe "falso"
variavel=(2!=45674); //variavel recebe "verdadeiro"
Ao utilizar operadores de igualdade com objetos, a comparação é feita
entre suas referências. Dessa forma, dois objetos cognitivamente iguais,
podem ser avaliados como diferentes. Exemplo:
class Pessoa{
String nome;
boolean variavel;
variavel=(4<4); //variavel recebe "falso"
variavel=(4<=4); //variavel recebe "verdadeiro"
variavel=(-1>-3); //variavel recebe "verdadeiro"
variavel=(-4>=0); //variavel recebe "falso"
Observação: uma diferença importante entre os operadores '++' e '--' prefixais e sufixais é o tempo
de avaliação da expressão comparado com a alteração da variável. A saber:
int x = 5; // x contém 5
int y, z; // y e z não foram definidos
y = x++; // primeiro faz y igual ao valor (anterior) de x, e
depois modifica x
z = ++x; // primeiro modifica x, e depois atribui a z o novo
valor de x
Neste exemplo, temos que, ao final x vale 7 (duas vezes incrementado), y vale 5 (o valor inicial de
x) e z vale 7 (o valor final de x). Deve-se evitar usar mais de um operador prefixal e sufixal na mesma
linha, porque isto torna o código incompreensível, por exemplo: x = (y++ + ++z - --x) + ++y.
Pessoal, para entender o que é abordado, é necessário ter conhecimento das operações lógicas.
Isso é abordado na aula de Informática Básica.1
(FGV / IMBEL – 2021) Com relação aos operadores bitwise do Java, considere os valores
binários
a = 00111100
b = 00001101
a) 00011100 e 11111101
b) 00001100 e 00111101
c) 00001111 e 00111111
d) 11001110 e 00001100
e) 01101100 e 00100101
_______________________
Comentários: Pessoal, vamos fazer essa operação! O ideal é fazer em uma folha/tablet – em forma escrita à mão. Vamos lá,
a = 00111100 & b = 00001101 = Do último dígito para o primeiro (0&1) = 0, (0 & 0) = 0, (1 & 1) = 1, (1 & 1) = 1, (1 & 0) = 0, (1 & 0) =
0, (0 & 0) = 0, (0 & 0) = 0. O resultado de A&B é 00001100. Agora vamos ao segundo a|b, novamente do fim para o início: (0|1)
= 1, (0 | 0) = 0, (1 | 1) = 1, (1 | 1) = 1, (1 | 0) = 1, (1 | 0) = 1, (0 | 0) = 0, (0 | 0) = 0. O resultado de A|B é 00111101. (Gabarito: Letra B).
1
Sistemas Numéricos
Vetores
Como você logo verá, o que em geral consideramos um array é, na verdade, uma referência a um
objeto array na memória. Ou seja, os arrays são objetos; portanto, são considerados tipos por
referência. Os elementos de um array podem ser tipos primitivos ou tipos por referência.
A programação faz um grande uso de vetores. Cada item de um vetor é chamado de elemento.
Cada um dos elementos possui uma posição dentro do vetor, à qual referenciamos através do
índice do elemento. Cada um dos "domínios" (conjunto de posições, endereços de
armazenamentos) do vetor, nós chamamos de dimensão. Já o tipo de dado (ou de elemento)
corresponde ao "contradomínio" do vetor, ou seja, o conjunto de literais ou de outro tipo de
elemento que o vetor pode armazenar.
Ele possui 10 elementos que são acessados (referenciados) pelos índices [0], [1], [2], [3], [4], [5],
[6], [7], [8], [9]. Os índices de cada elemento são escritos entre colchetes [ ]. Para declarar um
vetor, utiliza-se a seguinte sintaxe:
tipo[] identificador;
ou
tipo identificador[];
Onde:
tipo = tipo de dado ou de elemento;
identificador = nome do vetor.
Cada elemento é representado por dois índices (um para cada dimensão), entre colchetes e
adjacentes [ ][ ]. É como uma matriz.
Índice inicia em zero [0], [1], [2], [3], [4], [5] ...
Os elementos dos vetores podem ser atribuídos da seguinte forma: separados por vírgulas e entre
chaves. Por exemplo, em um vetor unidimensional poderíamos indicar os dados de seus
elementos assim: {x0,x1,x2, ... ,xn}. Em que, cada um dos valores X é um valor do elemento de
índice correspondente no vetor. A numeração dos índices começa a partir do zero e pode ser
somente número natural, ou seja, inteiro maior ou igual a zero.
Vetores podem ser declarados e iniciados conforme o seguinte exemplo - cada dimensão é
delimitada por chaves e cada elemento é separado do outro através de vírgulas:
Outro modo de uso é declarando, iniciando com o tamanho (quantidade de elementos) do vetor e
depois atribuindo os valores, como o equivalente a seguir:
Você pode percorrer os elementos do array com o loop for e usar a propriedade length para
especificar quantas vezes o loop deve ser executado. O exemplo a seguir gera todos os elementos
do array cars:
Lembre-se que o acesso ao elemento do array se dá pelo índice. Neste exemplo foi utilizado o
índice i – uma variável criada dentro do for (int i = 0).
Outra possibilidade é utilizar o loop "for-each", que é usado exclusivamente para percorrer
elementos em arrays. A sintaxe é:
Veja que a diferença é sutil. Está apenas no “for (String i : cars)”. O exemplo acima pode ser lido
assim: para cada elemento String (chamado i – como no índice) em cars , imprima o valor de i .
Se você comparar o loop for com o loop for-each , verá que o método for -each é mais fácil de
escrever, não requer um contador (usando a propriedade length) e é mais legível.
a) nomes.length
b) nomes.length - 1
c) nomes.size
d) nomes.size + 1
e) nomes.ubound
_______________________
Comentários: Pessoal, para retornar o comprimento de uma string especificada usamos o método length(). No caso em
questão, como foi solicitado o ultimo elemento do array, o correto seria utilizar o length – 1. (Gabarito: Letra B).
Conversão de Tipos
A conversão de tipo é quando você atribui um valor de um tipo de dados primitivo a outro tipo. Em
Java, existem dois tipos de conversão:
System.out.println(myInt); // Outputs 9
System.out.println(myDouble); // Outputs 9.0
}
A redução da conversão deve ser feita manualmente, colocando o tipo entre parênteses
na frente do valor:
Controle de Fluxo
Como pode-se notar, o conhecimento adquirido até aqui não permite a criação de programas
interativos. Eles sempre executam da mesma forma, independente do que o usuário faz ou dos
valores que são recebidos. Mas agora iremos aprender a usar alguns comandos que permitem que
dependendo das circunstâncias, os programas executem instruções diferentes. A instrução de
seleção única if, também conhecida por if-then, possibilita a execução condicional de um bloco de
instruções.
if (expressaoBooleana) {
//instruções que serão executadas caso a expressaoBooleana resulte true.
}
A expressão Booleana pode ser uma das condições lógicas usuais da matemática:
Você pode usar essas condições para executar ações diferentes para decisões diferentes. Depois
da palavra-chave if é necessária uma expressão booleana entre parênteses. Caso a expressão
booleana resulte no valor true em tempo de execução então o bloco seguinte será executado, caso
resulte em false aquele será ignorado. O bloco de instruções pode conter 0 ou mais instruções. As
chaves que delimitam o bloco são opcionais caso se tenha apenas uma instrução a ser executada.
A instrução if...else, também conhecida como instrução if-then-else, a instrução de seleção dupla
if...else tem função complementar à de if: executa instruções no caso da expressão booleana de if
resultar em false.
if (expressaoBooleana) {
//instruções que serão executadas caso a expressaoBooleana resulte
true.
} else {
//instruções que serão executadas caso a expressaoBooleana resulte
false.
}
A palavra-chave else deve estar logo após da(s) instrução if. Após a palavra-chave else deve ser
colocado o bloco de instruções a serem executadas no caso da expressão booleana de if resultar
em false. Assim como if, as chaves delimitadoras de bloco são opcionais caso haja apenas uma
instrução a executar.
As instruções if ou if...else podem ser aninhadas dentro de outras instruções if ou if...else para
casos em que antes de determinadas instruções serem executadas sejam necessárias
combinações de resultados de expressões booleanas.
if (expressaoBooleana1) {
if (expressaoBooleana2) {
// Instruções a serem executadas caso as expressões booleanas 1 e 2
resultem em true.
} else {
// Instruções a serem executadas caso a expressão booleana 1 resulte
em true, e a 2 em false.
}
} else {
if (expressaoBooleana3) {
// Instruções a serem executadas caso a expressão booleana 1 resulte
em false, e a 2 em true.
} else {
É possível verificar no exemplo acima que a primeira instrução if mesmo contendo mais de uma
linha de instruções consegue identificar que o if...else forma uma única ramificação e assim
executar a expressão booleana normalmente. Isso se deve ao fato que toda else está vinculada
a uma if. Já na else com o escopo mais externo, verifica-se chaves delimitadoras de bloco. Essas
chaves são necessárias por conta de uma segunda instrução, nomeadamente
System.out.println(), que é executada independentemente do resultado da expressão booleana
da if...else.
if (hora < 0)
System.out.print("Erro: A hora deve ser maior que 0.");
else if (hora >= 24)
System.out.print("Erro: A hora deve ser menor que 24.");
else if (hora <= 12)
System.out.print(hora + " AM é o mesmo que " + hora + " horas.");
else
System.out.print(hora + " PM é o mesmo que " + hora + " horas.");
No exemplo acima há um recurso estilístico para indentar o código com a finalidade de aprimorar
a legibilidade. As palavras-chave if foram anexadas às palavras-chave else já que as else têm
somente uma instrução cada e por isso não necessitam de chaves para delimitar bloco de
instruções. O código abaixo tem exatamente a mesma funcionalidade apesar das quebras de
linha.
if (hora < 0)
System.out.print("Erro: A hora deve ser maior que 0.");
else
if (hora >= 24)
System.out.print("Erro: A hora deve ser menor que 24.");
else
if (hora <= 12)
System.out.print(hora + " AM é o mesmo que " + hora + "
horas.");
else
System.out.print(hora + " PM é o mesmo que " + hora + "
horas.");
switch (expressao) {
case constante1:
// Instruções
break;
case constante2:
// Instruções
break;
case default:
// Instruções
}
Dentro do parâmetro do switch pode ser utilizada expressão que resulte em: byte, short, char, int,
String e enum. As chaves que delimitam o bloco são necessárias ainda que só haja uma
ramificação do fluxo do código. A palavra-chave case indica as ramificações de código. Deve ser
seguida de uma expressão constante que corresponda ao tipo da expressão inserida no parâmetro
do switch, e essa expressão constante, por sua vez, deve ser seguida de: que é o carácter que
delimita o início do bloco de instruções relativo à case. Após: podem ser inseridas 0 ou mais
instruções, incluindo a palavra-chave break que será abordada mais adiante. Ao iniciar outra
instrução case ou inserir a chave de fechamento do bloco de switch o bloco anterior é encerrado.
int dia = 5;
final int segunda = 2;
final int sexta = 6;
switch (dia) {
case segunda:
System.out.print("Segunda ");
case 3:
System.out.print("Terça ");
case 4:
System.out.print("Quarta ");
case 5:
System.out.print("Quinta ");
case sexta:
System.out.print("Sexta ");
case 7:
System.out.print("Sábado ");
case 0:
case 1:
System.out.print("Domingo ");
}
Em tempo de execução, a variável dia será comparada com as expressões constantes, definidas
em tempo de compilação, de cada case. O case contendo o valor 5 tem valor igual ao da variável
dia, então desse ponto em diante todas as instruções serão executadas até que chegue o término
do bloco de switch.
Caso seja necessário que apenas sejam executadas instruções vinculadas a determinadas case
então deve-se utilizar a instrução break. Após a instrução break o fluxo do programa sai do bloco
de switch. A instrução break também pode ser usada para sair de um loop. Por outro lado, a
instrução continue interrompe uma iteração (no loop), se ocorrer uma condição especificada, e
continua com a próxima iteração no loop.
int dia = 5;
final int segunda = 2;
final int sexta = 6;
switch (dia) {
case segunda:
System.out.print("Segunda ");
case 3:
System.out.print("Terça ");
case 4:
System.out.print("Quarta ");
case 5:
System.out.print("Quinta ");
case sexta:
System.out.print("Sexta ");
break;
case 7:
System.out.print("Sábado ");
case 0:
case 1:
System.out.print("Domingo ");
}
System.out.println("\n-> Fora do bloco de instruções de switch.");
Com a instrução break inserida no bloco da case com valor sexta, o código será executado da case
com valor 5 até essa break referida.
A instrução default pode ser utilizada para o caso de a expressão no parâmetro de switch não
corresponder a nenhum dos valores das instruções case. default pode aparecer em qualquer
ordem e segue o mesmo funcionamento que case no que tange a bloco de instruções e uso de
break.
switch (dia) {
case segunda:
System.out.print("Segunda ");
case 3:
System.out.print("Terça ");
case 4:
System.out.print("Quarta ");
default:
System.out.println("erro: dia deve estar entre [0, 7]");
break;
case 5:
System.out.print("Quinta ");
case sexta:
System.out.print("Sexta ");
break;
case 7:
System.out.print("Sábado ");
case 0:
case 1:
System.out.print("Domingo ");
}
if: especifica um bloco de código a ser executado, se uma condição especificada for
verdadeira
condicionais
else: especifica um bloco de código a ser executado, se a mesma condição for falsa
else if: especificar uma nova condição a ser testada, se a primeira condição for falsa
Vejamos agora os Loops! Os loops podem executar um bloco de código desde que uma condição
especificada seja alcançada. Os loops são úteis porque economizam tempo, reduzem erros e
tornam o código mais legível. O Loop While percorre um bloco de código desde que uma condição
especificada seja verdadeira (true):
while (condition) {
// bloco de codigo a ser executado caso a condição seja verdadeira
}
Não esqueça de aumentar a variável usada na condição, caso contrário o loop nunca terminará!
O loop do/while é uma variante do loop while. Este loop executará o bloco de código uma vez,
antes de verificar se a condição é verdadeira, então repetirá o loop enquanto a condição for
verdadeira.
do {
// code block to be executed
}
while (condition);
O exemplo abaixo usa um loop do/while. O loop sempre será executado pelo menos uma vez,
mesmo que a condição seja falsa, pois o bloco de código é executado antes que a condição seja
testada:
int i = 0;
do {
System.out.println(i);
i++;
}
while (i < 5);
a) while.
b) switch.
c) do...while.
d) case.
e) continue.
_______________________
Comentários: Pessoal, o comando while é pré-testado, ou seja, antes de executar qualquer comando, testa-se a condição
oferecida, portanto, permite que um conjunto de instruções não seja executada nenhuma vez. (Gabarito: Letra A).
Classes e Objetos
Dica: O princípio "Don't Repeat Yourself" (DRY) consiste em reduzir a repetição de código. Você
deve extrair os códigos que são comuns para o aplicativo e colocá-los em um único local e
reutilizá-los em vez de repeti-los.
Agora, bora lá, o que são Classes e Objetos? Classes e objetos são os dois principais aspectos da
programação orientada a objetos. Uma classe nada mais é do que um projeto de um objeto. Ao
definirmos classes estamos modelando uma entidade que pode ser criada várias vezes com a
mesma definição. Sendo que ao necessitarmos utilizar essa entidade temos que criar um objeto
através do nosso modelo que é a classe.
Classe Maçã
Objetos
FRUTA
Manga Banana
Tudo em Java está associado a classes e objetos, juntamente com seus atributos e métodos. Por
exemplo: na vida real, um carro é um objeto. O carro tem atributos, como peso e cor, e métodos,
como tração e freio. Uma classe é como um construtor de objetos, ou um "projeto" para criar
objetos.
Classe Volvo
Objetos
Carro
Toyota Audi
objeto de uma classe antes que um programa possa executar as tarefas que os métodos da
classe definem. O processo para fazer isso é chamado instanciação. Um objeto é então referido
como uma instância da sua classe.
Assim como os desenhos de engenharia de um carro podem ser reutilizados várias vezes para
fabricar muitos carros, você pode reutilizar uma classe muitas vezes para construir vários objetos.
A reutilização de classes existentes ao construir novas classes e programas economiza tempo e
esforço. Também ajuda a construir sistemas mais confiáveis e eficientes, porque classes e
componentes existentes costumam passar por extensos testes, depuração e ajuste de
desempenho. Assim como a noção das partes intercambiáveis foi crucial para a Revolução
Industrial, classes reutilizáveis são fundamentais para a revolução de software que foi
estimulada pela tecnologia de objetos.
Ao dirigir um carro, o ato de pressionar o acelerador envia uma mensagem para o veículo realizar
uma tarefa — isto é, ir mais rápido. Da mesma forma, você envia mensagens para um objeto. Cada
mensagem é implementada como uma chamada de método que informa a um método do objeto
a maneira de realizar sua tarefa. Por exemplo, um programa pode chamar o método depósito de
um objeto conta bancária para aumentar o saldo da conta.
E na prática? Como criar uma classe? Para criar uma classe chamada " Main" com uma variável x,
devemos seguir a seguinte sintaxe:
Lembre-se que uma classe deve sempre começar com uma primeira letra maiúscula e que o nome
do arquivo java deve corresponder ao nome da classe.
Para criar um objeto a partir de uma classe, podemos usar a classe main para criar os objetos. Para
criar um objeto de Main, especifique o nome da classe, seguido pelo nome do objeto e use a
palavra-chave new. No exemplo, é criado um objeto chamado " myObj" e imprime o valor de x:
Atributos
Relembrando nosso exemplo, um carro, além de ter a capacidade de realizar tarefas, também tem
atributos, como cor, número de portas, quantidade de gasolina no tanque, velocidade atual e
registro das milhas totais dirigidas (isto é, a leitura do hodômetro). Assim como suas capacidades,
os atributos do carro são representados como parte do seu projeto nos diagramas de engenharia
(que, por exemplo, incluem um hodômetro e um medidor de combustível).
Ao dirigir um carro real, esses atributos são incorporados a ele. Cada carro mantém seus próprios
atributos. Cada carro sabe a quantidade de gasolina que há no seu tanque, mas desconhece
quanto há no tanque de outros carros. Um objeto, da mesma forma, tem atributos que ele
incorpora à medida que é usado em um programa. Esses atributos são especificados como parte
da classe do objeto. Por exemplo, um objeto conta bancária tem um atributo saldo que representa
a quantidade de dinheiro disponível. Cada objeto conta bancária sabe o saldo que ele representa,
mas não os saldos de outras contas bancárias. Os atributos são especificados pelas variáveis de
instância da classe.
Podemos acessar atributos criando um objeto da classe e usando a sintaxe de ponto ( .). O exemplo
a seguir criará um objeto da classe Main, com o nome myObj. Usamos o x atributo no objeto para
imprimir seu valor:
myObj.x = 40;
A palavra-chave final é útil quando você deseja que uma variável armazene sempre o mesmo
valor, como PI (3.14159...). Ela é chamada de "modificador".
Vejamos como são criados métodos em classes! No exemplo, será criado um método denominado
“myMethod”. myMethod()imprime um texto (Hello World!), quando é chamado . Para chamar
um método, escreva o nome do método seguido por dois parênteses () e um ponto e vírgula;
(myMethod();)
Frequentemente, você verá programas Java que possuem atributos e métodos static ou public. No
exemplo acima, criamos um static método, o que significa que ele pode ser acessado sem criar um
objeto da classe, diferente de public , que só pode ser acessado por objetos:
A palavra-chave public é um modificador de acesso, o que significa que é usado para definir o nível
de acesso para classes, atributos, métodos e construtores. Dividimos os modificadores em dois
grupos:
modificador descrição
public A classe é acessível por qualquer outra classe
A classe só é acessível por classes no mesmo pacote. Isso é usado quando você não
default
especifica um modificador.
modificador descrição
A classe, métodos ou atributos assim declarados podem ser acessadas em qualquer
public lugar e a qualquer momento da execução do programa – é o modificador menos
restritivo.
O código só é acessível dentro da classe declarada. Marca a visibilidade do método
ou variável de instância para que apenas a própria classe acesse. Membros da classe
definidos como private não podem ser acessados ou usados por nenhuma outra
classe. Esse modificador não se aplica às classes, somente para seus métodos e
private atributos. Esses atributos e métodos também não podem ser visualizados pelas
classes herdadas. métodos ou atributos (classes, não) assim declaradas podem ser
acessadas apenas dentro da classe que os criou. Subclasses herdam-nos, mas não os
acessam – é o modificador mais restritivo.
O código só é acessível no mesmo pacote. Isso é usado quando você não especifica
default
um modificador.
O código é acessível no mesmo pacote e subclasses. Marca a visibilidade de um
método ou variável de instância para que apenas a própria classe ou suas filhas
acessem. O modificador protected torna o membro acessível às classes do mesmo
protected
pacote ou através de herança, seus membros herdados não são acessíveis a outras
classes fora do pacote em que foram declarados.
Vejamos um compilado de informações: entenda, se uma classe for do tipo Privado, a própria
classe pode acessar? Sim! A subclasse? Não! O pacote? Não! E o programa de forma global?
Também não! Privado é o modificador mais restritivo! Já o público é o oposto! Todos (classe,
sublcasse, pacote e global) conseguem acessar.
modificador descrição
final A classe não pode ser herdada por outras classes
A classe não pode ser usada para criar objetos. Para acessar uma classe abstrata, ela
abstract
deve ser herdada de outra classe.
modificador descrição
final Atributos e métodos finais não podem ser substituídos/modificados
static Atributos e métodos estáticos pertencem à classe, em vez de um objeto
Só pode ser usado em uma classe abstrata e só pode ser usado em métodos. O
abstract método não tem um corpo, por exemplo abstract void run();. O corpo é fornecido
pela subclasse (herdado da subclasse).
transient Atributos e métodos são ignorados ao serializar o objeto que os contém
synchronized Métodos synchronized só podem ser acessados por um thread por vez
O valor de um atributo não é armazenado em cache localmente e é sempre lido na
volatile
"memória principal"
a) final.
b) native.
c) volatile.
d) transient.
e) synchronized.
_______________________
Comentários: Pessoal, olha que questão interessante! Falamos na aula que variáveis de instância não Serializable devem ser
declaradas transient para indicar que elas devem ser ignoradas durante o processo de serialização. A questão solicita
exatamente o que foi pedido: qual modificador usado para impedir que o conteúdo de determinado atributo seja convertido
em bytes no processo padrão de serialização? É o transiente, portanto nosso gabarito é a letra D. Mas vamos ver de que trata
as outras alternativas? BORA! A) Final: é usada para impossibilitar que uma classe seja estendida, que um método seja
sobrescrito ou que uma variável seja reinicializada. Ou seja, no caso da questão, mantém o atributo constante. B) native é
utilizado para dizer que sua implementação é feita em uma outra linguagem específica (por exemplo, C), para que se possa
acessar recursos específicos do sistema operacional. Já volatile, indica que uma determinada variável de instância pode ser
modificada em duas threads distintas ao mesmo tempo. Por fim, a letra E) synchronized, indica que método com essa
marcação será controlado para que não se possa ter duas threads acessando o mesmo objeto. (Gabarito: Letra D).
Métodos
Vamos usar nosso exemplo do carro para introduzir alguns conceitos fundamentais da
programação orientada a objetos. Para realizar uma tarefa em um programa é necessário um
método.
No Java, criamos uma unidade de programa chamada classe para armazenar o conjunto de
métodos que executam as tarefas dela. Por exemplo, uma classe que representa uma conta
bancária poderia conter um método para fazer depósitos de dinheiro, outro para fazer saques e
um terceiro para perguntar qual é o saldo atual.
Uma classe é similar em termos do conceito aos desenhos de engenharia de um carro, que
armazenam o projeto de um pedal de acelerador, volante etc.
Construtores
// Outputs 5
Observe que o nome do construtor deve corresponder ao nome da classe e não pode ter um tipo
de retorno (como void). Observe também que o construtor é chamado quando o objeto é criado.
Todas as classes têm construtores por padrão: se você não criar um construtor de classe, o Java
cria um para você. No entanto, você não poderá definir valores iniciais para atributos de objeto.
Os construtores também podem receber parâmetros, que são usados para inicializar atributos. O
exemplo a seguir adiciona um int yparâmetro ao construtor. Dentro do construtor definimos x para
y (x=y). Quando chamamos o construtor, passamos um parâmetro para o construtor (5), que
definirá o valor de x para 5:
• O espaço para o objeto é alocado e seu conteúdo é inicializado (bitwise) com zeros.
• O construtor da classe base é invocado.
• Os membros da classe são inicializados para o objeto, seguindo a ordem em que foram
declarados na classe.
• O restante do corpo do construtor é executado.
Seguir essa sequência é uma necessidade de forma a garantir que, quando o corpo de um
construtor esteja sendo executado, o objeto já terá à disposição as funcionalidades mínimas
necessárias, quais sejam aquelas definidas por seus ancestrais. O primeiro passo garante que
nenhum campo do objeto terá um valor arbitrário, que possa tornar erros de não inicialização
difíceis de detectar.
_______________________
Comentários: Vamos lá, um construtor é um método especial usado para inicializar objetos. O construtor é chamado quando
um objeto de uma classe é criado. Ele pode ser usado para definir valores iniciais para atributos de objeto. o construtor é
apenas invocado no momento da criação do objeto através do operador new. A assinatura de um construtor diferencia-se das
assinaturas dos outros métodos por não ter nenhum tipo de retorno (nem mesmo void). Além disto, o nome do construtor
deve ser o próprio nome da classe. O construtor pode receber argumentos, como qualquer método. Usando o mecanismo de
sobrecarga, mais de um construtor pode ser definido para uma classe. Assim, temos que os itens I, II e III estão corretos. Já, a
assertiva IV está errada, pois pode ser public, protected ou private. (Gabarito: Letra D).
a) I, apenas.
b) II, apenas.
c) III, apenas.
d) I e II, apenas.
e) II e III, apenas.
_______________________
Comentários: Pessoal, vamos relembrar a tabela? As variáveis e os métodos private ficam acessíveis apenas aos membros da
própria classe! Não ficam disponíveis no pacote e também não ficam acessíveis ás subclasses! Portanto nosso gabarito é
apenas o item I. (Gabarito: Letra A).
Herança e Encapsulamento
Classes (e seus objetos) encapsulam, isto é, contêm seus atributos e métodos. Os atributos e
métodos de uma classe (e de seu objeto) estão intimamente relacionados. Os objetos podem se
comunicar entre si, mas eles em geral não sabem como outros objetos são implementados —
os detalhes de implementação permanecem ocultos dentro dos próprios objetos. Esse
ocultamento de informações, como veremos, é crucial à boa engenharia de software.
os detalhes de
Classes (e seus objetos) Os objetos não sabem como implementação
encapsulam, isto é, contêm outros objetos são permanecem ocultos
seus atributos e métodos implementados dentro dos próprios
objetos
Herança
Uma nova classe de objetos pode ser criada convenientemente por meio de herança — ela
(chamada subclasse) começa com as características de uma classe existente (chamada
superclasse), possivelmente personalizando-as e adicionando aspectos próprios.
Na nossa analogia do carro, um objeto da classe “conversível” decerto é um objeto da classe mais
geral “automóvel”, mas, especificamente, o teto pode ser levantado ou baixado.
package academico;
}
}
Quando uma classe é criada como sub-classe de outra classe, a palavra-chave super é usada para
que a sub-classe possa acessar métodos public ou protected (mas não private) da superclasse.
super também é usado para invocar o constructor da superclasse, durante o constructor da
subclasse.
a) static.
b) extends.
c) public.
d) new.
e) this.
_______________________
Comentários: Pessoal, a palavra-chave da herança é extends! A palavra-chave extends faz com que uma subclasse herde
(receba) todos os atributos e métodos declarados na classe-pai. (Gabarito: Letra B).
{
private String docNumero;
private int classificacao;
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; }
}
Interfaces
Uma classe implementa zero ou mais interfaces — cada uma das quais pode ter um ou mais
métodos —, assim como um carro implementa interfaces separadas para as funções básicas de
dirigir, controlar o rádio, controlar os sistemas de aquecimento, ar-condicionado e afins. Da
mesma forma que os fabricantes de automóveis implementam os recursos de forma distinta,
classes podem implementar métodos de uma interface de maneira diferente. Por exemplo, um
sistema de software pode incluir uma interface de “backup” que ofereça os métodos save e
restore. As classes podem implementar esses métodos de modo diferente, dependendo dos tipos
de formato em que é feito o backup, como programas, textos, áudios, vídeos etc., além dos tipos
de dispositivo em que esses itens serão armazenados.
INTERFACES
(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
Polimorfismo
O polimorfismo permite escrever programas que processam objetos que compartilham a mesma
superclasse, direta ou indiretamente, como se todos fossem objetos da superclasse; isso pode
simplificar a programação.
Considere o exemplo de polimorfismo a seguir. Suponha que criamos um programa que simula o
movimento de vários tipos de animais para um estudo biológico. As classes Peixe, Anfíbio e
Pássaro representam os três tipos de animais sob investigação.
Imagine que cada classe estende a superclasse Animal, que contém um método mover e mantém
a localização atual de um animal como coordenadas x-y. Cada subclasse implementa o método
mover. Nosso programa mantém um array Animal que contém referências a objetos das várias
subclasses Animal. Para simular os movimentos dos animais, o programa envia a mesma
mensagem a cada objeto uma vez por segundo — a saber, mover.
Cada tipo específico de Animal responde a uma mensagem mover de uma maneira única —
um Peixe poderia nadar um metro, um Anfíbio poderia pular um metro e meio e um Pássaro
poderia voar três metros. Cada objeto sabe como modificar suas coordenadas x-y de forma
adequada para seu tipo específico de movimento. Contar com o fato de que cada objeto sabe
“fazer a coisa certa” (isto é, faz o que é apropriado a esse tipo de objeto) em resposta à mesma
chamada de método é o conceito-chave do polimorfismo.
A mesma mensagem (nesse caso, mover) enviada a uma variedade de objetos tem muitas
formas de resultados — daí o termo polimorfismo.
Com o polimorfismo, podemos projetar e implementar sistemas que são facilmente extensíveis
— novas classes podem ser adicionadas com pouca ou nenhuma modificação a partes gerais do
programa, contanto que as novas classes façam parte da hierarquia de herança que o programa
processa genericamente.
As novas classes simplesmente se “encaixam”. As únicas partes de um programa que devem ser
alteradas são aquelas que exigem conhecimento direto das novas classes que adicionamos à
hierarquia. Por exemplo, se estendermos a classe Animal para criar a classe Tartaruga (que poderia
responder a uma mensagem mover deslizando uma polegada), precisaremos escrever somente a
classe Tartaruga e a parte da simulação que instancia um objeto Tartaruga. As partes da simulação
que dizem para que cada Animal se mova genericamente podem permanecer as mesmas.
polimorfismo
A mesma mensagem enviada a uma variedade de objetos tem muitas formas de resultados.
_______________________
Comentários: Pessoal, o polimorfismo ocorre quando um programa invoca um método por meio de uma variável de
superclasse em tempo de execução, a versão correta da subclasse do método é chamada com base no tipo de referência
armazenado na variável da superclasse. Portanto, trata-se da capacidade de um objeto poder se comportar de diversas formas
dependendo da mensagem recebida. (Gabarito: Correto).
Dois conceitos muito importantes em Java são: sobrecarga e sobrescrita. Com a sobrecarga
(overload) de métodos, vários métodos podem ter o mesmo nome com parâmetros diferentes.
Em vez de definir dois métodos que devem fazer a mesma coisa, é melhor sobrecarregar um.
Sobrecarga ou Polimorfismo Estático ocorre quando uma classe possui métodos com mesmo
nome, entretanto assinaturas diferentes. Ocorre em Tempo de Compilação.
Os métodos com o mesmo nome podem ser declarados na mesma classe, contanto que tenham
diferentes conjuntos de parâmetros (determinados pelo número, tipos e ordem dos parâmetros)
— isso é chamado de sobrecarga de métodos. Quando um método sobrecarregado é chamado,
o compilador Java seleciona o método adequado examinando o número, os tipos e a ordem dos
argumentos na chamada. A sobrecarga de métodos é comumente utilizada para criar vários
métodos com o mesmo nome que realizam as mesmas tarefas, ou tarefas semelhantes, mas
sobre tipos diferentes ou números diferentes de argumentos.
Em resumo, o Java permite métodos sobrecarregados em uma classe, desde que os métodos
tenham diferentes conjuntos de parâmetros (determinados pelo número, ordem e tipo de
parâmetros). Métodos sobrecarregados são distinguidos por suas assinaturas — combinações
dos nomes e número, tipos e ordem dos parâmetros dos métodos, mas não pelos tipos de retorno.
Tratamento de Exceções
Ao executar o código Java, diferentes erros podem ocorrer: erros de codificação feitos pelo
programador, erros devido a entrada errada ou outros imprevistos. Quando ocorre um erro, o Java
normalmente para e gera uma mensagem de erro. O termo técnico para isso é: Java lançará uma
exceção (jogará um erro).
Uma exceção é uma indicação de um problema que ocorre durante a execução de um programa.
O tratamento de exceção permite criar aplicativos que podem resolver (ou tratar) exceções. Em
muitos casos, o tratamento de uma exceção permite que um programa continue executando
como se nenhum problema tivesse sido encontrado.
Somente as classes que estendem Throwable (pacote java.lang) direta ou indiretamente podem
ser utilizadas com o tratamento de exceção. Exceções encadeadas podem ser usadas ao chamar
um método que indica uma exceção, você pode lançar outra exceção e encadear o original com o
novo. Isso permite adicionar informações específicas do aplicativo à exceção original.
Ademais, há pré-condições e pós-condições, que devem ser verdadeiras quando seus métodos são
chamados e quando eles retornam, respectivamente.
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. As palavras-chave try e catch vêm em pares:
try {
// bloco de código para ser testado
}
catch(Exception e) {
// bloco de código a ser executado, caso ocorra um erro no bloco try
}
Sincronismo e Multithreading
Seria interessante se pudéssemos concentrar nossa atenção na realização de uma única tarefa de
cada vez e fazer isso bem, o que geralmente é difícil de alcançar em um mundo complexo em que
muitas coisas acontecem ao mesmo tempo. Principalmente atualmente, com a tecnologia
avançando rapidamente, são inúmeros processos executando de forma concorrente.
Quando dizemos que duas tarefas operam concorrentemente, queremos dizer que ambas
progridem ao mesmo tempo. Até recentemente, a maioria dos computadores tinha apenas um
único processador. Sistemas operacionais nesses computadores executam tarefas de forma
concorrente alternando rapidamente entre elas, fazendo uma pequena parte de cada uma antes
de passar para a próxima, de modo que todas as tarefas continuem progredindo. Por exemplo, é
comum que computadores pessoais compilem um programa, enviem um arquivo para uma
impressora, recebam mensagens de correio eletrônico por uma rede e muito mais,
concorrentemente. Desde sua criação, o Java suporta a concorrência.
Quando dizemos que duas tarefas operam em paralelo, queremos dizer que elas são executadas
simultaneamente. Nesse sentido, o paralelismo é um subconjunto da concorrência. O corpo
humano realiza uma grande variedade de operações paralelas.
O Java disponibiliza a concorrência por meio da linguagem e APIs. Programas Java podem ter
várias threads de execução, em que cada thread tem sua própria pilha de chamadas de método
e seu próprio contador de programa, permitindo que seja executada concorrentemente com
outras threads enquanto compartilha os recursos de nível de aplicativo como memória e handles
de arquivo. Essa capacidade é chamada multithreading
A qualquer momento, diz-se que uma thread está em um de vários estados de thread
Estado descrição
Uma nova thread inicia seu ciclo de vida no estado novo. Ela permanece nesse estado
até que o programa inicie a thread, o que a coloca no estado executável. Considera-
executável
se que uma thread no estado executável está executando sua tarefa.
Uma thread executável passa para o estado bloqueado quando tenta realizar uma
tarefa que não pode ser concluída imediatamente e deve esperar temporariamente
até que a tarefa seja concluída. Por exemplo, quando uma thread emite uma
solicitação de entrada/saída, o sistema operacional só permite que ela seja executada
bloqueado depois que a solicitação de E/S estiver concluída — nesse ponto, a thread bloqueada
faz uma transição para o estado executável, assim pode continuar a execução. Uma
thread bloqueada não pode utilizar um processador, mesmo se algum estiver
disponível.
Uma thread executável entra no estado terminado (às vezes chamado estado morto)
terminado quando ela conclui com sucesso suas tarefas ou é de outro modo terminada (talvez
em razão de um erro).
No nível do sistema operacional, o estado executável do Java geralmente inclui dois estados
separados. O sistema operacional oculta esses estados da Java Virtual Machine (JVM), que vê
apenas o estado executável. Quando uma thread entra pela primeira vez no estado executável a
partir do estado novo, ela está no estado pronto. Uma thread pronta entra no estado de execução
(isto é, começa a executar) quando o sistema operacional a atribui a um processador — também
conhecido como despachar a thread. Na maioria dos sistemas operacionais, cada thread recebe
uma pequena quantidade de tempo de processador — chamada de quantum ou fração de tempo
— com a qual realiza sua tarefa. Decidir qual deve ser o tamanho máximo do quantum é um tema-
chave nos cursos sobre sistemas operacionais. Quando o quantum expira, a thread retorna ao
estado pronto, e o sistema operacional atribui outra thread ao processador. As transições entre os
estados pronto e em execução são tratadas exclusivamente pelo sistema operacional. A JVM não
“vê” as transições — ela simplesmente vê a thread como executável e deixa para o sistema
operacional fazer a transição entre a thread pronta e em execução. O processo que um sistema
operacional usa para determinar qual thread despachar é chamado agendamento de thread e
depende das prioridades de thread.
Coleções
A Java API fornece várias estruturas de dados predefinidas, chamadas coleções, usadas para
armazenar grupos de objetos relacionados na memória. Essas classes fornecem métodos
eficientes que organizam, armazenam e recuperam seus dados sem a necessidade de conhecer
como os dados são armazenados.
Isso reduz o tempo de desenvolvimento de aplicativos. Você já usou arrays para armazenar
sequências de objetos. Arrays não mudam automaticamente o tamanho em tempo de execução
para acomodar elementos adicionais. A classe de coleção ArrayList<T> (pacote java.util) fornece
uma solução conveniente para esse problema — ela pode alterar dinamicamente seu tamanho
para acomodar mais elementos. O T (por convenção) é um espaço reservado — ao declarar um
novo ArrayList, substitua-o pelo tipo dos elementos que você deseja que o ArrayList armazene.
Por exemplo,
ArrayList<String> list;
declara list como uma coleção ArrayList que só pode armazenar Strings. Classes com esse tipo
de espaço reservado que podem ser usadas com qualquer tipo são chamadas classes genéricas.
Somente tipos não primitivos podem ser usados para declarar variáveis e criar objetos das classes
genéricas. Mas o Java fornece um mecanismo conhecido como boxing, que permite que valores
primitivos sejam empacotados como objetos para uso com classes genéricas. Assim, por exemplo,
ArrayList<Integer> integers;
declara integers como um ArrayList que só pode armazenar Integers. Ao inserir um valor int em
um ArrayList<Integer>, o valor int é empacotado como um objeto Integer, e quando você obtém
um objeto Integer de um ArrayList<Integer>, e então atribui o objeto a uma variável int, o valor int
dentro do objeto é desempacotado.
MÉTODO DESCRIÇÃO
add Adiciona um elemento ao final do ArrayList.
clear Remove todos os elementos do ArrayList.
contains Retorna true se o ArrayList contém o elemento especificado; caso contrário, retorna
false.
get Retorna o elemento no índice especificado.
indexOf Retorna o índice da primeira ocorrência do elemento especificado no ArrayList.
remove Sobrecarregado. Remove a primeira ocorrência do valor especificado ou o elemento
no índice especificado.
Size Retorna o número de elementos armazenados em ArrayList.
trimToSize Corta a capacidade do ArrayList para o número atual de elementos.
A classe LinkedList é quase idêntica à ArrayList. A classe LinkedList é uma coleção que pode
conter muitos objetos do mesmo tipo, assim como o ArrayList. A classe LinkedList tem todos os
mesmos métodos que a classe ArrayList porque ambos implementam a interface List. Isso
significa que você pode adicionar itens, alterar itens, remover itens e limpar a lista da mesma
maneira.
No entanto, embora a classe ArrayList e a classe LinkedList possam ser usadas da mesma
maneira, elas são construídas de maneira muito diferente.
A classe ArrayList tem um array regular dentro dela. Quando um elemento é adicionado, ele é
colocado no array. Se a matriz não for grande o suficiente, uma nova matriz maior é criada para
substituir a antiga e a antiga é removida.
A LinkedList armazena seus itens em "contêineres". A lista tem um link para o primeiro contêiner
e cada contêiner tem um link para o próximo contêiner na lista. Para adicionar um elemento à lista,
a) ArrayList<int> arr;
b) ArrayList<int>[] arr;
c) ArrayList<int> arr[];
d) ArrayList<Integer> arr[];
e) ArrayList<Integer> arr.
_______________________
Comentários: Pessoal, quando criamos o ArrayList carro – no exemplo – utilizamos a seguinte sintaxe: ArrayList<String>
carro. Da mesma forma, para criar um ArrayList do tipo inteiro, teríamos que usar: ArrayList<Integer> arr. Portanto, nosso
gabarito é a Letra E (Gabarito: Letra E).
Um Set é uma Collection não ordenada de elementos únicos (isto, sem duplicatas). A estrutura de
coleções contém diversas implementações de Set, incluindo HashSet e TreeSet. HashSet
armazena seus elementos em uma tabela de hash; e TreeSet armazena seus elementos em uma
árvore.
A estrutura de coleções também inclui a interface SortedSet (que estende Set) para conjuntos que
mantêm seus elementos em ordem classificada — a ordem natural dos elementos (por exemplo,
números estão em ordem crescente) ou uma ordem especificada por um Comparator. A classe
TreeSet implementa SortedSet
Vamos conhecer os mapas! Mapa ou Map associam chaves a valores. As chaves em um Map
devem ser únicas, mas os valores associados não precisam ser. Se um Map contém chaves únicas
e valores únicos, diz-se que implementa um mapeamento de um para um. Se somente as chaves
são únicas, diz-se que o Map implementa um mapeamento de muitos para um — muitas chaves
podem mapear para um valor.
Maps diferem de Sets pelo fato de que Maps contêm chaves e valores, enquanto Sets contêm
somente valores. Três das várias classes que implementam a interface Map são Hashtable,
HashMap e TreeMap. Hashtables e HashMaps armazenam elementos em tabelas de hash e
TreeMaps armazenam elementos em árvores. Esta seção discute as tabelas de hash e fornece um
exemplo que utiliza um HashMap para armazenar pares chave–valor. A interface SortedMap
estende Map e mantém suas chaves em ordem classificada — na ordem natural dos elementos ou
em uma ordem especificada por uma implementação Comparator. A classe TreeMap implementa
SortedMap.
MÉTODOs DESCRIÇÃO
clear() Remove todos os pares chave/valor do mapa;
containsKey(k) Retorna true se o mapa invocador contiver o objeto k como chave;
containsValue(v) Retorna true se o mapa contiver o objeto v como chave;
entrySet() Retorna um conjunto que contenha as entradas no mapa;
equals() Retorna true se mapas contiverem as mesmas entradas;
get() Retorna o valor associado com a chave k;
remove(k) Remove a entrada que tiver chave igual a k;
Um Set é uma Collection não ordenada que não contém elementos duplicados.
A interface SortedSet estende Set e representa um conjunto que mantém seus elementos na ordem de
classificação.
Streams e Serialização
O JAVA 8 foi usado para incluir o método stream() na API de Collections e possibilitar que todas
as coleções sejam fontes de dados para streams. Além deste, outros métodos padrão também
foram incorporados à API de coleções, como o removeIf() na interface Collection, e em
Comparator, o método reversed(), que retorna um novo comparador que realiza a ordenação ao
contrário.
O Java 8 apresenta diversas funcionalidades adicionadas à linguagem , uma das principais funções
é a Streams API, recurso que oferece ao desenvolvedor a possibilidade de trabalhar com conjuntos
de elementos de forma mais simples e com um número menor de linhas de código. Isso se tornou
possível graças à incorporação do paradigma funcional, combinado com as expressões lambda, o
que facilita a manutenção do código e aumenta a eficiência no processamento devido ao uso de
paralelismo.
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.
A Streams API traz uma nova opção para a manipulação de coleções em Java seguindo os
princípios da programação funcional. Combinada com as expressões lambda, ela proporciona uma
forma diferente de lidar com conjuntos de elementos, oferecendo ao desenvolvedor uma maneira
simples e concisa de escrever código que resulta em facilidade de manutenção e paralelização sem
efeitos indesejados em tempo de execução.
A proposta em torno da Streams API é fazer com que o desenvolvedor não se preocupe mais
com a forma de se programar o comportamento, deixando a parte relacionada ao controle de
fluxo e loop a cargo da API. É algo muito parecido com o que é feito com Threads, onde os
aspectos mais complexos ficam encapsulados em APIs e as regras de negócio passam a ser a única
responsabilidade do desenvolvedor.
Portanto, sabemos que o Java 8 introduz o conceito de streams, que são semelhantes aos
iteradores. Fluxos são objetos das classes que implementam a interface Stream (do pacote
java.util.stream) ou uma das interfaces de fluxo especializadas para processar coleções de valores
int, long ou double, Juntamente com lambdas, fluxos permitem realizar tarefas sobre coleções
de elementos, muitas vezes a partir de um objeto array ou coleção.
Fluxos movem elementos por meio de uma sequência de passos de processamento conhecidos
como pipeline de fluxo — que começa com uma origem de dados (como um array ou coleção),
realiza várias operações intermediárias sobre os elementos da origem de dados e termina com
uma operação terminal. Um pipeline de fluxo é formado encadeando chamadas de método. Ao
contrário de coleções, fluxos não têm um armazenamento próprio — depois que o fluxo é
processado, ele não pode ser reutilizado, porque não mantém uma cópia da origem de dados
original.
Uma operação intermediária especifica as tarefas a realizar sobre os elementos do fluxo e sempre
resulta em um novo fluxo. Operações intermediárias são “preguiçosas” — elas só são executadas
depois que uma operação terminal é invocada. Isso permite que desenvolvedores de biblioteca
otimizem o desempenho do processamento de fluxo. Por exemplo, se você tem uma coleção de
1.000.000 objetos Person e está procurando o primeiro com o sobrenome "Jones", o
processamento de fluxo pode terminar assim que o primeiro desses objetos Person for
encontrado.
Classe Descrição
filter Resulta em um fluxo contendo apenas os elementos que atendem uma condição.
distinct Resulta em um fluxo que contém somente os elementos únicos.
Método filter: filtra os elementos de um fluxo de acordo com alguma condição fornecida, ao final
ele nos retorna um fluxo apenas com os elementos que se enquadaram na condição. Dessa forma,
o método filter() cria um novo array com todos os elementos que passaram no teste
implementado pela função fornecida.
map: Resulta em um fluxo em que cada elemento do fluxo original é mapeado para
um novo valor
Code Conventions
Code Conventions Java é uma regra a ser seguida ao decidir como nomear seus identificadores,
como classe, pacote, variável, constante, método etc. Mas, não é forçado a seguir. Então, é
conhecido como convenção e não regra. Essas convenções são sugeridas por várias comunidades
Java, como Sun Microsystems e Netscape.
Todas as classes, interfaces, pacotes, métodos e campos da linguagem de programação Java são
fornecidos de acordo com a convenção de nomenclatura Java. Se você não seguir essas
convenções, poderá gerar confusão ou código errôneo.
tipo Descrição
Os nomes de classes iniciam com uma letra maiúscula e apresentam a letra inicial
Nomes e identificadores de de cada palavra que eles incluem em maiúscula (por exemplo, SampleClassName).
classe Essa convenção de nomenclatura é conhecida como notação camelo, porque as
letras maiúsculas destacam-se como corcovas desse animal.
Todo arquivo de código deve iniciar com comentários de início, que devem conter
Comentários iniciais informações a respeito da classe/interface, como por exemplo, nome da classe,
informações de versão, data e autor
Declarações de pacotes e A primeira linha de código após os comentários iniciais deve ser a declaração do
importações pacote (se necessário), e em sequência as declarações de importações
Declaração da A ordem em que elas devem aparecer é: Comentário de documentação, Declaração
da classe/interface, Comentários de implementação da classe, Atributos estáticos,
classe/interface Demais atributos, Construtores, Demais métodos.
Os recuos são utilizados para alinhar visualmente comandos pertencentes a blocos
Indentação ou recuo de de código. Um bloco é o código envolvido pelos delimitadores { e }, como por
código exemplo o if. A regra geral é abrir o bloco na linha do comando e fechar alinhado a
ele.
Quando uma expressão não couber numa única linha, quebrá-la de acordo com as
seguintes regras básicas: Após uma vírgula, Antes de um operador, Alinhar a nova
Quebras de linha linha com o início da expressão da linha anterior, Se as regras acima gerarem
código confuso, ou se a linha de baixo ficar colada na margem, use uma tabulação
de 8 espaços.
Há quatro possíveis formatos de comentário de implementação: bloco, linha, à
direita e no fim da linha. Os comentários de bloco são utilizados para descrever
arquivos de código, métodos ou algum algoritmo dentro de um método. Procure
sempre inserir uma linha em branco antes do bloco de comentários. Os
Comentários de comentários de linha são para comentários curtos, e devem ser precedidos com
implementação uma linha em branco, assim como o comentário de bloco. Comentários muito
curtos podem aparecer na mesma linha do código que descrevem, mas devem ser
deslocados o suficiente para separá-los das declarações. O delimitador de
comentário // pode servir para comentar toda uma linha ou apenas parte dela.
Ao declarar variáveis, observe as seguintes regras: Faça apenas uma declaração por
Declarações linha, de modo a incentivar o uso de comentários, Inicialize apenas uma variável
por linha, Use letras minúsculas e evite caracteres especiais.
Pacotes Letras minúsculas sem caracteres especiais
Os nomes de classe devem ser substantivos, com a primeira letra de cada palavra
Classes e interna em maiúscula. Tente manter seus nomes de classe simples e descritivos.
interfaces Evite siglas e abreviações (a menos que a sigla seja muito mais usada do que a
forma longa, como a URL ou HTML) .
As boas práticas de programação chamam a atenção a técnicas que irão ajudá-lo a criar
programas que são mais claros, mais compreensíveis e mais fáceis de manter. Vejamos algumas.
• Algumas organizações exigem que todo programa comece com um comentário que
informa o objetivo e o autor dele, a data e a hora em que foi modificado pela última vez.
• Recue o corpo inteiro de cada declaração de classe por um “nível” entre a chave esquerda e
a chave direita que delimitam o corpo da classe. Esse formato enfatiza a estrutura da
declaração de classe e torna mais fácil sua leitura. Usamos três espaços para formar um
nível de recuo — muitos programadores preferem dois ou quatro espaços. Qualquer que
seja o estilo que você escolher, utilize-o de modo consistente.
• Recue o corpo inteiro de cada declaração de método um “nível” entre as chaves que
definem o corpo do método. Isso faz com que a estrutura do método se destaque, tornando
a declaração do método mais fácil de ler.
• Coloque um espaço depois de cada vírgula (,) em uma lista de argumentos para tornar os
programas mais legíveis.
• Declarar cada variável em uma declaração própria. Esse formato permite que um
comentário descritivo seja inserido ao lado de cada ser variável que é declarado.
• Insira uma única declaração por linha em um programa para facilitar a leitura
espera. Se, em uma expressão complexa, você não estiver seguro quanto à ordem da
avaliação, utilize parênteses para forçar essa ordem, exatamente como você faria em
expressões algébricas.
• Recue as duas instruções do corpo de uma instrução if…else. Muitos IDEs fazem isso por
você. Se existem vários níveis de recuo, cada nível deve ser recuado pela mesma quantidade
adicional de espaço.
• Sempre inclua chaves em uma instrução do…while. Isso ajuda a eliminar ambiguidade entre
a instrução while e uma instrução do...while que contém apenas uma instrução.
Java 8
O Java 8 é a release mais recente do Java que contém novas funcionalidades, aprimoramentos e
correções de bug para aumentar a eficiência do desenvolvimento e execução de programas Java.
A nova release do Java primeiro é disponibilizada para desenvolvedores, a fim de permitir um
tempo adequado de teste e certificação, e só então fica disponível no site java.com para que
usuários finais façam download. As novas funcionalidades do Java 8 são:
API de Data e Hora: Essa nova API permitirá que os desenvolvedores tratem data e hora de
maneira mais natural, clara e fácil de entender.
Nashhorn JavaScript Engine: Uma nova implementação leve de alto desempenho do motor
JavaScript foi integrada ao JDk e está disponível para aplicações Java por meio das APIs existentes.
Maior Segurança: A lista manual existente de métodos sensíveis do chamador foi substituída por
um mecanismo que identifica com precisão esses métodos e permite que seus chamadores sejam
descobertos com confiança.
Java 8 trouxe também o recurso denominado Default Methods, que foi introduzido para
possibilitar a evolução de interfaces ao permitir que interfaces já existentes ofereçam métodos
novos sem que os códigos que as implementem também tenham que fornecer uma
implementação para esses métodos.
Diante disso, note que um dos focos dessa nova versão continua sendo manter a compatibilidade
com códigos legados e ser o menos intrusivo possível, ou seja, afetar o menos possível as antigas
APIs.
Java 17
A Oracle anunciou em setembro de 2021 a disponibilização do Java 17, a versão mais recente da
plataforma de desenvolvimento e linguagem de programação que é número um do mundo. O
Java 17 oferece milhares de atualizações de desempenho, estabilidade e segurança, bem como
14 JEPs (JDK Enhancement Proposals) que melhoram ainda mais a linguagem e a plataforma
Java para ajudar os desenvolvedores a serem mais produtivos.
Java 17 é o mais recente lançamento de suporte de longo prazo (LTS) sob a cadência de
lançamento de seis meses do Java e é o resultado de uma ampla colaboração entre engenheiros
da Oracle e outros membros da comunidade mundial de desenvolvedores Java, por meio da
OpenJDK Community e do Java Community Process (JCP). Desde o lançamento do JDK 11 LTS
anterior há três anos, mais de 70 JEPs foram implementados.
Os JEPs são divididos em: Aprimoramento da linguagem Java (JEP 409), Atualizações e melhorias
para bibliotecas( JEPs 306, 356, e 382), Suporte para nova plataforma (JEP 391), Removals and
Deprecations (JEPs 398, 407, 410 e 411), Programas Java de Prova Futura (JEP 403), Visualizações
e incubadoras para versões posteriores do JDK (JEPs 406, 412, 414). Vejamos os nomes e as
descrições dos 17 JEPs!
JEP Descrição
Classes e interfaces seladas restringem outras classes ou interfaces que podem
estendê-las ou implementá-las. Esse aprimoramento é mais um aprimoramento
JEP 409: Classes seladas
do Projeto Amber, que visa aumentar a produtividade do desenvolvedor por
meio da evolução da linguagem Java.
A linguagem de programação Java e a máquina virtual Java, originalmente
JEP 306: Restaure a semântica tinham apenas semântica de ponto flutuante estrita. A partir do Java 1.2,
de ponto flutuante Always- pequenas variações nessas semânticas estritas foram permitidas por padrão para
Strict acomodar as limitações das arquiteturas de hardware atuais. Essas variações não
são mais úteis ou necessárias, por isso foram removidas pelo JEP 306.
Fornece novos tipos de interface e implementações para geradores de número
JEP 356: Gerador de número pseudo-aleatório (PRNGs). Essa mudança melhora a interoperabilidade de
pseudo-aleatório aprimorado diferentes PRNGs e torna mais fácil solicitar um algoritmo com base em
requisitos, em vez de codificar uma implementação específica.
JEP 382: Novo pipeline de Implementa um pipeline Java 2D para macOS usando a API Apple Metal. O novo
renderização do macOS pipeline reduzirá a dependência do JDK na API Apple OpenGL obsoleta.
Portas do JDK para a plataforma macOS / AArch64. Esta porta permitirá que os
JEP 391: macOS AArch64 Port aplicativos Java sejam executados nativamente nos novos computadores Apple
Silicon baseados no Arm 64.
Todos os fornecedores de navegadores da web removeram o suporte para plug-
ins de navegador Java ou anunciaram planos para iniciarem a solução. A API
JEP 398: descontinuar a API do
Applet foi descontinuada, mas não para remoção, no Java 9 em setembro de
miniaplicativo para remoção 2017.
O Java 17 LTS é a versão de suporte de longo prazo mais recente para a plataforma Java SE. Os
binários JDK 18 e JDK 17 são gratuitos para uso em produção e para redistribuição, sem custo.
No site da Oracle temos a informação que o JDK 18 receberá atualizações até setembro de 2022,
quando será substituído pelo JDK 19. O JDK 17 receberá atualizações até pelo menos setembro
de 2024.
REFERÊNCIAS
https://www.oracle.com/br/java/
https://www.w3schools.com/java/java_ref_keywords.asp
Deitel, Paul. Java: como programar / Paul Deitel, Harvey Deitel; tradução Edson Furmankiewicz;
revisão técnica Fabio Lucchini. -- São Paulo: Pearson Education do Brasil, 2017
RESUMO
Característica Descrição
Não contém redundâncias e é fácil de entender, implementar e usar. Parecida com
Concisa e simples C++ para facilitar compreensão por grande parte de programadores. É uma evolução
de C++: não suporta aritmética de ponteiros, registros, coercions, etc.
Orientada a objetos Suporta os principais conceitos de orientação a objetos. Favorece reusabilidade.
Altamente tipada. Programas são confiáveis. Reduz imprevistos em tempo de
Robusta execução: variáveis são automaticamente inicializadas, uso disciplinado de
ponteiros, rotinas devem ser chamadas corretamente, etc.
Completamente especificada. Não contém aspectos dependentes da
Portável
implementação: o tamanho dos tipos é fixo para qualquer implementação, etc.
Restrições de acesso a arquivos, manipulação de ponteiros, etc. Implica que não é útil
Segura
para desenvolver certas aplicaçoes como `device drivers'.
Concorrente Suporta aplicações concorrentes: multithreads, monitores, execução atômica.
Independente de Geração de bytecode que pode ser interpretado para qualquer arquitetura e sistema
plataforma operacional tendo o sistema Java. Facilita distribuição de software.
Interpretada Facilita desenvolvimento exploratório.
Utilizando compiladores, bytecodes podem ser traduzidos em tempo de execução
Compilada
para código de máquina.
segura
extensível
concorrente
distribuída
híbrida: compilada e interpretada
Java é uma linguagem WORA, que significa Write once, run anywhere ou "Escreva uma vez,
execute em qualquer lugar"
Pacotes
O software de aplicativos é distribuído em unidades denominadas pacotes. Um pacote é um
conjunto de arquivos e diretórios necessários para um produto de software. Um pacote é
geralmente criado e construído por um desenvolvedor de aplicativos depois de terminar de
Herança
Java oferece mecanismos para definir classes derivadas a partir de classes existentes
jobject
todos os objetos java
applet
Identificadores
O Java é case sensitive, ou seja, Java diferencia maiúsculas de minúsculas: "MyClass" e "myclass"
têm significados diferentes assim como Analista é diferente de analista.
Palavras Reservadas
Palavras-chave, ou palavras reservadas não podem ser usadas como identificadores, ou seja,
não podem ser usadas como nome de variáveis, nome de classes, etc.
Palavra Descrição
Um modificador sem acesso. Usado para classes e métodos: Uma classe abstrata não
pode ser usada para criar objetos (para acessá-la, ela deve ser herdada de outra
abstract
classe). Um método abstrato só pode ser usado em uma classe abstrata e não possui
um corpo. O corpo é fornecido pela subclasse (herdado de)
boolean Um tipo de dados que pode armazenar apenas valores verdadeiros e falsos
break Sai de um loop ou de um bloco de repetição
byte Um tipo de dados que pode armazenar números inteiros de -128 e 127
case Marca um bloco de código em instruções switch
catch Captura exceções geradas por instruções try
char Captura exceções geradas por instruções try
class Define uma classe
const Define uma constante. Não está em uso - use final.
continue Continua para a próxima iteração de um loop
default Especifica o bloco de código padrão em uma instrução switch
do Usado junto com while para criar um loop do-while.
double Um tipo de dados que pode armazenar números inteiros de 1,7e−308 a 1,7e+308
else Usado em instruções condicionais
enum Declara um tipo enumerado (imutável)
extends Estende uma classe (indica que uma classe é herdada de outra classe)
Um modificador sem acesso usado para classes, atributos e métodos, o que os torna
final
inalteráveis (impossíveis de herdar ou substituir)
Usado com exceções, um bloco de código que será executado independente de haver
finally
uma exceção ou não
float Um tipo de dados que pode armazenar números inteiros de 3.4e−038 a 3.4e+038
for Criar um loop for
goto Não está em uso
if Faz uma declaração condicional
implements Implementa uma interface
import Usado para importar um pacote, classe ou interface
instanceof Verifica se um objeto é uma instância de uma classe específica ou uma interface
Um tipo de dados que pode armazenar números inteiros de -2147483648 a
int
2147483647
Usado para declarar um tipo especial de classe que contém apenas métodos
interface
abstratos
Um tipo de dados que pode armazenar números inteiros de -9223372036854775808
long
a 9223372036854775808
módulo Declara um módulo. Novo no Java 9
Especifica que um método não é implementado no mesmo arquivo de origem Java
native
(mas em outra linguagem)
new Cria novos objetos
package Declara um pacote
Um modificador de acesso usado para atributos, métodos e construtores, tornando-
private
os acessíveis apenas dentro da classe declarada
Um modificador de acesso usado para atributos, métodos e construtores, tornando-
protected
os acessíveis no mesmo pacote e subclasses
Um modificador de acesso usado para classes, atributos, métodos e construtores,
public
tornando-os acessíveis por qualquer outra classe
requires Especifica as bibliotecas necessárias dentro de um módulo. Novo no Java 9
Finalizou a execução de um método e pode ser usado para retornar um valor de um
return
método
short Um tipo de dados que pode armazenar números inteiros de -32768 a 32767
Um modificador sem acesso usado para métodos e atributos. Métodos/atributos
static
estáticos podem ser acessados sem criar um objeto de uma classe
strictfp Restringir a precisão e o arredondamento dos cálculos de ponto flutuante
super Refere-se a objetos da superclasse (pai)
switch Seleciona um dos muitos blocos de código a serem executados
Um modificador sem acesso, que especifica que os métodos só podem ser acessados
synchronized
por um thread por vez
Pessoal, estes modificadores são MUITO importantes e caem MUITO nas provas! Portanto
repeti uma tabela com os modificadores de acesso!
modificadores Descrição
A classe e/ou seus membros são acessíveis somente por classes do mesmo pacote,
Default ou package na sua declaração não é definido nenhum tipo de modificador, sendo este
identificado pelo compilador. Permite que apenas classes do mesmo pacote tenham
acesso as propriedades que possuem este modificador.
public O código é acessível para todas as classes
Membros da classe definidos como private não podem ser acessados ou usados por
nenhuma outra classe. Esse modificador não se aplica às classes, somente para seus
private métodos e atributos. Esses atributos e métodos também não podem ser visualizados
pelas classes herdadas.
Tipos Primitivos
Operadores
Operadores são símbolos que representam atribuições, cálculos e ordem dos dados. As operações
seguem uma ordem de prioridades, ou seja, alguns cálculos (ou outros) são processados antes de
outros. Por exemplo, na Álgebra podemos mostrar a seguinte ordem: primeiro divisão e
multiplicação e depois soma e subtração.
Operadores Aritméticos +, -, *, /, %.
Precedência indica a ordem na qual um operador opera em relação à avaliação de uma expressão.
A tabela seguinte elenca os operadores por precedência, do maior para o menor.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 100
www.estrategiaconcursos.com.br 272
Vetores
Índice inicia em zero [0], [1], [2], [3], [4], [5] ...
Conversão de Tipos
A conversão de tipo é quando você atribui um valor de um tipo de dados primitivo a outro tipo. Em
Java, existem dois tipos de conversão:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 101
www.estrategiaconcursos.com.br 272
Controle de Fluxo
if: especifica um bloco de código a ser executado, se uma condição especificada for
verdadeira
condicionais
else: especifica um bloco de código a ser executado, se a mesma condição for falsa
else if: especificar uma nova condição a ser testada, se a primeira condição for falsa
Não esqueça de aumentar a variável usada na condição, caso contrário o loop nunca terminará!
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 102
www.estrategiaconcursos.com.br 272
Classes e Objetos
Classe Maçã
Objetos
FRUTA
Manga Banana
Tudo em Java está associado a classes e objetos, juntamente com seus atributos e métodos. Por
exemplo: na vida real, um carro é um objeto. O carro tem atributos, como peso e cor, e métodos,
como tração e freio. Uma classe é como um construtor de objetos, ou um "projeto" para criar
objetos.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 103
www.estrategiaconcursos.com.br 272
Classe Volvo
Objetos
Carro
Toyota Audi
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 104
www.estrategiaconcursos.com.br 272
modificador descrição
final A classe não pode ser herdada por outras classes
A classe não pode ser usada para criar objetos. Para acessar uma classe abstrata, ela
abstract
deve ser herdada de outra classe.
modificador descrição
final Atributos e métodos finais não podem ser substituídos/modificados
static Atributos e métodos estáticos pertencem à classe, em vez de um objeto
Só pode ser usado em uma classe abstrata e só pode ser usado em métodos. O
abstract método não tem um corpo, por exemplo abstract void run();. O corpo é fornecido
pela subclasse (herdado da subclasse).
transient Atributos e métodos são ignorados ao serializar o objeto que os contém
synchronized Métodos synchronized só podem ser acessados por um thread por vez
O valor de um atributo não é armazenado em cache localmente e é sempre lido na
volatile
"memória principal"
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 105
www.estrategiaconcursos.com.br 272
os detalhes de
Classes (e seus objetos) Os objetos não sabem como implementação
encapsulam, isto é, contêm outros objetos são permanecem ocultos
seus atributos e métodos implementados dentro dos próprios
objetos
INTERFACES
polimorfismo
A mesma mensagem enviada a uma variedade de objetos tem muitas formas de resultados.
Sincronismo e Multithreading
A qualquer momento, diz-se que uma thread está em um de vários estados de thread
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 106
www.estrategiaconcursos.com.br 272
Estado descrição
Uma nova thread inicia seu ciclo de vida no estado novo. Ela permanece nesse estado
até que o programa inicie a thread, o que a coloca no estado executável. Considera-
executável
se que uma thread no estado executável está executando sua tarefa.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 107
www.estrategiaconcursos.com.br 272
pode conter uma thread que grave periodicamente backups (isto é, grava uma cópia)
do documento atual no disco para fins de recuperação. Se a thread não dormisse
entre os sucessivos backups, seria necessário um loop em que testaria
continuamente se deve ou não gravar uma cópia do documento em disco. Esse loop
consumiria tempo de processador sem realizar trabalho produtivo, reduzindo assim
o desempenho do sistema. Nesse caso, é mais eficiente para a thread especificar um
intervalo de adormecimento (igual ao período entre backups sucessivos) e entrar no
estado de espera sincronizada. Essa thread é retornada ao estado executável quando
seu intervalo de adormecimento expira, ponto em que ela grava uma cópia do
documento no disco e entra novamente no estado de espera sincronizada.
Uma thread executável passa para o estado bloqueado quando tenta realizar uma
tarefa que não pode ser concluída imediatamente e deve esperar temporariamente
até que a tarefa seja concluída. Por exemplo, quando uma thread emite uma
solicitação de entrada/saída, o sistema operacional só permite que ela seja executada
bloqueado depois que a solicitação de E/S estiver concluída — nesse ponto, a thread bloqueada
faz uma transição para o estado executável, assim pode continuar a execução. Uma
thread bloqueada não pode utilizar um processador, mesmo se algum estiver
disponível.
Uma thread executável entra no estado terminado (às vezes chamado estado morto)
terminado quando ela conclui com sucesso suas tarefas ou é de outro modo terminada (talvez
em razão de um erro).
Coleções
A Java API fornece várias estruturas de dados predefinidas, chamadas coleções, usadas para
armazenar grupos de objetos relacionados na memória. Essas classes fornecem métodos
eficientes que organizam, armazenam e recuperam seus dados sem a necessidade de conhecer
como os dados são armazenados.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 108
www.estrategiaconcursos.com.br 272
A classe LinkedList é quase idêntica à ArrayList. A classe LinkedList é uma coleção que pode
conter muitos objetos do mesmo tipo, assim como o ArrayList. A classe LinkedList tem todos os
mesmos métodos que a classe ArrayList porque ambos implementam a interface List. Isso
significa que você pode adicionar itens, alterar itens, remover itens e limpar a lista da mesma
maneira.
A LinkedList armazena seus itens em "contêineres". A lista tem um link para o primeiro contêiner
e cada contêiner tem um link para o próximo contêiner na lista. Para adicionar um elemento à lista,
o elemento é colocado em um novo contêiner e esse contêiner é vinculado a um dos outros
contêineres da lista.
MÉTODOs DESCRIÇÃO
clear() Remove todos os pares chave/valor do mapa;
containsKey(k) Retorna true se o mapa invocador contiver o objeto k como chave;
containsValue(v) Retorna true se o mapa contiver o objeto v como chave;
entrySet() Retorna um conjunto que contenha as entradas no mapa;
equals() Retorna true se mapas contiverem as mesmas entradas;
get() Retorna o valor associado com a chave k;
remove(k) Remove a entrada que tiver chave igual a k;
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 109
www.estrategiaconcursos.com.br 272
Um Set é uma Collection não ordenada que não contém elementos duplicados.
A interface SortedSet estende Set e representa um conjunto que mantém seus elementos na ordem de
classificação.
Streams e Serialização
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 110
www.estrategiaconcursos.com.br 272
map: Resulta em um fluxo em que cada elemento do fluxo original é mapeado para
um novo valor
Code Conventions
tipo Descrição
Os nomes de classes iniciam com uma letra maiúscula e apresentam a letra inicial
Nomes e identificadores de de cada palavra que eles incluem em maiúscula (por exemplo, SampleClassName).
classe Essa convenção de nomenclatura é conhecida como notação camelo, porque as
letras maiúsculas destacam-se como corcovas desse animal.
Todo arquivo de código deve iniciar com comentários de início, que devem conter
Comentários iniciais informações a respeito da classe/interface, como por exemplo, nome da classe,
informações de versão, data e autor
Declarações de pacotes e A primeira linha de código após os comentários iniciais deve ser a declaração do
importações pacote (se necessário), e em sequência as declarações de importações
Declaração da A ordem em que elas devem aparecer é: Comentário de documentação, Declaração
da classe/interface, Comentários de implementação da classe, Atributos estáticos,
classe/interface Demais atributos, Construtores, Demais métodos.
Os recuos são utilizados para alinhar visualmente comandos pertencentes a blocos
Indentação ou recuo de de código. Um bloco é o código envolvido pelos delimitadores { e }, como por
código exemplo o if. A regra geral é abrir o bloco na linha do comando e fechar alinhado a
ele.
Quando uma expressão não couber numa única linha, quebrá-la de acordo com as
seguintes regras básicas: Após uma vírgula, Antes de um operador, Alinhar a nova
Quebras de linha linha com o início da expressão da linha anterior, Se as regras acima gerarem
código confuso, ou se a linha de baixo ficar colada na margem, use uma tabulação
de 8 espaços.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 111
www.estrategiaconcursos.com.br 272
Ao declarar variáveis, observe as seguintes regras: Faça apenas uma declaração por
Declarações linha, de modo a incentivar o uso de comentários, Inicialize apenas uma variável
por linha, Use letras minúsculas e evite caracteres especiais.
Pacotes Letras minúsculas sem caracteres especiais
Os nomes de classe devem ser substantivos, com a primeira letra de cada palavra
Classes e interna em maiúscula. Tente manter seus nomes de classe simples e descritivos.
interfaces Evite siglas e abreviações (a menos que a sigla seja muito mais usada do que a
forma longa, como a URL ou HTML) .
Métodos devem ser verbos, em maiúsculas e minúsculas com a primeira letra
Métodos
minúscula, com a primeira letra de cada palavra interna em maiúscula.
Devem iniciar com minúscula. Palavras internas começam com letras maiúsculas.
Não deve começar com underline ou $, mesmo que ambos sejam permitidos. Use
Variáveis nomes curtos, mas significativos. O nome deve indicar a intenção da utilização da
variável. Os nomes comuns para variáveis temporárias são i, j, k, m, n e para
inteiros, c, d, e e para caracteres.
Constantes Constantes devem ter todas as letras maiúsculas separadas por underline
Java 17
JEP Descrição
Classes e interfaces seladas restringem outras classes ou interfaces que podem
estendê-las ou implementá-las. Esse aprimoramento é mais um aprimoramento
JEP 409: Classes seladas
do Projeto Amber, que visa aumentar a produtividade do desenvolvedor por
meio da evolução da linguagem Java.
A linguagem de programação Java e a máquina virtual Java, originalmente
JEP 306: Restaure a semântica tinham apenas semântica de ponto flutuante estrita. A partir do Java 1.2,
de ponto flutuante Always- pequenas variações nessas semânticas estritas foram permitidas por padrão para
Strict acomodar as limitações das arquiteturas de hardware atuais. Essas variações não
são mais úteis ou necessárias, por isso foram removidas pelo JEP 306.
Fornece novos tipos de interface e implementações para geradores de número
JEP 356: Gerador de número pseudo-aleatório (PRNGs). Essa mudança melhora a interoperabilidade de
pseudo-aleatório aprimorado diferentes PRNGs e torna mais fácil solicitar um algoritmo com base em
requisitos, em vez de codificar uma implementação específica.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 112
www.estrategiaconcursos.com.br 272
JEP 382: Novo pipeline de Implementa um pipeline Java 2D para macOS usando a API Apple Metal. O novo
renderização do macOS pipeline reduzirá a dependência do JDK na API Apple OpenGL obsoleta.
Portas do JDK para a plataforma macOS / AArch64. Esta porta permitirá que os
JEP 391: macOS AArch64 Port aplicativos Java sejam executados nativamente nos novos computadores Apple
Silicon baseados no Arm 64.
Todos os fornecedores de navegadores da web removeram o suporte para plug-
ins de navegador Java ou anunciaram planos para iniciarem a solução. A API
JEP 398: descontinuar a API do
Applet foi descontinuada, mas não para remoção, no Java 9 em setembro de
miniaplicativo para remoção 2017.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 113
www.estrategiaconcursos.com.br 272
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 }
Comentários:
Primeiramente, temos que a assertiva a está incorreta, já que a linha 5 não gera erro, pois entre
interfaces pode haver "herança múltipla”, ou seja, herança de duas ou mais classes. Agora vamos
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 114
www.estrategiaconcursos.com.br 272
analisar o código. No código há três interfaces, Segunda, Terca e Quarta além das classes Sexta e
Quinta. Sendo que a classe Quinta é classe pai, ou superclasse, e a classe Sexta é classe filha, ou
subclasse. O foco da questão está na chamada da linha 21 Quinta dia = (Quinta) new Sexta(); nessa
linha, temos que o objeto dia chama o método construtor Sexta, que está na classe Sexta, que é
filha de Quinta. Quando esse objeto for criado, ele vai à classe Sexta e procura pelo método
segunda, se o encontrar ali, executa o que estiver no corpo do método, senão, ele vai à classe
Quinta a procura de um método segunda. Daí, quando a linha dia.segunda(); for executada, o
objeto dia procura um método segunda. Ele vai à classe Sexta, pois esse é o método construtor
que foi passado na criação do objeto, após isso, caso não encontre o método segunda na classe
Sexta, ele vai à classe Quinta, que deve ter um método segunda presente em seu corpo. Assim, o
resultado que será apresentado na tela é Segunda! E temos nosso gabarito na alternativa C.
Gabarito: Letra C
2. (FGV – TJDFT – 2022) Observe as classes abaixo descritas na linguagem de programação Java.
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; }
}
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 115
www.estrategiaconcursos.com.br 272
Comentários:
Vamos analisar as assertivas: a letra a diz que os atributos private de DocumentoProcesso são
acessíveis por Oficio. Vejamos a classe Oficio: a declaração dela é a seguinte: public class Oficio
extends DocumentoProcesso. Portanto, ofício é filha da classe DocumentoProcesso. Já que os
atributos possuem o modificador private, eles não podem ser compartilhados entre as classes.
Lembrem-se da definição: Membros da classe definidos como private não podem ser acessados
ou usados por nenhuma outra classe. Assim, temos uma assertiva errada. Letra B: a anotação
@Override indica que o método promove() é abstrato e polimórfico. Errada assertiva B porque
@Override indica que um método da classe-pai será sobrescrito por um método da classe-filha,
ou seja, a classe filha modifica o método que foi declarado na classe pai. Para indica que o método
promove() é abstrato deveria ser utilizado abstract. A letra C também está errada, pois na verdade,
é a classe DocumentoProcesso que faz referência à Oficio. Por fim, temos o nosso gabarito na letra
E. Pessoal, os métodos getDocNumero() e setDocNumero() de fato, são utilizados para encapsular
o atributo docNumero. Ademais, asseguram que os objetos da classe mantenham estados
consistentes. Getters e setters são usados para proteger seus dados, especialmente na criação de
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 116
www.estrategiaconcursos.com.br 272
classes. Para cada instância de variável, um método getter retorna seu valor, enquanto um
método setter o define ou atualiza seu valor.
Gabarito: Letra E
Comentários:
Sobrecarga ou Polimorfismo Estático ocorre quando uma classe possui métodos com mesmo
nome, entretanto assinaturas diferentes. Ocorre em Tempo de Compilação. Veja que o método
reajuste possui diferentes implementações. Com essa explicação inicial podemos verificar que a
letra A está incorreta, pois não ocorre sobrescrita, mas sim, sobrecarga. O erro da letra B consiste
em dizer que método reajuste não pode ser estático. O erro da letra C consiste na falta do “double”
indicado double sal = (double) 1000.5; double c = Calcular.reajuste(sal). O erro da alternativa d é
dizer que não é permitido criar vários métodos com o mesmo nome. Na verdade, não vai ocorrer
um erro. Ocorre uma sobrescrita que é possível em Java! Por fim, temos nosso gabarito Letra E!
Gabarito: Letra E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 117
www.estrategiaconcursos.com.br 272
Comentários:
Vamos lá, um construtor é um método especial usado para inicializar objetos. O construtor é
chamado quando um objeto de uma classe é criado. Ele pode ser usado para definir valores iniciais
para atributos de objeto. o construtor é apenas invocado no momento da criação do objeto através
do operador new. A assinatura de um construtor diferencia-se das assinaturas dos outros métodos
por não ter nenhum tipo de retorno (nem mesmo void). Além disto, o nome do construtor deve
ser o próprio nome da classe. O construtor pode receber argumentos, como qualquer método.
Usando o mecanismo de sobrecarga, mais de um construtor pode ser definido para uma classe.
Assim, temos que os itens I, II e III estão corretos. Já, a assertiva IV está errada, pois pode ser public,
protected ou private.
Gabarito: Letra D
a) um erro de compilação.
b) um erro de execução.
c) a linha “Sim”.
d) a linha “Não”.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 118
www.estrategiaconcursos.com.br 272
e) a linha “Talvez”.
Comentários:
A questão está totalmente focada no operador ternário String out = (a^b)==0 ? "Sim": (a & b)!=0.
Vamos destrinchá-lo. Inicialmente temos: (a^b)==0. O operador ^é um XOR que consiste em um
ou exclusivo que retorna 1 se os bits forem diferentes: Portanto, temos a = 4 e b = 16. a é igual 4
que é igual a 00100 em binário e b – 16 – é igual a 10000 em binário. Fazendo a operação XOR entre
os valores temos como resultado 10100, que é igual a 20 em decimal. Podemos perceber que o
valor não é sim, já que 20 não é igual a 0. Portanto vamos ao próximo argumento que é (a & b)!=0.,
ou seja, a e b é diferente de zero. Vejamos como fica o resultado de a & b = 00000 porque o
operador “E” (&) só retorna 1 se ambos bits forem 1: a - 00100 (4) b - 10000 (16) = 00000 (0). Veja
que o teste vai ficar da seguinte forma: (a & b) != 0. Sabemos que a & b é 0 (de acordo com o cálculo
acima. Assim fica 0 != 0 ? ou seja, zero é diferente de zero? Não né! Então é retornado o valor
“Não”. Já que o operador ternário (TESTE)? X : Y retorna X, se TESTE for verdadeiro, e Y se teste
for falso.
Gabarito: Letra D
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 119
www.estrategiaconcursos.com.br 272
Gabarito: Letra E
7. (FGV – MPE-AL – 2018) Sobre as variáveis e os métodos declarados como private, em Java,
analise as afirmativas a seguir.
a) I, apenas.
b) II, apenas.
c) III, apenas.
d) I e II, apenas.
e) II e III, apenas.
Comentários:
Pessoal, vamos relembrar a tabela? As variáveis e os métodos private ficam acessíveis apenas aos
membros da própria classe! Não ficam disponíveis no pacote e também não ficam acessíveis ás
subclasses! Portanto nosso gabarito é apenas o item I.
Gabarito: Letra A
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 120
www.estrategiaconcursos.com.br 272
Comentários:
Gabarito: Letra C
Assinale o código que exibe corretamente um elemento de cada linha desse array.
Comentários:
Bom, o array é multidimentional, possui duas dimensões, costuma-se dizer “i” e “j”. A questão
solicita exibir a primeira linha do array. A primeira linha é composta de 6 elementos (0,1,2,3,4,5).
É necessário que o for seja de 0 até 5. Ademais, para exibir o conteúdo de cada linha usa-se o nome
do array (multi) com a respectiva referência: [i][0]. Assim, temos como gabarito a letra A.
Gabarito: Letra A.
10. (FGV – ALE-RO – 2018) No contexto da linguagem Java, assinale o modificador (modifier) que
se refere ao nível de acesso.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 121
www.estrategiaconcursos.com.br 272
a) abstract
b) final
c) protected
d) static
e) volatile
Comentários:
É nesse momento que você pensa: podia tanto cair uma questão dessas na minha prova .os
modificadores são 4: Privado, Protegido, Público e Pacote. Portanto, nosso gabarito é a letra C.
Vejamos as definições das demais alternativas: abstract: Aplicado a um método ou classe indica
que a implementação completa deste método ou classe é efetuada posteriormente, por uma
subclasse. Caso seja uma classe, significa que ela não pode ser instanciada. Final: é usada para
impossibilitar que uma classe seja estendida, que um método seja sobrescrito ou que uma variável
seja reinicializada. Ou seja, no caso da questão, mantém o atributo constante. Static: é usada para
marcar um método ou variável para que se tenha apenas uma cópia da memória desse membro.
Volatile: para que se possa acessar recursos específicos do sistema operacional, indica que uma
determinada variável de instância pode ser modificada em duas threads distintas ao mesmo
tempo.
Gabarito: Letra C
11. (FGV – ALE-RO – 2018) Sobre construtores (constructors), no contexto da linguagem Java,
analise as afirmativas a seguir.
Comentários:
Pessoal, o item II está perfeito! A interface só declara métodos e constantes. Ela não implementa!
Uma classe abstrata pode ter um ou mais construtores. O item II também está correto: Embora
não seja possível criar objetos de uma classe abstrata, em uma hierarquia de classes o construtor
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 122
www.estrategiaconcursos.com.br 272
Gabarito: Letra E
Comentários:
A questão diz que Java permite a manipulação de expressões regulares, e solicita as três classes
mais importantes do pacote. Vejamos o que diz a definição do W3Schools, primeiro sobre
expressões regulares: Uma expressão regular é uma sequência de caracteres que forma um padrão
de pesquisa. Uma expressão regular pode ser um único caractere ou um padrão mais complicado.
As expressões regulares podem ser usadas para executar todos os tipos de pesquisa de texto e
operações de substituição de texto . Java não tem uma classe de Expressão Regular embutida,
mas podemos importar o java.util.regex pacote para trabalhar com expressões regulares. O
pacote inclui as seguintes classes: PatternClasse - Define um padrão (para ser usado em uma
pesquisa). MatcherClasse - Usada para procurar o padrão. PatternSyntaxExceptionClasse - Indica
erro de sintaxe em um padrão de expressão regular. Portanto as três classes mais importantes são:
Pattern, Matcher e PatternSyntaxException e o nosso gabarito é a letra C.
Gabarito: Letra C
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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 123
www.estrategiaconcursos.com.br 272
Comentários:
Vamos traduzir essa sopa de letrinhas? JNDI - Java Naming and Directory Interface (Nomeação
Java e Interface de Diretório); RMI - Remote Method Invocation (Invocação do Método Remoto);
JMS - Java Message Service (Serviço de Mensagens Java); JTS - Java Topology Suite (Suíte de
Topologia Java); JDBC - Java Database Connectivity (Conexão de Banco de Dados Java). Após
desvendar as siglas, podemos marcar nosso gabarito a alternativa A: acesso ao servidor de nomes
e diretórios: JNDI.
Gabarito: Letra A
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.
III. JBoss é programado em Java, portanto, pode ser usado em qualquer sistema operacional
que suporte essa linguagem de programação.
a) somente I;
b) somente II;
c) somente III;
d) somente I e II;
e) I, II e III.
Comentários:
Vamos analisar cada alternativa: I. GlassFish e Apache Geronimo são servidores de aplicação open
source compatível com a especificação J2EE. O GlassFish é um servidor de aplicação open source
liderado pela Sun Microsystems para a plataforma Java EE. Sua versão proprietária é chamada
Sun GlassFish Enterprise Server. Já o Apache Geronimo é um conjunto de projetos de software
livre que se concentra em fornecer bibliotecas JavaEE/JakartaEE e implementações de Microperfil.
No entanto, estamos entregando ativamente componentes Java EE reutilizáveis. Eles são
amplamente utilizados e ainda mantidos ativamente. Portanto, ambos são open source e
compatível com a especificação J2EE. O item I está correto! Vamos para o item II. O Apache
Tomcat não dispõe de um container EJB. De fato, o Apache Tomcat não dispõe de um container
EJB. EJB é um dos principais componentes da plataforma Java EE. Eles são executados em um
container EJB no lado do servidor. A principal característica do EJB é a rapidez em desenvolver
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 124
www.estrategiaconcursos.com.br 272
soluções, pois, ele fornece um conjunto de componentes prontos, o que torna o desenvolvimento
eficiente. Vocês viram a importância do EJB, certo? Em função disso, o TomEE incorpora as
tecnologias EJB, CDI e as outras features do Java EE dentro do Tomcat, ou seja, atualmente a
assertiva estaria errada. Porem foi considerada correta. Item II certo! Por fim, vejamos o item III.
JBoss é programado em Java, portanto, pode ser usado em qualquer sistema operacional que
suporte essa linguagem de programação. Item correto, galera! Vejamos: JBoss é um servidor de
aplicação de código fonte aberto baseado na plataforma JEE e implementado completamente na
linguagem de programação Java. Em virtude disso, ele pode ser usado em qualquer Sistema
Operacional que suporte a referida linguagem
Gabarito: Letra E
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.
a) abstract;
b) static;
c) public;
d) protected;
e) final.
Comentários:
Como já dissemos em questões anteriores, 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, para
classe A poder ser invocado independentemente da criação prévia de uma instância de A o método
deve receber o modificador static.
Gabarito: Letra B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 125
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 126
www.estrategiaconcursos.com.br 272
Gabarito: Letra E
17. (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(?,?,?,?,?,?,?)
Comentários:
Pessoal, essa questão é um pouco mais avançada pois trata do do tipo PreparedStatement e conn.
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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 127
www.estrategiaconcursos.com.br 272
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
18. (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 é
Comentários:
O método parseDouble() da classe Java Double é um método embutido em Java que retorna um
novo double inicializado com o valor representado pela String especificada, como feito pelo
método valueOf da classe Double. A sintaxe é: public static double parseDouble(String s).
Parâmetros: Aceita um único parâmetro obrigatório que especifica a string a ser analisada. Tipo
de retorno: Retorna um valor double representado pelo argumento string. A questão, entre
parênteses, usaremos request.getParameter("renda"), de forma a pegar o valor recebido no
método post. A resposta da questão é a letra D: double renda =
Double.parseDouble(request.getParameter("renda"))
Gabarito: Letra D
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 128
www.estrategiaconcursos.com.br 272
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.
Comentários:
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
20. (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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 129
www.estrategiaconcursos.com.br 272
Comentários:
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
21. (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.
Para que a ordenação por inserção ocorra corretamente, as lacunas I e II devem ser
corretamente preenchidas com
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 130
www.estrategiaconcursos.com.br 272
Comentários:
Pessoal, essa é uma questão de lógica. A resposta correta é a letra c)i=j-1; i >=0 && v[i]>x; − −i e
v[i+1]=x. No caso, existe uma comparação de valores um a um dado a condição "i >=0 && v[i]>x" e
o decremento de "i".Durante o loop, o programa percorre o vetor comparando o valor contido em
x (v[j]) com o valor da próxima posição do vetor, realizando as trocas entre os elementos do vetor.
Gabarito: Letra C
22. (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);
Comentários:
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
23. (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;}
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 131
www.estrategiaconcursos.com.br 272
public Calcula( ) { }
}
A instrução que NÃO é permitida nessa classe é
Comentários:
Gabarito: Letra A.
24. (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]);
Comentários:
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
25. (FCC – AFAP – 2019) Considere a classe Java a seguir em condições ideais.
import java.sql.*;
public class ClienteDados {
public int conectar(){
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 132
www.estrategiaconcursos.com.br 272
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
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.
Comentários:
Para realizar um tratamento de exceção da forma que é solicitado, ou seja, não no interior do
método, mas sim por quem o chamar, podemos usar o throws na assinatura do método com a
exceção. O correto é utilizar a sintaxe: tipo_retorno nome_metodo() throws tipo_exceção_1, ...,
tipo_exceção_n. Assim, é possível utilizar a alternativa B: throws ClassNotFoundException,
SQLException. Por que devemos usar o ClassNotFoundException? Porque há na classe um
Class.forName que é um dos métodos básicos em que essa exceção pode ocorrer. As outras são:
findSystemClass da classe ClassLoader e loadClass também da classe ClassLoader. Ademais,
devemos usar o SQLException porque há uma conexão ao banco de dados na classe.
Gabarito: Letra B
26. (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";
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 133
www.estrategiaconcursos.com.br 272
Comentários:
Pessoal, a palavra-chave da herança é extends! A palavra-chave extends faz com que uma
subclasse herde (receba) todos os atributos e métodos declarados na classe-pai.
Gabarito: Letra B
27. (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
Comentários:
Pessoal, aqui vamos analisar cada alternativa! A alternativa ‘a’ diz que os métodos não podem ter
os modificadores protected ou private, o que está completamente correto! Vimos em aula que em
geral, as interfaces são compostas basicamente de um conjunto de assinaturas de métodos
públicos e abstratos. Ou seja, os métodos das interfaces são públicos! B: Não há nenhuma
restrição relacionado a assinatura de métodos com tipo de retorno void! Errada letra B! A restrição
da letra C também está incorreta! Não há nenhuma restrição relacionada a quantidade de
métodos, sequer métodos com o mesmo nome! Se houver, estaremos diante de um caso de
sobrecarrega, ou polimorfismo estático. Por fim, a letra E também está errada! Pode sim haver
método sem a implementação na subclasse.Não existe obrigação de implementação de uma
interface
Gabarito: Letra A.
28. (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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 134
www.estrategiaconcursos.com.br 272
Comentários:
Em Java, uma interface pode estender múltiplas interfaces, assim como uma classe pode
implementar múltiplas interfaces. Além disso, uma classe pode estender apenas uma classe.
Sabendo disso, nosso gabarito é a Letra a) herdar de mais de uma interface.
Gabarito: Letra A
29. (FCC – TRE-RN – 2011) Em relação ao Java Standard Edition, é INCORRETO afirmar:
Comentários:
O acesso a arrays e strings, e a conversão de tipos são checados em tempo de execução para
assegurar a sua validade. O Garbage Collector faz a desalocação automática de memória
evitando, erros de referência e desperdício de memória. Finalmente, o recurso de Exception
Handling permite o tratamento de erros em tempo de execução, por um mecanismo robusto,
análogo ao do C++. (a) Conforme vimos em aula, ele contém um Garbage Collector para
gerenciamento de memória; 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. (b) Conforme vimos em aula, esse é o Java ME (Java
Micro Edition); A Plataforma Java oferece recursos para construção de interfaces gráficas de
usuário (GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o Swing é um
conjunto sofisticado de classes e interfaces que definem os componentes visuais necessários para
construir uma interface gráfica de usuário. (c) Conforme vimos em aula, ele permite
desenvolvimento de aplicações desktop e de interfaces gráficos (Swing e AWT); Vocês sabiam
que Java é uma Linguagem WORA? Pois é, esse acrônimo significa Write Once, Run Anywhere ou
Escreva uma vez, execute em qualquer lugar. Trata-se de um slogan para exemplificar os
benefícios multiplataforma da linguagem Java! Idealmente, isso significa que um programa em
Java (uma vez compilado em um bytecode) pode rodar em qualquer equipamento que possua uma
JVM! (d) Conforme vimos em aula, é uma linguagem WORA (Write Once, Run Anywhere); Dessa
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 135
www.estrategiaconcursos.com.br 272
forma, aplicações funcionam da mesma maneira em qualquer ambiente. Podemos dizer que Java
é uma linguagem concorrente ou multithreaded, i.e., pode realizar diversas tarefas
assincronamente com o uso de threads, que são suportadas de modo nativo. Java torna a
manipulação de threads tão simples quanto trabalhar com qualquer variável. (e) Conforme vimos
em aula, é uma linguagem orientada a objetos e possui suporte nativo a threads.
Gabarito: Letra B
30. (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:
Comentários:
31. (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.
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 136
www.estrategiaconcursos.com.br 272
Gabarito: Letra D
32. (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:
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 137
www.estrategiaconcursos.com.br 272
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;
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 138
www.estrategiaconcursos.com.br 272
}
}
A linha
String nome = request.getParameter(“nome”);
Comentários:
Pessoal, conforme descrito no tópico “Métodos”, há diferenças entre esses métodos, um deles é
o retorno: getParameter retorna uma String representando o valor único do parâmetro. Já, o
getAttribute retorna um Object contendo o valor do atributo, ou null se o atributo não existir.
Portanto, há perda de funcionalidade no código tornando errada a assertiva.
Gabarito: Errada
34. (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.
Comentários:
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
35. (CESPE - DP DF– 2022) Quando a mensageria é utilizada com linguagem Java, as requisições
são processadas exclusivamente de forma síncrona.
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 139
www.estrategiaconcursos.com.br 272
Gabarito: Errado
36. (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).
Comentários:
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
37. (CESPE – PGDDF – 2021) Julgue o item subsecutivo, a respeito de lógica e de estrutura de
programação.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 140
www.estrategiaconcursos.com.br 272
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);
Comentários:
Pessoal, o código consiste em comparar dois valores, 120 e 130 (avaliar (120,30)). Vocês devem
observar que os valores de a e b são respectivamente 120 e 30. Daí, no início da função, avaliar ma
recebe o valor de a (120), e passa pelo primeiro se (se (ma < b) então ma <- b) e não entra, já que
ma (120) é maior que b (30). Já, o segundo “se – então” é executado, veja: se (me > b) então me <-
b; me é maior que b porque me = 120 e b = 30. Com o resultado verdadeiro do se, me recebe o valor
30 – que era o valor de b (no código me=b). Após isso, a variável resultado recebe o resto da divisão
de ma por me que é igual a 0. Como resultado é igual a zero, entra no próximo se ( se (resultado =
0)), daí retorna o valor de me que é 30. Portanto, o resultado do pseudocódigo será 30, e não 120
conforme diz a questão.
Gabarito: Errado
38. (CESPE – TJ-RJ – 2021) Considere o trecho de código a seguir, de um programa escrito na
linguagem Java.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 141
www.estrategiaconcursos.com.br 272
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.
Comentários:
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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 142
www.estrategiaconcursos.com.br 272
39. (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.
Comentários:
Pessoal, na verdade, é possível uma mesma máquina física, porém com processos Java separados
e sendo executados em portas separadas. Veja: uma instância do Tomcat é o componente de mais
alto nível na hierarquia do contêiner Tomcat. Apenas uma única instância do Tomcat pode existir
em uma única JVM. Essa abordagem faz que todas as outras aplicações Java que estejam sendo
executadas em uma mesma máquina física em um servidor Tomcat, seguras, caso o Tomcat ou a
JVM travem. Podem-se ter múltiplas instâncias em uma mesma máquina física, porém com
processos Java separados e sendo executados em portas separadas.
Gabarito: Errado
40. (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.
Comentários:
Gabarito: Errado
41. (CESPE – Ministério da Economia – 2020) Uma expressão lambda é usada principalmente
para definir a implementação procedural de uma interface associativa.
Comentários:
Uma expressão lambda é usada principalmente para definir a implementação procedural de uma
interface funcional.
Gabarito: Errado
42. (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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 143
www.estrategiaconcursos.com.br 272
Comentários:
Gabarito: Letra A
43. (CESPE – MPE-CE – 2020) Com base na linguagem de programação Java, julgue o item a
seguir.
O código
System.out.println(num[i][j]);
}
}
}
}
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 144
www.estrategiaconcursos.com.br 272
3
5
7
9
Comentários:
Na verdade, a sequência que será apresentada é: 3, 5, 9, 7. Portanto a questão está errada, pois a
matriz não fará a ordenação dos dados, mas apenas imprimir, primeiro preenchendo as linhas e
em seguida preenchendo as colunas.
Gabarito: Errado
44.(CESPE – MPE-CE – 2020) Com base na linguagem de programação Java, julgue o item a
seguir.
O código
O resultado é: 8
Comentários:
Vejamos o funcionamento da função: ela executa até o valor de num ser menor que 1, ou seja, até
que o valor de num seja 0. Para o início da execução temos os valores iniciais de 17 para num e 0
para resultado. O primeiro passo a se fazer é entrar no if, da linha 3, e fazer a comparação: 17 < 1,
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 145
www.estrategiaconcursos.com.br 272
dezessete é menor que um? A resposta é não, assim ele ignora a instrução de retorno que está na
linha 4 e parta para a operação matemática da linha 5. resultado = resultado + (num % 10), a
variável resultado está recebendo a soma dela mesma com o resto da divisão de num por 10, em
números temos: 0 = 0 + (17 % 10) -> o resto da divisão de 17 por 10 é 7, assim temos: resultado = 0
+ 7. Neste momento o valor da variável resultado é 7. E entramos na instrução de retorno da linha
6, em que retorna a própria função com o valor da variável num dividido por 10 e o valor da variável
resultado. Assim temos: 17 / 10 = 1,7, mas como a função retorna apenas a parte inteira, então aqui
esta divisão assume valor 1. Então a instrução de retorno da linha 6 tem como valores num = 1 e
resultado = 7. E o processo se repete novamente e voltamos ao if da linha 3. Ele vai repetir esses
passos até que chegue a comparação 0,1 < 1, zero vírgula um é menor que 1? A resposta é sim,
então agora ele entra na instrução de retorno da linha 4, neste caso ele imprime a variável
resultado que possui valor 8. Então, quando chama a função na linha 9 ela imprime a variável
resultado como 8. Dessa forma, o nosso gabarito está correto.
Gabarito: Correto
Assinale a opção que apresenta corretamente a saída gerada pelo código Java precedente.
a) 36
b) 1 2 3 4 5 6
c) 1 2 3 4 5
d) 0 1 2 3 4 5
e) 0 1 2 3 4 5 6
Comentários:
Pessoal, a função compara i a num. E irá parar quando i for menor que 36. Aparentemente, i é
incrementado em 1, porém dentro do if, i = i*i. Podemos visualizar o foco da questão nessa
condição. Assim, i vale respectivamente 0,1,4,9,16,25,36 a cada iteração. Portanto sendo
executado 7 vezes. E imprimindo respectivamente os valores 0 1 2 3 4 5.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 146
www.estrategiaconcursos.com.br 272
Gabarito: Letra D
46.(CESPE – STM – 2018) Os membros de uma classe definidos como PUBLIC não podem ser
acessados ou usados por nenhuma outra classe.
Comentários:
Vamos relembrar todos os modificadores? Default (modificador): A classe e/ou seus membros são
acessíveis somente por classes do mesmo pacote, na sua declaração não é definido nenhum tipo
de modificador, sendo este identificado pelo compilador. Public: Marca a visibilidade de uma
classe, método ou variável de instância para que todas as classes em todos os pacotes tenham
acesso. Package: Informa em que estrutura de diretórios a classe está localizada. Private: Marca a
visibilidade de um método ou variável de instância para que apenas a própria classe acesse.
Membros da classe definidos como private não podem ser acessados ou usados por nenhuma
outra classe. Esse modificador não se aplica às classes, somente para seus métodos e atributos.
Esses atributos e métodos também não podem ser visualizados pelas classes herdadas. Protected:
Marca a visibilidade de um método ou variável de instância para que apenas a própria classe ou
suas filhas acessem. O modificador protected torna o membro acessível às classes do mesmo
pacote ou através de herança, seus membros herdados não são acessíveis a outras classes fora do
pacote em que foram declarados. Portanto, Public: Marca a visibilidade de uma classe, método ou
variável de instância para que todas as classes em todos os pacotes tenham acesso e a questão
está incorreta!
Gabarito: Errado
47. (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.
Comentários:
A plataforma Java, Micro Edition (Java ME) fornece um ambiente robusto e flexível para
aplicativos executados em dispositivos embarcados e móveis na Internet das Coisas:
microcontroladores, sensores, gateways, telefones celulares, assistentes digitais pessoais (PDAs),
aparelhos de TV top boxes, impressoras e muito mais. O Java ME inclui interfaces de usuário
flexíveis, segurança robusta, protocolos de rede integrados e suporte para aplicativos em rede e
offline que podem ser baixados dinamicamente. Os aplicativos baseados em Java ME são portáteis
em muitos dispositivos, mas aproveitam os recursos nativos de cada dispositivo. Essa é a definição
exata do site da Oracle! Perfeita questão.
Gabarito: Correto
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 147
www.estrategiaconcursos.com.br 272
a) sobrecarga.
b) overloading.
c) portabilidade.
d) abstração.
e) sobrescrita.
Comentários:
Gabarito: Letra E
49.(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.
Comentários:
Pessoal, erradíssimo! Lambda foi incluída no Java 8! Um lambda permite que um trecho de código
seja passado como parâmetro para uma função ou ser armazenado em uma variável para ser
invocado posteriormente
Gabarito: Errado
50. (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.
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 148
www.estrategiaconcursos.com.br 272
Gabarito: Errado
51. (CESPE – TRE-PI – 2016) A linguagem Java foi, originalmente, desenvolvida para
Comentários:
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
52. (CESPE – TER-GO – 2015) Em um grupo do tipo Array, podem-se armazenar dados de
diferentes tipos.
Comentários:
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
53. (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.
Comentários:
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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 149
www.estrategiaconcursos.com.br 272
Gabarito: Correto
54. (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.
Comentários:
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
55. (CESPE – MPOG – 2013) O JME foi criado para trabalhar com ambientes de programação
multiprocessados em ambientes distribuídos.
Comentários:
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
56. (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.
Comentários:
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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 150
www.estrategiaconcursos.com.br 272
processamento. Conforme vimos em aula, está quase tudo certo! No entanto, JCE é uma API de
Criptografia (Java Cryptography Extension). Não se trata de uma plataforma ou ambiente de
desenvolvimento em nuvem!
Gabarito: Errado
57. (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().
Comentários:
Gabarito: Errado
58. (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.
Comentários:
Como o valor apresentado (5.000) é menor que 10.000, a assertiva está correta!
Gabarito: Correto
59. (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.
Comentários:
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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 151
www.estrategiaconcursos.com.br 272
Comentários:
Questão, ao generalizar, erra porque finally não está relacionada com o sucesso do bloco try-
catch-finally. A instrução finally permite que você execute código, depois do try...catch,
independentemente do resultado.
Gabarito: Errado
61. (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.
Comentários:
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
62. (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.
Comentários:
Gabarito: Letra A
63. (CESPE – SERPRO – 2008) A linguagem Java, orientada a objetos, tem como característica ser
compilada em um código executado em máquina virtual.
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 152
www.estrategiaconcursos.com.br 272
Gabarito: Correto
64.(CESPE – TRT - 5ª Região – 2008) A instrução import Java.awt.* indica que o programa irá
utilizar componentes gráficos.
Comentários:
Essa questão é polêmica! Alguns afirmar que é possível inserir a instrução, mas não utilizar
componentes gráficos. Não faria sentido importar um pacote para não utilizar suas
funcionalidades, mas é possível – apesar de má prática! Eu acredito que a questão cabe recurso,
sim!
Gabarito: Correto
65. (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.
Comentários:
Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses elementos. Vamos
vê-los agora em mais detalhes:<public>: 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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 153
www.estrategiaconcursos.com.br 272
66. (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.
Comentários:
Gabarito: Letra A
67. (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?
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 154
www.estrategiaconcursos.com.br 272
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
a) polimorfismo de sobrecarga.
b) polimorfismo de instanciação.
c) polimorfismo de abstração.
d) polimorfismo de classificação.
Comentários:
Questão que todo mundo que estudou a aula gostaria que caísse em sua prova: resposta letra a)
polimorfismo de sobrecarga. Todas as demais são invenções.
Gabarito: Letra A
69. (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.
Comentários:
Pessoal, a questão cobra conceitos sobre classes e interfaces. Em Java, uma interface pode
estender múltiplas interfaces, assim como uma classe pode implementar múltiplas interfaces.
Além disso, uma classe pode estender apenas uma classe. Temos que nos atentar ao fato que Luta
e Jogo são classes e Esporte Individual e Coletivo são interfaces. Sabendo que classes
implementam interfaces e classes podem estender classes. Dessa forma, podemos entender que
o gabarito é a letra b, porque a interface Futebol pode estender de esporte e de Coletivo (uma
interface pode estender múltiplas interfaces) que são interfaces.
Gabarito: Letra B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 155
www.estrategiaconcursos.com.br 272
Comentários:
(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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 156
www.estrategiaconcursos.com.br 272
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 }
2. (FGV – TJDFT – 2022) Observe as classes abaixo descritas na linguagem de programação Java.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 157
www.estrategiaconcursos.com.br 272
{
private String docNumero;
private int classificacao;
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; }
}
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 158
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 159
www.estrategiaconcursos.com.br 272
a) I e II;
b) II e III;
c) III e IV;
d) I, II e III;
e) I, III e IV.
a) um erro de compilação.
b) um erro de execução.
c) a linha “Sim”.
d) a linha “Não”.
e) a linha “Talvez”.
7. (FGV – MPE-AL – 2018) Sobre as variáveis e os métodos declarados como private, em Java,
analise as afirmativas a seguir.
a) I, apenas.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 160
www.estrategiaconcursos.com.br 272
b) II, apenas.
c) III, apenas.
d) I e II, apenas.
e) II e III, apenas.
Assinale o código que exibe corretamente um elemento de cada linha desse array.
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
11. (FGV – ALE-RO – 2018) Sobre construtores (constructors), no contexto da linguagem Java,
analise as afirmativas a seguir.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 161
www.estrategiaconcursos.com.br 272
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.
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.
III. JBoss é programado em Java, portanto, pode ser usado em qualquer sistema operacional
que suporte essa linguagem de programação.
a) somente I;
b) somente II;
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 162
www.estrategiaconcursos.com.br 272
c) somente III;
d) somente I e II;
e) I, II e III.
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.
a) abstract;
b) static;
c) public;
d) protected;
e) final.
Comentários:
Como já dissemos em questões anteriores, 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, para
classe A poder ser invocado independentemente da criação prévia de uma instância de A o método
deve receber o modificador static.
Gabarito: Letra B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 163
www.estrategiaconcursos.com.br 272
17. (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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 164
www.estrategiaconcursos.com.br 272
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(?,?,?,?,?,?,?)
18. (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 é
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 165
www.estrategiaconcursos.com.br 272
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.
20. (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
21. (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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 166
www.estrategiaconcursos.com.br 272
Para que a ordenação por inserção ocorra corretamente, as lacunas I e II devem ser
corretamente preenchidas com
22. (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);
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 167
www.estrategiaconcursos.com.br 272
23. (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 é
24. (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]);
25. (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;
}
}
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 168
www.estrategiaconcursos.com.br 272
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
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.
26. (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");
27. (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
28. (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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 169
www.estrategiaconcursos.com.br 272
29. (FCC – TRE-RN – 2011) Em relação ao Java Standard Edition, é INCORRETO afirmar:
30. (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:
31. (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.
32. (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:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 170
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 171
www.estrategiaconcursos.com.br 272
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;
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 172
www.estrategiaconcursos.com.br 272
}
}
A linha
String nome = request.getParameter(“nome”);
34. (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.
35. (CESPE - DP DF– 2022) Quando a mensageria é utilizada com linguagem Java, as requisições
são processadas exclusivamente de forma síncrona.
36. (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).
37. (CESPE – PGDDF – 2021) Julgue o item subsecutivo, a respeito de lógica e de estrutura de
programação.
função avaliar( a, b )
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 173
www.estrategiaconcursos.com.br 272
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);
38. (CESPE – TJ-RJ – 2021) Considere o trecho de código a seguir, de um programa escrito na
linguagem Java.
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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 174
www.estrategiaconcursos.com.br 272
39. (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.
40. (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.
41. (CESPE – Ministério da Economia – 2020) Uma expressão lambda é usada principalmente
para definir a implementação procedural de uma interface associativa.
Comentários:
42. (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).
43. (CESPE – MPE-CE – 2020) Com base na linguagem de programação Java, julgue o item a
seguir.
O código
System.out.println(num[i][j]);
}
}
}
}
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 175
www.estrategiaconcursos.com.br 272
3
5
7
9
44.(CESPE – MPE-CE – 2020) Com base na linguagem de programação Java, julgue o item a
seguir.
O código
O resultado é: 8
Assinale a opção que apresenta corretamente a saída gerada pelo código Java precedente.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 176
www.estrategiaconcursos.com.br 272
a) 36
b) 1 2 3 4 5 6
c) 1 2 3 4 5
d) 0 1 2 3 4 5
e) 0 1 2 3 4 5 6
46.(CESPE – STM – 2018) Os membros de uma classe definidos como PUBLIC não podem ser
acessados ou usados por nenhuma outra classe.
47. (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) sobrecarga.
b) overloading.
c) portabilidade.
d) abstração.
e) sobrescrita.
49.(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.
50. (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.
51. (CESPE – TRE-PI – 2016) A linguagem Java foi, originalmente, desenvolvida para
52. (CESPE – TER-GO – 2015) Em um grupo do tipo Array, podem-se armazenar dados de
diferentes tipos.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 177
www.estrategiaconcursos.com.br 272
53. (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.
54. (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.
55. (CESPE – MPOG – 2013) O JME foi criado para trabalhar com ambientes de programação
multiprocessados em ambientes distribuídos.
56. (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.
57. (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().
Comentários:
58. (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.
59. (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.
61. (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.
62. (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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 178
www.estrategiaconcursos.com.br 272
b) try e finally.
c) finally e catch.
d) finally e retry.
e) try e retry.
63. (CESPE – SERPRO – 2008) A linguagem Java, orientada a objetos, tem como característica ser
compilada em um código executado em máquina virtual.
64.(CESPE – TRT - 5ª Região – 2008) A instrução import Java.awt.* indica que o programa irá
utilizar componentes gráficos.
65. (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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 179
www.estrategiaconcursos.com.br 272
66. (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.
67. (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) polimorfismo de sobrecarga.
b) polimorfismo de instanciação.
c) polimorfismo de abstração.
d) polimorfismo de classificação.
69. (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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 180
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 181
www.estrategiaconcursos.com.br 272
GABARITO
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 182
www.estrategiaconcursos.com.br 272
Comentários:
O acesso a arrays e strings, e a conversão de tipos são checados em tempo de execução
para assegurar a sua validade. O Garbage Collector faz a desalocação automática de
memória evitando, erros de referência e desperdício de memória. Finalmente, o recurso
de Exception Handling permite o tratamento de erros em tempo de execução, por um
mecanismo robusto, análogo ao do C++.
Conforme vimos em aula, essa é a função precípua do Garbage Collector! Gabarito: C
Comentários:
Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa Write
Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-se de um
slogan para exemplificar os benefícios multiplataforma da linguagem Java! Idealmente,
isso significa que um programa em Java (uma vez compilado em um bytecode) pode rodar
em qualquer equipamento que possua uma JVM!
Conforme vimos em aula, seria mais correto dizer Java Virtual Machine (JVM) e, não,
Sistema Java. No entanto, a questão está correta. Gabarito: C
Comentários:
Portanto, é o seguinte: se você deseja somente executar alguma aplicação Java no seu
computador ou navegador, basta instalar um JRE! No entanto, se você planeja programar
em Java, você precisará de um JDK (que contém a JRE)! Entenderam? É bastante simples!
JRE é o mínimo que você precisa para rodar uma aplicação e o JDK é o que você precisa
para desenvolver uma aplicação!
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 183
www.estrategiaconcursos.com.br 272
Conforme vimos em aula, ela possui tudo que é necessário para executar programas em
Java. Para desenvolver programas, seria necessária uma JDK! Gabarito: E
Comentários:
Conforme vimos em aula, está perfeito! Por que ele diz “independentemente de o controle
ser explicitamente indicado”? Porque quando não se indica o modificador de acesso,
assume-se que é Pacote ou Default. Gabarito: C
Comentários:
Palavras Descrição
Conforme vimos em aula, ele também pode ser utilizado para testar se um objeto é
instância de uma classe específica. Gabarito: E
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 184
www.estrategiaconcursos.com.br 272
//Indica que esse método só pode acessar atributos de classe e não pode ser sobrescrito
static int soma (int a, int b) {//...//}
//Indica que esse método só é executável por uma thread por vez
synchronized soma (int a, int b) {//...//}
Não, métodos finais, estáticos e privados não podem ser sobrescritos por métodos de
outra classe. Gabarito: E
Comentários:
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).
Perfeito, desde que haja uma Java Virtual Machine (JVM) específica para esse Sistema
Operacional. Portanto, a questão está incompleta, mas não é bom brigar com a banca.
Gabarito: C
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 185
www.estrategiaconcursos.com.br 272
Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e executado
por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega
e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que
eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta
do bytecode e da Máquina Virtual Java.
Conforme vimos em aula, está perfeito! Para tal, utiliza-se o Java EE. Gabarito: C
Comentários:
A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário
(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o Swing é
um conjunto sofisticado de classes e interfaces que definem os componentes visuais
necessários para construir uma interface gráfica de usuário.
Conforme vimos em aula, a questão está correta! Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 186
www.estrategiaconcursos.com.br 272
Comentários:
A palavra Polimorfismo vem do grego: muitas formas. Trata-se da capacidade de um
objeto poder se comportar de diversas formas dependendo da mensagem recebida.
Observem que isso não quer dizer que o objeto fica transformando seu tipo a todo
momento. Na verdade, um objeto nasce com um tipo e morre com esse mesmo tipo. O que
muda, então? É a forma como nós nos referimos a esse objeto!
Conforme vimos em aula, dependendo do tipo de objeto (se é da Classe-Pai ou da Classe-
Filho), ações diferentes podem ocorrer. Gabarito: C
Comentários:
+ = > ! &
- += < && |
* -= >= || ^
/ *= <= <<
% /= != >>
%= == >>>
++ ?
-- instanceof
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 187
www.estrategiaconcursos.com.br 272
a) try e catch.
b) try e finally.
c) finally e catch.
d) finally e retry.
e) try e retry.
Comentários:
É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá após
os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer erro; o
catch tem o objetivo de capturar, manipula e trata erros; e o finally busca realizar ações
mesmo após a captura de erros. Vejamos a estrutura básica:
Conforme vimos em aula, utilizam-se Try e Catch! Gabarito: A
14. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação) Ao contrário dos tipos primitivos que não são objetos, os tipos de
objetos são determinados pela classe de origem.
Comentários:
Perfeito, perfeito, perfeito! Gabarito: C
15. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação) Uma classe final indica uma classe que não pode ser estendida. Um
método final não pode ser redefinido em classes derivadas.
Comentários:
//Indica que esse método não pode ser sobrescrito
final int soma (int a, int b) {//...//}
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 188
www.estrategiaconcursos.com.br 272
Comentários:
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, está perfeito! Qual o nome desse código? Bytecode! Gabarito:
C
Comentários:
Essa questão é polêmica! Alguns afirmar que é possível inserir a instrução, mas não
utilizar componentes gráficos. Não faria sentido importar um pacote para não utilizar
suas funcionalidades, mas é possível – apesar de má prática! Eu acredito que a questão
cabe recurso, sim! Gabarito: C
Comentários:
Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses elementos.
Vamos vê-los agora em mais detalhes:
<public>: 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: C
Comentários:
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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 189
www.estrategiaconcursos.com.br 272
20. (CESPE - 2013 - MPOG - Tecnologia da Informação) O JME foi criado para
trabalhar com ambientes de programação multiprocessados em ambientes
distribuídos.
Comentários:
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: E
Comentários:
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, está quase tudo certo! No entanto, JCE é uma API de Criptografia
(Java Cryptography Extension). Não se trata de uma plataforma ou ambiente de
desenvolvimento em nuvem! Gabarito: E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 190
www.estrategiaconcursos.com.br 272
Comentários:
Dessa forma, aplicações funcionam da mesma maneira em qualquer ambiente. Podemos
dizer que Java é uma linguagem concorrente ou multithreaded, i.e., pode realizar diversas
tarefas assincronamente com o uso de threads, que são suportadas de modo nativo. Java
torna a manipulação de threads tão simples quanto trabalhar com qualquer variável.
Conforme vimos em aula, Java dá suporte à programação concorrente. Observem que a
própria questão escreveu “a” sem crase. As bancas não ajudam :-( Gabarito: C
Comentários:
+ = > ! &
- += < && |
* -= >= || ^
/ *= <= <<
% /= != >>
%= == >>>
++ ?
-- instanceof
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 191
www.estrategiaconcursos.com.br 272
Conforme vimos em aula, int é uma variável primitiva que recebe valores inteiros, i.e., não
pode receber valor nulo. Já o tipo Integer é um objeto, logo pode receber valores nulos.
==1f6836==
Gabarito: C
25. (CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da
Informação) É possível indicar que parte de um código em um método pode
gerar uma exceção, por meio da utilização da palavra-chave finally.
Comentários:
É útil para liberar recursos do sistema quando utilizamos, por exemplo, conexões de
banco de dados e abertura de buffer para leitura ou escrita de arquivos. finally virá após
os blocos de catch. Portanto, o try indica que um bloco de código pode ocorrer erro; o
catch tem o objetivo de capturar, manipula e trata erros; e o finally busca realizar ações
mesmo após a captura de erros. Vejamos a estrutura básica:
Conforme vimos em aula, a questão trata do try e, não, do finally. Gabarito: E
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 192
www.estrategiaconcursos.com.br 272
27. (CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) O Java collections
framework da API Java J2SE possui um conjunto de interfaces e implementações
que define estruturas usadas para manipular coleções de objetos. As interfaces
fundamentais do framework estão associadas à identificação de
funcionalidades típicas de estruturas de dados clássicas. Assim, a interface
java.util.List está ligada a estruturas de listas, a interface java.util.Set está
associada a estruturas do tipo conjuntos e a interface java.util.Map refere-se a
estruturas do tipo mapas. Set, List e Map possuem a interface abstrata
java.util.Collection como superinterface.
Comentários:
Por fim, vamos falar sobre os Mapas (java.util.Map). Aqui já começamos diferente, porque
mapas não são coleções. Pensem comigo: muitas vezes queremos buscar rapidamente um
objeto, dada alguma informação sobre ele (Ex: dada a placa do carro, obter todos os
dados). Poderíamos utilizar uma lista e percorrer todos os elementos, mas isso é péssimo
para a performance – aqui entra o mapa!
Conforme vimos em aula, mapas não são coleções – não são filhos de java.util.Collection.
Gabarito: E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 193
www.estrategiaconcursos.com.br 272
Comentários:
Galera, não sei se algum de vocês já programou em C! Se sim, vocês se lembram de como
era complicado utilizar ponteiros, ponteiros para ponteiros, alocação dinâmica de
memória? Pois é, Java não exige que você faça nada disso! As coisas aqui são muito mais
simples e já existe bastante funcionalidade implementada e pronta para ser utilizada. As
principais classes implementadoras são: ArrayList, LinkedList, Vector.
Conforme vimos em aula, essas são – de fato – classes implementadoras de java.util.List.
Gabarito: C
Comentários:
Galera, não sei se algum de vocês já programou em C! Se sim, vocês se lembram de como
era complicado utilizar ponteiros, ponteiros para ponteiros, alocação dinâmica de
memória? Pois é, Java não exige que você faça nada disso! As coisas aqui são muito mais
simples e já existe bastante funcionalidade implementada e pronta para ser utilizada. As
principais classes implementadoras são: ArrayList, LinkedList, Vector.
Como os conjuntos não possuem ordem, as operações baseadas em índice que existem
nas listas não aparecem nos conjuntos. Set é a interface Java que define os métodos que
um conjunto deve implementar. As principais classes implementadoras são: HashSet,
TreeSet e LinkedHashSet. Cada implementação possui suas características sendo
apropriadas para contextos diferentes.
Em um dicionário eu associo um vocábulo a uma definição. A chave é um objeto utilizado
para recuperar um valor. O mapa costuma aparecer junto com outras coleções, para
poder realizar essas buscas. As principais classes implementadoras da interface Map são:
HashMap, TreeMap e LinkedHashMap. Cada implementação possui suas características
sendo apropriadas para contextos diferentes.
Conforme vimos em aula, a questão está perfeita! Gabarito: C
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 194
www.estrategiaconcursos.com.br 272
Galera, não sei se algum de vocês já programou em C! Se sim, vocês se lembram de como
era complicado utilizar ponteiros, ponteiros para ponteiros, alocação dinâmica de
memória? Pois é, Java não exige que você faça nada disso! As coisas aqui são muito mais
simples e já existe bastante funcionalidade implementada e pronta para ser utilizada. As
principais classes implementadoras são: ArrayList, LinkedList, Vector.
Conforme vimos em aula, ArrayList é uma classe implementadora da Interface List, que
por sua vez estende a interface java.util.Collection. ArrayList não implementa Collection
diretamente, no entanto a questão não disse se era diretamente ou não – na minha
opinião, essa questão deveria ser anulada por ambiguidade. Gabarito: E
Comentários:
A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário
(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o Swing é
um conjunto sofisticado de classes e interfaces que definem os componentes visuais
necessários para construir uma interface gráfica de usuário.
Conforme vimos em aula, trata-se de um pacote de classes para criar interfaces gráficas
de usuário em Java. Gabarito: C
Comentários:
A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário
(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o Swing é
um conjunto sofisticado de classes e interfaces que definem os componentes visuais
necessários para construir uma interface gráfica de usuário.
Conforme vimos em aula, trata-se de uma interface com o usuário, logo interage com o
usuário. Gabarito: E
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 195
www.estrategiaconcursos.com.br 272
Comentários:
O AWT (javax.awt) veio primeiro, é mais pesado, é gerado pelo sistema operacional, logo
é dependente de plataforma. O Swing (javax.swing) é mais leve, é gerado por uma
Máquina Virtual Java (JVM), logo é independente de plataforma. Galera, nem tudo é
diferente! Vejam: ambos são fáceis de programar, porque a orientação a objetos
proporciona alterar partes do programa, sem alterar toda a estrutura.
Conforme vimos em aula, AWT veio primeiro que o Swing! Esse último veio dar mais
dinamismo e leveza aos componentes – hoje em dia, pouco se usa de AWT! Gabarito: E
Comentários:
A redação ficou um pouco confusa, mas vejam que a questão fala em passar para campo.
Que campo? O saldo é um método e, não, um campo. Gabarito: E
36. (CESPE – 2014 – ANATEL - Analista de Sistemas) No JSE (Java Standard Edition)
versão 8, é possível utilizar recursos inerentes à programação funcional por
meio de uma nova característica da linguagem chamada expressões Lambda,
que permitem o tratamento de funções como argumentos de métodos.
Comentários:
Pessoal, vocês já devem saber que nós temos uma nova versão! A cobrança ainda é
raríssima (só encontrei uma questão), mas é bom saber um pouco sobre as principais
novidades. A grande novidade foram as Lambda Expressions! Pois é, Java agora tem
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 196
www.estrategiaconcursos.com.br 272
1 class abc {
2 String nome;
3 String cpf;
4 double salario;
5 int senha;
6}
7 class xyz extends abc {
8 int numerodeImoveis;
9}
Comentários:
(a) Errado. Essa classe sequer tem métodos, logo não há como haver sobrecarga; (b)
Errado, pelo mesmo motivo do comentário anterior; (c) Errado. Essa variável não é
privada – ela tem visibilidade padrão; (d) Correto. De fato, há uma especificação de
herança entre essas classes – basta ver a palavra-chave extends; (e) Errado, pode haver
novos atributos, sim. Gabarito: D
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 197
www.estrategiaconcursos.com.br 272
38. (CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java
Virtual Machine — JVM) é especificada para interpretar instruções expressas
em bytecodes e compiladas a partir de uma linguagem de programação do tipo
Java, mas não necessariamente Java.
Comentários:
Uma observação importante: Código Java é sempre compilado em um bytecode. No
entanto, nem todo bytecode é proveniente de Código Java. Como assim, professor? É isso
mesmo! Por exemplo: eu posso compilar o Código Ada em um bytecode e rodá-lo em uma
JVM! E quais outras linguagens? Temos também Eiffel, Pascal, Python, C.
Conforme vimos em aula, não é necessariamente de Java! Gabarito: C
Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e executado
por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega
e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que
eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta
do bytecode e da Máquina Virtual Java.
Conforme vimos em aula, não se trata de um tipo de linguagem, mas um programa!
Gabarito: E
40. (CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um
interpretador que atribui portabilidade à linguagem Java, possibilitando,
consequentemente, a sua execução em qualquer sistema operacional.
Comentários:
Por conta deles, programas escritos em Java podem funcionar em qualquer plataforma
de hardware e software que possua uma JVM, tornando assim essas aplicações
independentes da plataforma, como apresenta a imagem acima (Win32, UNIX e MacOS)!
Galera, qualquer plataforma... desde um computador a uma geladeira. A imagem abaixo é
similar à anterior, apenas para solidificar!
Conforme vimos em aula, está perfeito! Observem que a questão afirma que “possibilita
a sua execução em qualquer sistema operacional”. De fato, o Sistema Operacional deverá
ter uma JVM implementada para ele. No entanto, a questão afirma apenas que possibilita
(desde que haja essa JVM). De fato, possibilita! Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 198
www.estrategiaconcursos.com.br 272
Comentários:
Perfeito! A JVM realiza algumas verificações de segurança importantes, principalmente,
para o desenvolvimento de aplicações web. Gabarito: C
Comentários:
Perfeito! Observem que ele escreveu “Ola Mundo“ no Método Main e no Método Paint.
Então, não importa aonde seja executado (na aplicação ou na applet), essa mensagem será
exibida. Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 199
www.estrategiaconcursos.com.br 272
43. (CESPE - 2006 – ANCINE - Analista de Sistemas) Para que um sistema aplicativo
funcione nessa arquitetura, é necessário que os contêineres Web e EJB utilizem
máquinas com o mesmo sistema operacional, seja ele Windows ou Linux,
embora os contêineres Applet e de aplicação cliente possam ser heterogêneos
com relação ao sistema operacional.
Comentários:
Não, o Contêineres Web e Contêiner EJB põem ser heterogêneos quanto ao sistema
operacional também. Gabarito: E
Comentários:
Em 1995, a tecnologia Java e seu modelo de código móvel conhecido como applet foram
criados pela Sun Microsystems. Applets são pequenos programas Java que são instalados
em Contêineres Web e referenciados através de Páginas HTML em um navegador.
Quando um browser acessa esta página HTML que referencia o applet, ele
automaticamente também transfere o código do applet e o executa.
Perfeito, conforme visto em aula. Gabarito: C
Comentários:
Em 1995, a tecnologia Java e seu modelo de código móvel conhecido como applet foram
criados pela Sun Microsystems. Applets são pequenos programas Java que são instalados
em Contêineres Web e referenciados através de Páginas HTML em um navegador.
Quando um browser acessa esta página HTML que referencia o applet, ele
automaticamente também transfere o código do applet e o executa.
O primeiro código que uma applet executa é o código definido para sua inicialização, e
seu construtor, através do método init que executa a inicialização básica da applet –
geralmente usado para iniciar as variáveis globais, obter recursos de rede e configurar a
interface. O método init é chamado apenas uma vez, quando o código da applet é
carregado pela primeira vez, ao iniciar.
Perfeito, conforme visto em aula! Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 200
www.estrategiaconcursos.com.br 272
Comentários:
Perfeito! A JVM possui medidas de segurança para proteger o código de ataques (não usa
ponteiros, não permite que applets tenham acesso ao computador dos clientes). Ademais,
ela possui um verificador de bytecodes confirma se código não contém erros ou se não
violam restrições de segurança de Java. Gabarito: C
Comentários:
Perfeito. O HTML possui uma tag <applet> que permite inserir uma applet em um
documento HTML. No entanto, ele não é mais aceito no HTML 5 e não é suportado pelos
navegadores Chrome e Opera. Gabarito: C
Comentários:
Applets, ao contrário das Servlets, rodam no Cliente e são hoje as principais responsáveis
pela grande disseminação do conceito e das tecnologias de código móvel em geral. O uso
de código móvel na web, e em especial o modelo de applets Java, permite que,
adicionalmente ao uso de páginas HTML e imagens, os recursos transferidos entre
servidores e clientes web sejam programas de computador. Portanto, applets podem ser
executadas apenas do lado do cliente e, não, do servidor. Gabarito: E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 201
www.estrategiaconcursos.com.br 272
Comentários:
O acesso a arrays e strings, e a conversão de tipos são checados em tempo de execução
para assegurar a sua validade. O Garbage Collector faz a desalocação automática de
memória evitando, erros de referência e desperdício de memória. Finalmente, o recurso
de Exception Handling permite o tratamento de erros em tempo de execução, por um
mecanismo robusto, análogo ao do C++.
(a) Conforme vimos em aula, ele contém um Garbage Collector para gerenciamento de
memória;
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.
(b) Conforme vimos em aula, esse é o Java ME (Java Micro Edition);
A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário
(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o Swing é
um conjunto sofisticado de classes e interfaces que definem os componentes visuais
necessários para construir uma interface gráfica de usuário.
(c) Conforme vimos em aula, ele permite desenvolvimento de aplicações desktop e de
interfaces gráficos (Swing e AWT);
Vocês sabiam que Java é uma Linguagem WORA? Pois é, esse acrônimo significa Write
Once, Run Anywhere ou Escreva uma vez, execute em qualquer lugar. Trata-se de um
slogan para exemplificar os benefícios multiplataforma da linguagem Java! Idealmente,
isso significa que um programa em Java (uma vez compilado em um bytecode) pode rodar
em qualquer equipamento que possua uma JVM!
(d) Conforme vimos em aula, é uma linguagem WORA (Write Once, Run Anywhere);
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 202
www.estrategiaconcursos.com.br 272
Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e executado
por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega
e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que
eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta
do bytecode e da Máquina Virtual Java.
Conforme vimos em aula, trata-se da Java Virtual Machine (JVM)! Gabarito: A
3. (FCC - 2010 - Sergipe Gás S.A. - Analista de Sistemas) É 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.
Comentários:
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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 203
www.estrategiaconcursos.com.br 272
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: D
Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e executado
por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega
e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que
eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta
do bytecode e da Máquina Virtual Java.
Conforme vimos em aula, trata-se da Java Virtual Machine (JVM)! Gabarito: C
Comentários:
Palavras Descrição
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 204
www.estrategiaconcursos.com.br 272
Utilizado para aplicar o conceito de herança para uma classe, onde uma
Extends classe receberá os métodos e variáveis de instância da classe chamada
de pai.
Conforme vimos em aula, trata-se da palavra-reservada new – lembrando que type não é
um operador! Gabarito: C
Comentários:
/* 1) Operador NEW é responsável por criar um objeto;
* 2) NomeClasse() é o construtor da Classe NomeClasse;
* 3) NomeObjeto é uma variável do Tipo NomeClasse; */
Conforme vimos em aula, o operador new cria um novo objeto! Para tal, utiliza-se o
construtor da classe que se deseja criar uma instância: Nome_Classe( ). Por fim, ele atribui
esse novo objeto a uma variável Nome_Objeto pertencente a classe Nome_Classe.
Gabarito: B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 205
www.estrategiaconcursos.com.br 272
Comentários:
Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses elementos.
Vamos vê-los agora em mais detalhes:
<public>: 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.
Conforme vimos em aula, o public pode ser aplicado a atributos, métodos e classes.
Gabarito: B
Comentários:
Pessoal, esses Modificadores de Acesso determinam quão acessíveis são esses elementos.
Vamos vê-los agora em mais detalhes:
<protected>: essa instrução indica que métodos ou atributos (classes, não) assim
declaradas somente podem ser acessadas dentro do pacote em que está contida ou
por subclasses no mesmo pacote.
Apenas um desses é um Modificador de Acesso: protected. Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 206
www.estrategiaconcursos.com.br 272
short k = 54;
int m = 40;
long n = 12L;
long resultado = 0L;
resultado += j;
resultado += k;
resultado /= n;
resultado -= m;
Após a última operação, o resultado será igual a:
a) -7.
b) -32.
c) -33.
d) 60.
e) 84.
Comentários:
resultado = resultado + j = 0L + 30 = 30L; //Houve cast implícito
resultado = resultado + k = 30L + 54 = 84L; //Houve cast implícito
resultado = resultado/n = 84L/12L = 7L;
resultado = resultado – m = 7L – 40 = -33L //Houve cast implícito Gabarito: C
Comentários:
Palavras Descrição
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 207
www.estrategiaconcursos.com.br 272
Void
Comentários:
i = 3; 3%3 = 0;
i = 5; 5%3 = 2;
i = 7; 7%3 = 1;
i = 9; 9%3 = 0;
i = 11; 11%3 = 2;
i = 13; 13%3 = 1;
i = 15; 15%3 = 0;
i = 17; 17%3 = 2;
i = 19; 19%3 = 1;
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 208
www.estrategiaconcursos.com.br 272
Lembrando que o Operador % oferece o resto da divisão entre dois números. Gabarito:
E
}
}
Com base nos códigos apresentados e nos conceitos da orientação a objetos é
correto afirmar:
a) No método main da classe Start não é possível instanciar objetos das classes
NewClassA e NewClassB, pois essas classes não contêm um construtor válido.
b) Se for digitada a instrução NewClassB c = new NewClassA(); no método main da
classe Start será instanciado um objeto da NewClassA.
c) Se for digitada a instrução NewClassA b = new NewClassB(); no método main da
classe Start ocorrerá um erro, pois não é possível criar um objeto da NewClassA por
meio do construtor da NewClassB.
d) A existência de dois métodos de mesmo nome na NewClassA que recebem a mesma
quantidade de parâmetros indica que está ocorrendo uma sobrescrita de métodos.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 209
www.estrategiaconcursos.com.br 272
Comentários:
(a) Não, mesmo que não tenha um construtor explícito, o compilador cria um construtor
padrão no momento da criação do objeto; (b) Não, não se pode atribuir uma instância de
classe-pai a variável de uma classe-filha; (c) Não, não haveria erro! Pode-se atribuir uma
instância de classe filha a variável de uma classe-pai; (d) Não, isso é sobrecarga; (e)
Perfeito, ela herda tudo da classe-pai. Gabarito: E
Comentários:
Conforme vimos em aula, estamos indo do valor maior para o valor menor, portanto
precisamos fazer um cast explícito: byte codNovo = (byte) cod. Gabarito: D
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 210
www.estrategiaconcursos.com.br 272
return n1 + n2;
}
public static double soma(double n1, double n2, double n3) {
return n1 + n2 + n3;
}
}
a) Calculo c = new Calculo(); System.out.println (c.soma(10, 20, 30)); ou
System.out.println (Calculo.soma(10, 20));
b) Exclusivamente as instruções Calculo c = new Calculo(); System.out.println
(c.soma(10, 20));
c) Exclusivamente a instrução System.out.println (Calculo.soma(10, 20, 50));
d) Exclusivamente as instruções Calculo c = new Calculo(); double r = c.soma(10, 20);
System.out.println(r);
e) Calculo c = Calculo.soma(10,20,30); System.out.println (c); ou System.out.println
(Calculo.soma(10, 20));
Comentários:
Vamos lá! Observem que há dois métodos estáticos, i.e., não é necessário criar um objeto
dessa classe para ter acesso aos seus métodos. Logo, há duas possibilidades: pode-se
instanciar um objeto dessa classe (Calculo c = new Calculo();) e chamar o método pelo
objeto (c.soma()) ou fazer o mesmo sem utilizar o objeto (Calculo.soma()). Portanto, as
letras B, C, D funcionariam, mas não exclusivamente, porque pode-se acessar o método
pelo objeto ou pela classe. Gabarito: A
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 211
www.estrategiaconcursos.com.br 272
(a) Perfeito, ela pode criar seus próprios métodos; (b) Perfeito, porque eles são herdados;
(c) Perfeito, eles são herdados da superclasse; (d) Não, super é utilizado para acessar
métodos da superclasse; (e) Perfeito, esse operador indica que a superclasse será
estendida. Gabarito: D
Comentários:
Cada classe, na hierarquia de classes, representa uma camada que adiciona diversas
capacidades a um objeto. No topo desta hierarquia você sempre vai encontrar uma classe
chamada de Object (Objeto). Qualquer classe estende implicitamente (sem necessidade
de declarar) a classe Object. Claro que, na maioria das vezes, isso ocorre indiretamente.
(a) Não, ela permite métodos concretos; (b) Não, não tem chaves; (c) Não, todos os
métodos são abstratos; (d) Java não suporta herança múltipla; (e) Perfeito,
absolutamente todas as classes são filhas da Classe Object. Gabarito: E
17. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação) São tipos primitivos da linguagem Java:
a) int, string, long e real.
b) char, int, real e bit.
c) boolean, double, float e byte.
d) real, short, long e char.
e) string, long int, short int e float.
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 212
www.estrategiaconcursos.com.br 272
(a) string e real, não; (b) real e bit, não; (c) Perfeito! (d) real, não; (e) apenas float.
Gabarito: C
Comentários:
São oito tipos: byte, short, int, long, float, double, char e boolean. Gabarito: A
19. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação)
No âmbito da linguagem Java, considere:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 213
www.estrategiaconcursos.com.br 272
Comentários:
(I) Não, bytecode é o resultado da compilação do código-fonte; (II) Não, o código
intermediário é chamado bytecode; (III) Perfeito, é exatamente assim; (IV) Não, a
compilação ocorre apenas uma vez e a interpretação a cada vez que o programa é
executado. Gabarito: E
20. (FCC - 2008 - TCE-AL - Programador) Os três elementos básicos quando contidos
num arquivo fonte Java devem obrigatoriamente se apresentar na seguinte
ordem:
a) import, package e class.
b) class, package e import.
c) class, import e package.
d) package, class e import.
e) package, import e class.
Comentários:
A diferença entre as duas formas de importação de pacotes é o consumo de recursos do
computador. Como o asterisco importa todos os sub-pacotes, o consumo de memória será
alto e, muito provavelmente, não usaremos todas as classes de todos os pacotes
importados. Por isso, o recomendado é sempre importar apenas o pacote que será
utilizado. A ordem é Package, Import e Class.
Conforme vimos em aula, deve-se declarar o pacote; depois, import; por fim, classe.
Gabarito: E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 214
www.estrategiaconcursos.com.br 272
21. (FCC - 2014 – TRF/3 – Analista de Sistemas) Considere a classe escrita em Java:
Comentários:
Isso é um exemplo de polimorfismo! A questão é: qual método multi será utilizado? Ele
envia os valores 2.5 e 2! Ele pode entrar no primeiro método? Não, porque o valor-padrão
de número decimal no Java é Double, logo – para entrar no primeiro método – teria que
enviar o valor 2.5f, visto que é do tipo Float. Ele pode entrar no segundo método? Não,
visto que o valor 2.5 não pode ser inteiro! Ele pode entrar no terceiro método? Sim, visto
que o valor 2.5 é Double e o valor 2 é inteiro! Eu posso passar um valor inteiro a uma
variável do tipo Double? Sim, o que eu não posso fazer é o contrário. Logo, o valor
impresso será 2.5*2+3 = 8.0. Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 215
www.estrategiaconcursos.com.br 272
Comentários:
X = X*2 = 0*2 = 0;
Y = Y-5 = 0-5 = -5;
Z = Z/3 = 0/3 = 0;
Portanto, a resposta é 0, -5 e 0. Gabarito: A
23. (FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas) A função Java:
public boolean VerificarCPF (string CPF);
representa um exemplo do conceito de:
a) override.
b) overload.
c) herança.
d) encapsulamento.
e) polimorfismo.
Comentários:
Essa questão é estranha! Ele não especifica exatamente o que ele quer saber, mas vamos
lá: por eliminação! (a) Impossível inferir algo sobre isso; (b) Impossível inferir algo sobre
isso; (c) Impossível inferir algo sobre isso; (d) Bem, há um modificador de acesso,
portanto representa um exemplo do conceito de encapsulamento; (e) Impossível inferir
algo sobre isso. Gabarito: D
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 216
www.estrategiaconcursos.com.br 272
Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e executado
por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega
e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que
eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta
do bytecode e da Máquina Virtual Java.
Conforme vimos em aula, devemos codificar o programa em .java; esse arquivo é
compilado em um código intermediário (bytecode) em .class; depois é interpretado em
uma JVM; e, por fim, é executado. Gabarito: D
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 217
www.estrategiaconcursos.com.br 272
Comentários:
(I) Operador Ternário: 12 é menor que 18, portanto irá imprimir “Menor de Idade”; (II)
12 é menor que 18, portanto irá imprimir “Menor de Idade”; (III) 12 é menor que 18,
portanto irá imprimir “Menor de Idade”; (IV) Case não aceita <, >, <=, >=, etc. Gabarito:
B
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 218
www.estrategiaconcursos.com.br 272
r = r + cont = 0 + 1 = 1;
cont = cont + 4 = 1 + 4 = 5;
r = r + cont = 1 + 5 = 6;
cont = cont + 4 = 5 + 4 = 9; //Sai do loop
Comentários:
(I) Perfeito, é possível desenvolver aplicações desktop utilizando interface gráfica, como
Swing e AWT; (II) Perfeito, é uma linguagem WORA (Write Once, Run Anywhere); (III)
Não, não faz uso explícito de ponteiros; (IV) Perfeito, o Garbage Collector realiza o
gerenciamento de memória. Gabarito: B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 219
www.estrategiaconcursos.com.br 272
d) -9223372036854775808 a 9223372036854775807.
e) -2147483648 a 2147483647.
Comentários:
Comentários:
Um programa escrito para a plataforma Java necessita de um ambiente de execução
chamado Java Runtime Environment (JRE)! O que tem nesse negócio, professor? Ele
contém uma Máquina Virtual (JVM) e Bibiliotecas (APIs). E o Java Development Kit (JDK)?
Bem, eles contêm a JRE e outros componentes úteis para executar aplicações (Exemplo:
Javac, Javadoc, Jar, Appletviewer, Jconsole, Jstack, Jhat, etc).
Conforme vimos em aula, trata-se da Java Runtime Environment (JRE): ambiente mínimo
necessário para rodar aplicativos Java. Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 220
www.estrategiaconcursos.com.br 272
31. (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia da
Informação) Considere as classes a seguir, presentes em uma aplicação Java
orientada a objetos:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 221
www.estrategiaconcursos.com.br 272
Comentários:
Primeiro, vamos analisar o código! Saca só... temos três classes: Funcionário, Mensalista
e Diarista. Observe que as classes Mensalista e Diarista 'estendem' a classe Funcionário,
i.e., são filhas de Funcionário! Agora vamos analisar cada classe:
A classe Funcionário possui dois construtores: Funcionário( ) e Funcionário(int id, String
nome, double valorBase), além dos métodos getValorBase( ) e calcularSalario( ). Aí você
vai me dizer: professor, tem dois construtores? Sim, com mesmo nome e assinaturas
diferentes! Portanto, temos uma: Sobrecarga (Overloading) de Construtores. Bacana?
Já a classe Mensalista possui um construtor Mensalista(double descontos, int id, String
nome, double valorBase) e um método calcularSalario( ). Opa, perae... esse método é igual
ao método da classe Funcionário, concorda? Mesmo nome e mesma assinatura! Portanto,
temos uma Sobrescrita (ou Override) de métodos.
Por fim, a classe Diarista possui um construtor Diarista(int diasPorSemana, int id, String
nome, double valorBase) e um método calcularSalario( ). De novo, você vai dizer:
professor, esse método também é igual àquele da classe Funcionário e Mensalista. É
verdade, portanto temos uma Sobrescrita (ou Override) de métodos.
Agora vamos para o método main! Observe que ele cria uma variável f do tipo
Funcionário. Em seguida, ele cria um objeto Diarista e atribui à variável f. Professor, pode
isso? Sim, eu posso atribuir um objeto de uma classe-filha para uma variável do tipo da
classe-pai - eu não posso é fazer o contrário (pelo menos, sem um casting). Na linha
seguinte, ele diz: s = f.calcularSalario( ).
Chegamos ao ponto crucial! Ele chama o método calcularSalario( ), mas você lembra que
nós temos 3 métodos com esse nome? Temos um na classe-pai e dois nas classes-filhas,
sobrescrevendo o método da classe-pai. E qual desses ele está chamando? Lembra que na
linha anterior ele diz que f recebe o objeto da classe Diarista? Pois é, portanto, o método
calcularSalario( ) é aquele da classe Diarista. Mais abaixo, ele faz exatamente a mesma
coisa, mas atribui o objeto Mensalista() à variável f, portanto, na segunda vez que ele
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 222
www.estrategiaconcursos.com.br 272
chama esse método, refere-se ao objeto da classe Mensalista. Entendido? Agora vamos
para os itens:
(a) Encapsulamento? Não, não tem nenhum modificador de acesso aí;
(b) Sobrecarga de Métodos? Não! Lá em cima, há sobrecarga de construtores. Nessa linha,
há sobrescrita de métodos.
(c) Polimorfismo? Perfeito! Nós temos uma sobrescrita de métodos (que é um tipo de
Polimorfismo).
(d) Sobrescrita de Construtores? Não! Lá em cima, há sobrecarga de construtores. Nessa
linha, há sobrescrita de métodos.
(e) Métodos Abstratos? Não, não há nenhum método abstrato nessa questão.
Aí você vai me dizer: Professor, mas um construtor é um tipo de método! Logo, se há uma
sobrecarga de construtores, há uma sobrecarga de métodos! Sim, concordo contigo! No
entanto, temos que lembrar que é uma questão da FCC! Nesse caso, a terceira opção não
==1f6836==
apresenta problema algum! Já a segunda opção, pode-se dizer que não é exatamente
sobrecarga de métodos; é algo mais específico, é uma sobrecarga de construtores.
Percebe? Dessa forma, eu recomendo não brigar com a banca e marcar a opção que não
gera dúvidas. Agora... se for bastante técnico aqui, você está corretíssimo! A questão
possui duas respostas e deveria ser anulada. Gabarito: C
Comentários:
(a) Não, é estático, logo não depende de objetos; (b) Não, é justamente o inverso; (c)
Perfeito, não depende de objetos! (d) Na verdade, precisam sim ser instanciados
explicitamente; (e) Isso não define um método estático. Gabarito: C
33. (FCC - 2008 - TCE-AL - Programador) NÃO são nomes válidos em Java:
a) _Real e $real
b) um1 e dois2
c) 3tres e tres3
d) Codigo e codigo
e) cod_valor e cod$valor
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 223
www.estrategiaconcursos.com.br 272
Comentários:
Deve ser a combinação de uma ou mais letras e dígitos UNICODE-16: Letras: A-Z; Letras:
a-z; Underscore: _ ; Cifrão: $ ;Números: 0-9.
Comentários:
Java Standard Edition (Java SE): trata-se de uma ferramenta de desenvolvimento para
a Plataforma Java. Ela contém todo o ambiente necessário para a criação e execução
de aplicações Java, incluindo a Máquina Virtual (JVM), Compilador (Javac), Bibliotecas
(APIs), entre outras ferramentas. Em geral, rodam em computadores pessoais,
notebooks, etc.
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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 224
www.estrategiaconcursos.com.br 272
35. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação) Uma classe Java pode ser instanciada por um comando, cuja
sintaxe é:
Comentários:
/* 1) Operador NEW é responsável por criar um objeto;
* 2) NomeClasse() é o construtor da Classe NomeClasse;
* 3) NomeObjeto é uma variável do Tipo NomeClasse; */
Comentários:
try { //Não vem sozinho: try/catch, try/finally ou try/catch/finally
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 225
www.estrategiaconcursos.com.br 272
//Tratamento da exceção
} finally { //Não vem sozinho: try/finally ou try/catch/finally.
Comentários:
Como vimos em aula, o código-fonte .java é compilado. O produto da compilação são
arquivos .class que contém bytecodes que são interpretados pela Java Virtual Machine.
Gabarito: E
38. (FCC - 2014 - SABESP - Tecnólogo – Sistemas – II) O processo híbrido combina a
execução eficiente e a portabilidade de programas. A base é a existência de um
código intermediário, mais fácil de ser interpretado e não específico de uma
plataforma computacional. O método é dividido em duas etapas: compilação
para um código intermediário e interpretação desse código. Um exemplo é o
Java e a JVM.
Comentários:
O bytecode é um código intermediário, que é posteriormente interpretado e executado
por uma Java Virtual Machine (JVM). O que é isso, professor? É um programa que carrega
e executa os aplicativos Java, convertendo bytecodes em código executável. Lembram que
eu falei que Java é uma Linguagem WORA? Pois é, isso ocorre em grande parte por conta
do bytecode e da Máquina Virtual Java.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 226
www.estrategiaconcursos.com.br 272
39. (FCC – 2003 – TRF/5 - Analista de Sistemas) Um programa Java, que é executado
dentro de um browser Web, denomina-se:
a) API.
b) applet.
c) servlet.
d) acriptlet.
e) package.
Comentários:
Em 1995, a tecnologia Java e seu modelo de código móvel conhecido como applet foram
criados pela Sun Microsystems. Applets são pequenos programas Java que são instalados
em Contêineres Web e referenciados através de Páginas HTML em um navegador.
Quando um browser acessa esta página HTML que referencia o applet, ele
automaticamente também transfere o código do applet e o executa.
Trata-se, portanto, de uma Applet. Gabarito: B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 227
www.estrategiaconcursos.com.br 272
}
Qual das alternativas a seguir contém um modificador que ao ser usado na
declaração acima em substituição ao termo <mod> impedirá que a classe Xpto
seja estendida?
a) static
b) const
c) abstract
d) final
e) virtual
Comentários:
//Essa classe não pode ser estendida
final class Carro {...}
Conforme vimos em aula, trata-se do Final. Gabarito: D
Comentários:
(a) Não, 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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 228
www.estrategiaconcursos.com.br 272
comando não existe; (e) Não, esse comando entra no bloco e só depois avalia a condição.
Gabarito: B
Comentários:
Java Standard Edition (Java SE): trata-se de uma ferramenta de desenvolvimento para
a Plataforma Java. Ela contém todo o ambiente necessário para a criação e execução
de aplicações Java, incluindo a Máquina Virtual (JVM), Compilador (Javac), Bibliotecas
(APIs), entre outras ferramentas. Em geral, rodam em computadores pessoais,
notebooks, etc.
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.
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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 229
www.estrategiaconcursos.com.br 272
Comentários:
Java é tanto uma plataforma quanto uma linguagem de programação orientada a objetos
que permite o desenvolvimento de aplicações em diversas plataformas diferentes. Como
já foi dito anteriormente, Java está presente desde dispositivos pequenos (Smartphone,
Tablet, etc) a máquinas de grande porte (Servidores, Mainframes, etc). A linguagem Java
possui quatro ambientes de desenvolvimento:
(a) Conforme vimos em aula, é tanto uma linguagem quanto uma plataforma;
Java Standard Edition (Java SE): trata-se de uma ferramenta de desenvolvimento para
a Plataforma Java. Ela contém todo o ambiente necessário para a criação e execução
de aplicações Java, incluindo a Máquina Virtual (JVM), Compilador (Javac), Bibliotecas
(APIs), entre outras ferramentas. Em geral, rodam em computadores pessoais,
notebooks, etc.
(b) Conforme vimos em aula, é o nome antigo de Java SE;
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.
(c) Conforme vimos em aula, é exatamente isso;
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
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 230
www.estrategiaconcursos.com.br 272
Comentários:
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, a questão está perfeita! No entanto, há uma coisa muito errada
nessa questão! O que, professor? Não se separa sujeito do predicado com vírgula! Jamais...
Vacilo, UFBA! ;-) Gabarito: C
Comentários:
Blocos de programação são aglomerados de instruções e declarações que têm escopo
conjunto. Em outras palavras, as variáveis definidas como locais dentro de um bloco
somente serão presentes dentro deste bloco, assim como as instruções ali presentes. Os
blocos de programação são delimitados por chaves { } e podem ser aninhados, já os
comandos sempre são terminados com ponto-e-vírgula.
Conforme vimos em aula, bloco de código vem delimitado por chaves { }. Gabarito: B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 231
www.estrategiaconcursos.com.br 272
Comentários:
A sintaxe para implementar uma Interface utiliza a palavra reservada implements:
public class Teste implements FiguraGeometrica
Conforme vimos em aula, utilizamos a palavra-reservada implements. Gabarito: E
Comentários:
1. Não pode ser uma palavra-reservada (palavra-chave);
2. Não pode ser true, false ou null;
3. Não pode começar com números;
4. Não pode conter espaços em branco ou caracteres de formatação;
Conforme vimos em aula, não se pode utilizar true. Gabarito: B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 232
www.estrategiaconcursos.com.br 272
e) métodos declarados como default só podem ser acessados a partir dos métodos da
própria classe.
Comentários:
(a) Não, essa afirmação não faz qualquer sentido; (b) Sim, as subclasses nunca podem ser
mais restritivas que as superclasses; (c) Não, default é mais restritivo; (d) Não, eles
podem ser acessados por quaisquer métodos de quaisquer classes ou pacotes; (e) Não,
eles podem ser acessados pela própria classe, pelas subclasses e pelas classes do mesmo
pacote. Gabarito: B
10. (UFBA - 2009 – UFBA – Analista de Sistemas) O bloco finally em uma instrução
try catch finally sempre será executado quer ocorra ou não uma exceção no
bloco try.
Comentários:
Podemos encadear vários blocos catch, dependendo do número de exceções que podem
ser lançadas por uma classe ou método. O bloco catch obtém o erro criando uma instância
da exceção. Quando uma exceção é lançada e é necessário que determinada ação seja
tomada mesmo após a sua captura, utilizamos a palavra reservada finally – é opcional,
mas se existir, sempre será executado.
Conforme vimos em aula, é um bloco opcional. No entanto, caso exista, sempre será
executado – com exceção ou não! Gabarito: C
Comentários:
Podemos encadear vários blocos catch, dependendo do número de exceções que podem
ser lançadas por uma classe ou método. O bloco catch obtém o erro criando uma instância
da exceção. Quando uma exceção é lançada e é necessário que determinada ação seja
tomada mesmo após a sua captura, utilizamos a palavra reservada finally – é opcional,
mas se existir, sempre será executado.
Conforme vimos em aula, podemos ter vários blocos catch de um único try. Gabarito: C
Comentários:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 233
www.estrategiaconcursos.com.br 272
Quando nós executamos essas tarefas em paralelo, estamos usando Threads! Vocês
sabem o que essa palavra significa em português? Fios ou Linhas! Em outras palavras,
criamos linhas de execução de tarefas paralelas em memória – cada linha responsável por
executar alguma coisa simultaneamente e relativamente independentes. Em Java, as
Threads são objetos presentes no Pacote java.lang.
Conforme vimos em aula, realmente são objetos que representam recursos
compartilhados em memória. Gabarito: C
Comentários:
A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário
(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o Swing é
um conjunto sofisticado de classes e interfaces que definem os componentes visuais
necessários para construir uma interface gráfica de usuário.
Conforme vimos em aula, a questão não faz o menor sentido – não tem absolutamente
nada a ver com Swing. Gabarito: E
14. (ESAF – 2008 – CGU - Analista de Sistemas) A linguagem Java possui uma API
(Application Program Interface) que disponibiliza pacotes e classes com
diversas funcionalidades para auxiliar no desenvolvimento de aplicações. O
pacote que contém classes que auxiliam na criação de interfaces de usuário,
incluindo tratamento de gráficos e imagens, é denominado:
a) java.util.
b) java.applet.
c) java.graphic.
d) java.image.
e) java.awt.
Comentários:
A Plataforma Java oferece recursos para construção de interfaces gráficas de usuário
(GUI), entre eles: AWT (java.awt) e Swing (javax.swing)! O primeiro é um conjunto básico
de classes e interfaces que definem os componentes de uma janela desktop. Já o Swing é
um conjunto sofisticado de classes e interfaces que definem os componentes visuais
necessários para construir uma interface gráfica de usuário.
Conforme vimos em aula, trata-se do pacote java.awt. Gabarito: E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 234
www.estrategiaconcursos.com.br 272
Comentários:
A palavra-chave extends faz com que uma subclasse herde (receba) todos os atributos e
métodos declarados na classe-pai (desde que ela não seja final), incluindo todas as
classes-pai da classe-pai. A classe-filha pode acessar todos os atributos e métodos não-
privados. Ela herda, mas não acessa (ao menos diretamente) métodos e atributos
privados.
Conforme vimos em aula, trata-se do extends. Gabarito: B
16. (FGV – 2015 – PGE/RO – Analista de Sistemas) São tipos primitivos na linguagem
de programação Java:
a) int, float, double, char, boolean;
b) int, double, string, char, boolean;
c) integer, real, byte, char, boolean;
d) byte, word, short, integer, char;
e) int, real, char, string, boolean.
Comentários:
Vamos falar agora sobre uma das linguagens mais famosas do mundo! Professor, o que é
Java? É uma linguagem de programação orientada a objetos, multiplataforma, robusta,
portável, segura, extensível, concorrente e distribuída. E ela é totalmente orientada a
objetos? Não! Por que não? Porque nem todos os seus tipos de dados são objetos (possui
alguns tipos primitivos: int, float, long, double, char, etc).
Conforme vimos em aula, trata-se do int, float, double, char e boolean. Gabarito: A
17. (FGV – 2014 – TJ/GO – Analista de Sistemas) Se uma classe na linguagem Java é
declarada com o modificador abstract, então essa classe:
a) não pode ser referenciada;
b) não pode ser estendida;
c) não pode ser instanciada;
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 235
www.estrategiaconcursos.com.br 272
Comentários:
Palavras Descrição
Comentários:
Portanto para declarar uma classe, deve-se colocar a palavra class seguida de um
identificador que irá servir de nome para a classe. O identificador pode ser qualquer
palavra, exceto palavras reservadas. Por exemplo: class Conta introduz a declaração de
uma nova classe chamada Conta. Note que, por convenção, o nome de uma classe inicia
sempre com uma letra maiúscula. A Palavra-Chave é opcional, podendo ser:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 236
www.estrategiaconcursos.com.br 272
19. (FGV – 2010 – BADESC – Analista de Sistemas) Observe o código em Java a seguir,
em que se pode verificar a aplicação dos operadores de pré-decremento e pós-
decremento.
public class Decrementa {
public static void main (string args {} )
{
int m, n = 44;
m = --n;
m = n--;
system.out.println (m);
system.out.println (n);
}
}
Após a execução do código, as variáveis m e n exibirão, respectivamente, os
valores:
a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
d) 43 e 42.
e) 43 e 43.
Comentários:
Vamos analisar essa questão! O examinador queria saber se o aluno conhecia os
operadores de pré-incremento e os operadores de pós-incremento. Observem que na
linha 5, temos um operador de pré-incremento. Isso significa que a m será atribuído o
valor de n-1, ou seja, 43. Ao final dessa linha, m = n = 43. Na linha 6, temos um operador
de pós-incremento. Isso significa que a m será atribuído o valor de n, ou seja, 43 e só
depois será feita a operação, i.e., m = 43, mas ao final dessa linha, n = 42. Então, temos m
= 43 e n = 42. Agora o engraçado é que nada isso será executado porque o comando não
é system.out, mas System.out, mas a questão ignorou esse errinho. Gabarito: D
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 237
www.estrategiaconcursos.com.br 272
Comentários:
Galera, se o método é declarado sem modificador dentro de uma interface, então ele é
implicitamente público e evidentemente abstrato. Gabarito: B
Comentários:
Ficou fácil! Pelo caractere @. Gabarito: D
Comentários:
Por conta deles, programas escritos em Java podem funcionar em qualquer plataforma
de hardware e software que possua uma JVM, tornando assim essas aplicações
independentes da plataforma, como apresenta a imagem acima (Win32, UNIX e MacOS)!
Galera, qualquer plataforma... desde um computador a uma geladeira. A imagem abaixo é
similar à anterior, apenas para solidificar!
Conforme vimos em aula, trata-se da JVM (Java Virtual Machine). Gabarito: E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 238
www.estrategiaconcursos.com.br 272
Comentários:
A Linguagem Java tem dois processos de execução de código-fonte: Compilação e
Interpretação! Vamos lá... o programador escreve um código em Java em um editor de
texto, por exemplo. Ele salva com a extensão .java e passa por um compilador (JavaC)!
Esse compilador transforma o arquivo .java em código de máquina e em um arquivo
.class, também chamado bytecode – como mostra a imagem abaixo.
Conforme vimos em aula, trata-se do bytecode! Gabarito: A
24. (ESAF – 2010 – MPOG - Analista de Sistemas - B) Na linguagem Java uma applet
contém unicamente comandos iniciando por /* e terminando por */.
Comentários:
Que loucura é essa? Isso seria a sintaxe para comentários no código-fonte! Gabarito: E
Comentários:
Em 1995, a tecnologia Java e seu modelo de código móvel conhecido como applet foram
criados pela Sun Microsystems. Applets são pequenos programas Java que são instalados
em Contêineres Web e referenciados através de Páginas HTML em um navegador.
Quando um browser acessa esta página HTML que referencia o applet, ele
automaticamente também transfere o código do applet e o executa.
Perfeito, conforme visto em aula! Gabarito: C
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 239
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 240
www.estrategiaconcursos.com.br 272
a) try e catch.
b) try e finally.
c) finally e catch.
d) finally e retry.
e) try e retry.
14. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação) Ao contrário dos tipos primitivos que não são objetos, os tipos de
objetos são determinados pela classe de origem.
15. (CESPE - 2009 - TRT - 17ª Região (ES) - Técnico Judiciário - Tecnologia da
Informação) Uma classe final indica uma classe que não pode ser estendida. Um
método final não pode ser redefinido em classes derivadas.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 241
www.estrategiaconcursos.com.br 272
20. (CESPE - 2013 - MPOG - Tecnologia da Informação) O JME foi criado para
trabalhar com ambientes de programação multiprocessados em ambientes
distribuídos.
25. (CESPE - 2013 - TRT - 10ª REGIÃO (DF e TO) - Técnico Judiciário - Tecnologia da
Informação) É possível indicar que parte de um código em um método pode
gerar uma exceção, por meio da utilização da palavra-chave finally.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 242
www.estrategiaconcursos.com.br 272
27. (CESPE – 2004 – STJ - Analista Judiciário - Análise de Sistemas) O Java collections
framework da API Java J2SE possui um conjunto de interfaces e implementações
que define estruturas usadas para manipular coleções de objetos. As interfaces
fundamentais do framework estão associadas à identificação de
funcionalidades típicas de estruturas de dados clássicas. Assim, a interface
java.util.List está ligada a estruturas de listas, a interface java.util.Set está
associada a estruturas do tipo conjuntos e a interface java.util.Map refere-se a
estruturas do tipo mapas. Set, List e Map possuem a interface abstrata
java.util.Collection como superinterface.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 243
www.estrategiaconcursos.com.br 272
36. (CESPE – 2014 – ANATEL - Analista de Sistemas) No JSE (Java Standard Edition)
versão 8, é possível utilizar recursos inerentes à programação funcional por
meio de uma nova característica da linguagem chamada expressões Lambda,
que permitem o tratamento de funções como argumentos de métodos.
37. (CESPE – 2017 – TRE/BA - Analista de Sistemas) No JSE (Java Standard Edition)
versão 8, é possível utilizar recursos inerentes à programação funcional por
meio de uma nova característica da linguagem chamada expressões Lambda,
que permitem o tratamento de funções como argumentos de métodos.
1 class abc {
2 String nome;
3 String cpf;
4 double salario;
5 int senha;
6}
7 class xyz extends abc {
8 int numerodeImoveis;
9}
38. (CESPE - 2004 – ABIN - Analista de Sistemas) A máquina virtual Java (Java
Virtual Machine — JVM) é especificada para interpretar instruções expressas
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 244
www.estrategiaconcursos.com.br 272
40. (CESPE - 2011 – TJ/ES - Analista de Sistemas) O JVM (Java Virtual Machine) é um
interpretador que atribui portabilidade à linguagem Java, possibilitando,
consequentemente, a sua execução em qualquer sistema operacional.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 245
www.estrategiaconcursos.com.br 272
43. (CESPE - 2006 – ANCINE - Analista de Sistemas) Para que um sistema aplicativo
funcione nessa arquitetura, é necessário que os contêineres Web e EJB utilizem
máquinas com o mesmo sistema operacional, seja ele Windows ou Linux,
embora os contêineres Applet e de aplicação cliente possam ser heterogêneos
com relação ao sistema operacional.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 246
www.estrategiaconcursos.com.br 272
==1f6836==
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 247
www.estrategiaconcursos.com.br 272
GABARITO
1. C 17. C 33. C
2. C 18. C 34. E
3. E 19. E 35. E
4. C 20. E 36. C
5. E 21. E 37. D
6. E 22. C 38. C
7. C 23. C 39. E
8. E 24. C 40. C
9. C 25. E 41. C
10. C 26. C 42. C
11. C 27. E 43. E
12. E 28. C 44. C
13. A 29. C 45. C
14. C 30. E 46. C
15. C 31. C 47. C
16. C 32. E 48. E
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 248
www.estrategiaconcursos.com.br 272
3. (FCC - 2010 - Sergipe Gás S.A. - Analista de Sistemas) É 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.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 249
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 250
www.estrategiaconcursos.com.br 272
a) static.
b) abstract.
c) protected.
d) volatile.
e) transient.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 251
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 252
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 253
www.estrategiaconcursos.com.br 272
17. (FCC - 2010 - TRT - 8ª Região (PA e AP) - Analista Judiciário - Tecnologia da
Informação) São tipos primitivos da linguagem Java:
a) int, string, long e real.
b) char, int, real e bit.
c) boolean, double, float e byte.
d) real, short, long e char.
e) string, long int, short int e float.
19. (FCC - 2009 - TRT - 15ª Região - Analista Judiciário - Tecnologia da Informação)
No âmbito da linguagem Java, considere:
I. Edição é a criação do programa, que também é chamado de código Bytecode.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 254
www.estrategiaconcursos.com.br 272
20. (FCC - 2008 - TCE-AL - Programador) Os três elementos básicos quando contidos
num arquivo fonte Java devem obrigatoriamente se apresentar na seguinte
ordem:
a) import, package e class.
b) class, package e import.
c) class, import e package.
d) package, class e import.
e) package, import e class.
21. (FCC - 2014 – TRF/3 – Analista de Sistemas) Considere a classe escrita em Java:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 255
www.estrategiaconcursos.com.br 272
b) 7
c) 8.0
d) 5.0
e) 12.5
23. (FCC - 2008 - MPE-RS - Técnico em Informática - Área Sistemas) A função Java:
public boolean VerificarCPF (string CPF);
representa um exemplo do conceito de:
a) override.
b) overload.
c) herança.
d) encapsulamento.
e) polimorfismo.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 256
www.estrategiaconcursos.com.br 272
a) 15 e 6.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 257
www.estrategiaconcursos.com.br 272
b) 1 e 5.
c) 0 e 1.
d) 6 e 9.
e) 9 e 7.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 258
www.estrategiaconcursos.com.br 272
c) o JRE.
d) uma JSP.
e) uma API.
31. (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Analista Judiciário - Tecnologia da
Informação) Considere as classes a seguir, presentes em uma aplicação Java
orientada a objetos:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 259
www.estrategiaconcursos.com.br 272
e) métodos abstratos.
33. (FCC - 2008 - TCE-AL - Programador) NÃO são nomes válidos em Java:
a) _Real e $real
b) um1 e dois2
c) 3tres e tres3
d) Codigo e codigo
e) cod_valor e cod$valor
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 260
www.estrategiaconcursos.com.br 272
35. (FCC - 2009 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário - Tecnologia da
Informação) Uma classe Java pode ser instanciada por um comando, cuja
sintaxe é:
a) nome_Objeto nome_Classe = new nome_Objeto();
b) nome_Classe nome_Objeto = new nome_Classe();
c) nome_Classe nome_instancia = new nome_Objeto();
d) nome_Instancia nome_Objeto = new nome_Instancia();
e) nome_Instancia nome_Classe = new nome_Instancia();
38. FCC - 2014 - SABESP - Tecnólogo – Sistemas – II) O processo híbrido combina a
execução eficiente e a portabilidade de programas. A base é a existência de um
código intermediário, mais fácil de ser interpretado e não específico de uma
plataforma computacional. O método é dividido em duas etapas: compilação
para um código intermediário e interpretação desse código. Um exemplo é o
Java e a JVM.
39. (FCC – 2003 – TRF/5 - Analista de Sistemas) Um programa Java, que é executado
dentro de um browser Web, denomina-se:
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 261
www.estrategiaconcursos.com.br 272
a) API.
b) applet.
c) servlet.
d) acriptlet.
e) package.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 262
www.estrategiaconcursos.com.br 272
GABARITO
1. B 14. A 27. D
2. A 15. D 28. B
3. D 16. E 29. E
4. C 17. C 30. C
5. C 18. A 31. C
6. B 19. E 32. C
7. B 20. E 33. C
8. C 21. C 34. A
9. C 22. A 35. B
10. C 23. D 36. E
11. E 24. A 37. E
12. E 25. D 38. C
13. D 26. B 39. B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 263
www.estrategiaconcursos.com.br 272
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 264
www.estrategiaconcursos.com.br 272
( ) J2ME (Java 2 Micro Edition) - tecnologia Java para dispositivos móveis com
limitações de memória ou processamento.
( ) J2FE (Java 2 Full Edition) - tecnologia Java para aplicações em computadores
de grande porte (mainframe).
A seqüência está correta em:
a) F, F, F, F
b) V, V, V, F
c) V, F, F, V
d) F, V, F, V
e) V, V, V, V
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 265
www.estrategiaconcursos.com.br 272
10. (UFBA - 2009 – UFBA – Analista de Sistemas) O bloco finally em uma instrução
try catch finally sempre será executado quer ocorra ou não uma exceção no
bloco try.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 266
www.estrategiaconcursos.com.br 272
14. (ESAF – 2008 – CGU - Analista de Sistemas) A linguagem Java possui uma API
(Application Program Interface) que disponibiliza pacotes e classes com
diversas funcionalidades para auxiliar no desenvolvimento de aplicações. O
pacote que contém classes que auxiliam na criação de interfaces de usuário,
incluindo tratamento de gráficos e imagens, é denominado:
a) java.util.
b) java.applet.
c) java.graphic.
d) java.image.
e) java.awt.
16. (FGV – 2015 – PGE/RO – Analista de Sistemas) São tipos primitivos na linguagem
de programação Java:
a) int, float, double, char, boolean;
b) int, double, string, char, boolean;
c) integer, real, byte, char, boolean;
d) byte, word, short, integer, char;
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 267
www.estrategiaconcursos.com.br 272
17. (FGV – 2014 – TJ/GO – Analista de Sistemas) Se uma classe na linguagem Java é
declarada com o modificador abstract, então essa classe:
a) não pode ser referenciada;
b) não pode ser estendida;
c) não pode ser instanciada;
d) pode ser instanciada apenas uma vez;
e) não pode possuir métodos estáticos.
19. (FGV – 2010 – BADESC – Analista de Sistemas) Observe o código em Java a seguir,
em que se pode verificar a aplicação dos operadores de pré-decremento e pós-
decremento.
public class Decrementa {
public static void main (string args {} )
{
int m, n = 44;
m = --n;
m = n--;
system.out.println (m);
system.out.println (n);
}
}
Após a execução do código, as variáveis m e n exibirão, respectivamente, os
valores:
a) 42 e 41.
b) 42 e 42.
c) 42 e 43.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 268
www.estrategiaconcursos.com.br 272
d) 43 e 42.
e) 43 e 43.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 269
www.estrategiaconcursos.com.br 272
24. (ESAF – 2010 – MPOG - Analista de Sistemas - B) Na linguagem Java uma applet
contém unicamente comandos iniciando por /* e terminando por */.
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 270
www.estrategiaconcursos.com.br 272
GABARITO
1. D 10. C 19. D
2. B 11. C 20. B
3. B 12. C 21. D
4. E 13. E 22. E
5. C 14. E 23. A
6. B 15. B 24. E
7. E 16. A 25. A
8. B 17. C
9. B 18. B
Banco do Brasil (Escriturário - Agente de Tecnologia) Desenvolvimento de Software - 2023 (Pós-Edital) 271
www.estrategiaconcursos.com.br 272