java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf ·...

53
Questões comentadas Java para concursos

Upload: lamtuong

Post on 13-Nov-2018

224 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Questões comentadas

Javapara concursos

Page 2: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Prefácio

Concebida inicialmente para ser utilizada no desenvolvimento de pequenos aplicativos e pro-gramas de controle de aparelhos eletrônicos, a linguagem de programação orientada a objetoJava, com o boom da Internet, foi rapidamente adaptada aos conceitos da Internet, dando àspáginas HTML conteúdos mais dinâmico.

Desde o seu lançamento, em maio de 1995, Java foi rapidamente adotada pelos desenvolve-dores, estando presente em diversos tipos de web browsers, celulares, mainframes, etc.

Com algumas características peculiares, como multi-plataforma, alto desempenho, segurança,código interpretado, a linguagem Java está presente em muitos projetos, e por esta crescenteutilização, a linguagem Java tornou-se um padrão para o mercado.

Seguindo este cenário, o assunto Java sempre é cobrado nas provas de concursos públicos. Paravocê pode ser preparar melhor neste tema, o Grupo Handbook de TI preparou o volume Java,que traz uma séria de questões comentadas sobre tal tópico.

Bons estudos,

Grupo Handbook de TI

Página 1 de 51www.handbookdeti.com.br

Page 3: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Direitos Autorais

Este material é registrado no Escritório de Direitos Autorais (EDA) da Fundação BibliotecaNacional. Todos os direitos autorais referentes a esta obra são reservados exclusivamente aosseus autores.

Os autores deste material não proíbem seu compartilhamento entre amigos e colegas próxi-mos de estudo. Contudo, a reprodução, parcial ou integral, e a disseminação deste material deforma indiscriminada através de qualquer meio, inclusive na Internet, extrapolam os limites dacolaboração. Essa prática desincentiva o lançamento de novos produtos e enfraquece a comuni-dade concurseira Handbook de TI.

A série Handbook de Questões de TI Comentadas para Concursos � Além do Gabarito é umaprodução independente e contamos com você para mantê-la sempre viva.

Grupo Handbook de TI

Página 2 de 51www.handbookdeti.com.br

Page 4: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Canais de Comunicação

O Grupo Handbook de TI disponibiliza diversos canais de comunicação para os concurseirosde TI.

Loja Handbook de TI

Acesse a nossa loja virtual em http://www.handbookdeti.com.br

Serviço de Atendimento

Comunique-se diretamente conosco através do e-mail [email protected]

Twitter do Handbook de TI

Acompanhe de perto promoções e lançamentos de produtos pelo nosso Twitter http://twitter.com/handbookdeti

Página 3 de 51www.handbookdeti.com.br

Page 5: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

1. Assuntos relacionados: Servidor de Aplicações, J2EE, EJB, WAR, JAR, EAR,Banca: CESGRANRIOInstituição: BNDESCargo: Analista de SuporteAno: 2008Questão: 42

Uma aplicação empresarial contendo componentes EJB e módulos web deverá ser publicadaem um servidor de aplicação compatível com J2EE. No contexto do empacotamento dessaaplicação para publicação (deploy), é correto a�rmar que

(a). não há como juntar componentes EJB e módulos web em uma mesma aplicação,pois deverão ser publicados separadamente.

(b). um arquivo EAR poderá conter arquivos WAR e JAR representativos dos módulosweb e EJB.

(c). o tamanho do pacote, em bytes, sempre �ca maior que o código original, em virtudedo algoritmo empregado no empacotamento da aplicação em um arquivo EAR.

(d). módulos web não devem ser empacotados, pois isso inviabiliza seu acesso pelaInternet.

(e). arquivos JAR servem apenas para empacotar componentes EJB.

Solução:

Os arquivos JAR (Java Archive) agrupam arquivos de classes e os recursos utilizados poressas classes, como imagens e propriedades. Os pacotes JAR são muito utilizados no mundoJava e são facilmente visualizáveis por softwares de descompactação populares, como o Win-zip. A utilização desses arquivos JAR não se restringe ao empacotamento de componentesEJB, pois também são utilizados para empacotar componentes Java não pertencentes aopadrão J2EE. Concluímos, então, que a alternativa E está incorreta.

O que difere um arquivo JAR comum e um arquivo JAR que armazena componentes EJB sãoos arquivos �manifest�, cuja �nalidade é fornecer informações adicionais que serão utilizadasem tempo de execução. Os arquivos JAR comuns possuem o arquivo meta-inf/Manifest.mf.Já os arquivos que armazenam EJBs possuem o arquivo META_INF/ejb-jar.xml.

Os módulos web podem ser empacotados em arquivos com extensão WAR (Web Archive) enão há problema nenhum em relação ao seu acesso pela Internet, pois uma vez que o arquivoWAR siga as especi�cações do padrão J2EE, o container web do servidor de aplicação seráresponsável por gerar os arquivos HTML para serem entregues ao browser. Logo, a alterna-tiva D está incorreta.

A alternativa C está errada, uma vez que os arquivos JAR, WAR etc. são compactadose tendem a possuir tamanho reduzido, embora não haja garantia de que sejam menores queo código original.

Um arquivo EAR (Enterprise Application Archive) é utilizado para permitir que uma apli-cação J2EE complexa possa ser facilmente instalada em um servidor J2EE. Ele permiteagrupar pacotes JAR comuns, pacotes JAR com EJBs e pacotes WAR. Portanto, a alterna-tiva B é a alternativa correta para a questão.

Página 4 de 51www.handbookdeti.com.br

Page 6: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

2. Assuntos relacionados: Servidor de Aplicações, J2EE, JEE, .NET, MVC,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questão: 47

Um servidor de aplicações provê diversos serviços para as aplicações que hospeda. Considerando-se implementações típicas em J2EE/JEE e .NET, compondo uma arquitetura em 3 camadas,é correto a�rmar que, dentre os serviços oferecidos pelos servidores de aplicações, encontra-se

(a). validação de objetos de domínio, segundo as regras de negócio da aplicação.

(b). geração de código através de MDA (Model Driven Architecture).

(c). persistência �nal dos objetos de domínio.

(d). suporte nativo à arquitetura MVC.

(e). estrutura para troca de mensagens entre aplicações.

Solução:

O objetivo dos servidores de aplicações é disponibilizar uma plataforma que permita aosprogramadores �abstrair� de uma gama de tarefas inerentes ao desenvolvimento do software.Dessa forma, os programadores podem se concentrar mais nas regras de negócio do que nasquestões de infraestrutura da aplicação, como segurança, disponibilidade, balanceamento decarga, mensageiria etc.

Para aplicações simples, a utilização de um servidor de aplicações pode representar umoverhead ao invés de facilitar as tarefas dos programadores. No entanto, para grandesaplicações comerciais com requisitos mais rígidos de desempenho e robustez a falhas, osservidores de aplicações mostram-se muito úteis.

Embora o conceito de servidor de aplicações seja aplicável para o desenvolvimento em umagrande quantidade de linguagens, nos últimos anos os que mais se tornaram populares sãoos servidores de aplicações J2EE (ou JEE, nas versões mais recentes), criados para suportaraplicações escritas em Java.

Para exempli�car o conjunto de serviços que os servidores de aplicações podem oferecer,vejamos a Figura 1. Ela mostra a arquitetura JEE mais recente, publicada pela Sun Mi-crosystems no documento JSR-000316. No esquema mostrado nessa �gura, tanto o WebContainer quanto o EJB Container são �hospedados� no servidor de aplicações, que ofereceserviços diversos por meio de várias APIs. A API JMS (Java Message Service), por exem-plo, oferece suporte a comunicação ponto-a-ponto con�ável. A API JavaMail permite que asaplicações enviem e-mails sem ter que se preocupar com as questões de �las de mensagens,falhas etc. A API JASS, por sua vez, oferece facilidades para implementação de autenticaçãoe autorização nas aplicações.

Vale lembrar que os servidores de aplicações também oferecem facilidades para persistênciade dados, como lembrado na alternativa C. No entanto, a palavra ��nal� torna a alternativa,ao menos, duvidosa!

Já no caso da alternativa D, é de se esperar que um ambiente tão cheio de funcionali-dades como um servidor de aplicações ofereça suporte a construção de aplicações segundo

Página 5 de 51www.handbookdeti.com.br

Page 7: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

o modelo MVC. No entanto, a construção de uma aplicações que obedeça ao MVC estámuito mais ligada a separação dos componentes e camadas do sistema do que à plataformatecnológica utilizada. É, portanto, possível construir aplicações MVC no �bom e velho� ASP,bem como nos novos e modernos servidores de aplicações.

A validação de objetos de que trata a alternativa A é feita pelos servidores de aplicações,mas não está relacionada as regras de negócio das aplicações. A geração automática decódigo, por sua vez, é uma tarefa comum às IDEs, e não aos servidores de aplicações.

Portanto, a alternativa E, por ser a mais objetiva e clara, é a resposta correta para essaquestão.

Figura 1: arquitetura JEE 6.0.

Página 6 de 51www.handbookdeti.com.br

Page 8: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

3. Assuntos relacionados: J2EE, Java Transaction API (JTA), MVC,Banca: CesgranrioInstituição: PetrobrasCargo: Analista de Sistemas - InfraestruturaAno: 2008Questão: 63

A aplicação do padrão MVC (Model-View-Controller) no desenvolvimento de aplicações WebJ2EE permite dividir a aplicação em camadas e resolver uma série de problemas. Sobre osrecursos da arquitetura J2EE e o desenvolvimento de aplicações J2EE utilizando o MVC,são feitas as a�rmativas abaixo.

I - Uma possível estratégia no desenvolvimento de um site Web seria utilizar páginasJSP para construir a camada View, Servlets para a camada Controller e EJBs para acamada Model.

II - A API JTA do J2EE permite aos clientes de EJB obter um contexto inicial a partirdo qual é possível recuperar o objeto Home de um EJB.

III - Na demarcação de transação gerenciada pelo container, se o atributo transacionalassociado ao método de um EJB for de�nido como Required, o container sempre criaráuma nova transação a cada chamada do método.

Está(ão) correta(s) a(s) a�rmativa(s)

(a). I, apenas.

(b). II, apenas.

(c). III, apenas.

(d). I e II, apenas.

(e). I, II e III.

Solução:

Abordaremos cada item.

Sobre o Item I

A plataforma J2EE (Java 2 Platform, Enterprise Edition) é uma solução baseada em com-ponentes para projeto, desenvolvimento, montagem e disponibilização de aplicações distri-buídas em ambientes corporativos. Tipicamente, as aplicações J2EE são divididas em 3camadas:

• Cliente;

• Web;

• Negócios;

A Figura 2 exempli�ca a arquitetura J2EE. A partir da Figura 2, identi�camos a existênciade containers, que são ambientes que fornecem um conjunto de serviços para os componentesapropriados (Apache Tomcat é um tipo de container).

Página 7 de 51www.handbookdeti.com.br

Page 9: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Figura 2: arquitetura J2EE.

Podemos observar, também, a existência de dois tipos de clientes:

• Cliente Web: páginas Web dinamicamente geradas por componentes Web (JSP ouServlets) e que são exibidas no browser;

• Cliente Aplicação: permite que o usuário interaja com o servidor da aplicação atravésde interfaces mais complexas, geralmente através de APIs.

Já do lado servidor, encontramos dois containers:

• Container EJB (Enterprise Java Beans) que implementa toda a lógica do negócio, istoé, encapsula o código (com classes, métodos e atributos) que realiza o propósito daaplicação;

• Container WEB que contém:

� Servlets: classes que processam dinamicamente as requisições e constroem respos-tas na forma de páginas HTML;

� Páginas JSP (Java Server Pages): permitem a �mistura� de páginas HTML, está-ticas, com conteúdos gerados dinamicamente pelos Servlets.

Note que os Servlets atuam como uma camada intermediária entre a requisição provenientedo Web browser (ou outro cliente http) e o banco de dados (ou aplicação no servidor http).

É importante mencionar que, quando uma página JSP é requisitada pela primeira vez,o container a compila gerando um Servlet. Nas chamadas sucessivas essa etapa não é maisnecessária (a não ser que a JSP tenha sido modi�cada). Portanto, as páginas JSP são, emúltima instância, processadas como Servlets.

Após esta breve revisão sobre J2EE, relembremos o signi�cado do padrão MVC. MVC éum padrão de arquitetura de software utilizado para separar dados ou lógica de negócios(Model) da interface do usuário (View) e do �uxo da aplicação (Control). Sua ideia centralé permitir que uma mesma lógica de negócio possa ser acessada e visualizada através devárias interfaces. Outro benefício considerável dessa abordagem é que alterações feitas nolayout não afetam a manipulação de dados.

A partir do que foi exposto acima, conseguimos identi�car que a página JSP (mistura deHTML com Servlet), representa a camada View, uma vez que compõe a interface com ousuário. O Servlet representa a camada Control, pois atua como uma camada intermediária

Página 8 de 51www.handbookdeti.com.br

Page 10: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

entre o Web browser e o EJB. Por �m, o EJB representada a camada Model, já que imple-menta toda a lógica do negócio. Portanto, o item I está correto.

Sobre o Item II

JTA (abreviação de Java Transaction API ) é uma especi�cação feita pela Sun Microsystems(criadora do Java) visando padronizar o uso de transações distribuídas feitas por aplicativosJava.

Basicamente, isso signi�ca que ela pode ser usada para fazer commit, rollback ou criartransações, ao invés de usar transações diretamente pelo driver JDBC. A principal vanta-gem que o uso de JTA acarreta, contudo, é a possibilidade de executar transações globais(unidades lógicas de trabalho que seguem 4 princípios fundamentais: atomicidade, consis-tência, isolamento e durabilidade).

JTA de�ne somente as interfaces que um aplicativo deve chamar para fazer uso de tran-sações distribuídas, mas deve ser implementada por algum serviço que implemente essaAPI. Praticamente todo application server, atualmente, tem uma implementação dessas,que é normalmente chamada de Transaction Manager.

Na plataforma J2EE, é a JNDI (Java Naming and Directory Interface) que fornece uma in-terface padrão para localização de usuários, máquinas, redes, objetos e serviços, permitindoaos clientes a obtenção do contexto inicial de um objeto a partir do nome do componente.Portanto o item II está errado.

Sobre o Item III

A grande vantagem da gerência transacional em J2EE é que ela �esconde� os detalhes debaixo-nível, assim, o desenvolvedor pode assumir que qualquer recurso transacional seráadequadamente tratado pela plataforma, usando, para tanto, demarcações transacionaisdeclarativas (também chamadas de implícitas) ou usando demarcações transacionais pro-gramáticas (também chamada de explícitas).

Uma demarcação transacional é basicamente a de�nição do ponto onde ela se inicia (usa-seo comando Begin) e o ponto onde ela termina (usa-se o comando Commit). Em J2EE astransações podem ser demarcadas de três maneiras:

• Declarativa (CMT - Container-Managed Transactions): o container manipula a demar-cação transacional;

• Programática (BMT - Bean Managed Transactions): os EJBs manipulam a demarcaçãotransacional;

• Iniciada pelo cliente: código cliente manipula a demarcação transacional (ex. clienteWEB).

Portanto, estamos diante de uma transação declarativa (gerenciada pelo container), a qualpossui os seguintes atributos transacionais (o atributo especi�ca como o componente iráreagir quando o seu método for chamado por um cliente dentro ou fora do contexto de umatransação):

• Required : indica que o escopo de uma transação é requerido pelo método. Se não existetransação, uma nova é criada e dura até que o método termine (é propagada para todos

Página 9 de 51www.handbookdeti.com.br

Page 11: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

os métodos chamados). Caso já exista uma transação iniciada pelo cliente, o bean éincluído no seu escopo durante a chamada do método (já podemos eliminar o item III);

• Supports: indica que o método suporta transações. Será incluído no escopo da tran-sação do cliente se existir. Se ele for chamado fora do escopo de uma transação elerealizará suas tarefas sem transações e pode chamar objetos que não suportam transa-ções;

• RequiresNew : indica que o método requer uma nova transação. Estando ou não ocliente no escopo de uma transação, o bean irá iniciar uma nova transação que iniciaráe terminará no bean;

• NotSupported : indica que o método não suporta transações. Se o método for chamadopelo cliente no escopo de uma transação, a mesma será suspensa enquanto durar achamada do método (não haverá propagação de transações do cliente);

• Mandatory : indica que o método só pode ser chamado no escopo de uma transação docliente;

• Never : indica que o método nunca pode estar dentro de uma transação. Se o cliente quechama o método for parte de uma transação, o bean irá provocar um RemoteException(ou EJBException em clientes locais).

Logo, a alternativa A está correta.

Página 10 de 51www.handbookdeti.com.br

Page 12: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

4. Assuntos relacionados: Linguagens de Programação, Java, JavaServer Pages (JSP),Banca: ESAFInstituição: Agência Nacional de Águas (ANA)Cargo: Analista Administrativo - Tecnologia da Informação e Comunicação / Desenvolvi-mento de Sistemas e Administração de Banco de DadosAno: 2009Questão: 32

Analise as seguintes a�rmações a respeito de JSP:

I. Em uma aplicação Web, há apenas um objeto page em cada JSP.

II. Comentários JSP aparecem na resposta ao cliente.

III. Os objetos com escopo session duram por toda a sessão de navegação do cliente.

Assinale a opção correta.

(a). Apenas a a�rmação I é verdadeira.

(b). Apenas a a�rmação II é verdadeira.

(c). Apenas a a�rmação III é verdadeira.

(d). As a�rmações I, II e III são verdadeiras.

(e). Nenhuma das a�rmações é verdadeira.

Solução:

JavaServer Pages (JSP) é uma tecnologia baseada em Java utilizada no desenvolvimentode páginas Web com conteúdo dinâmico, similar às tecnologias Active Server Page (ASP) ePHP. Ela faz parte de uma tecnologia maior referida como Java 2 Enterprise Edition (J2EE).

Além das tags HTML, que geram o conteúdo estático, uma página JSP também contémelementos JSP especiais que permitem inserir conteúdo dinâmico por meio dos elementosJSP. Os elementos JSP são processados pelo servidor Web antes da página HTLM ser envi-ada de volta ao browser. Ou seja, quando o usuário faz uma requisição a uma página JSP,o servidor executa os elementos JSP da página, inserindo os resultados dos mesmos junto aparte estática da página, e envia a página HTML para o usuário. A tecnologia JSP pode serusada, por exemplo, para recuperar informação em um banco de dados, manipular arquivos,obter informações sobre o visitante, etc.

Após uma breve introdução de JSP, a seguir, analisamos as a�rmativas da questão:

I. Como forma de facilitar a programação Web, em uma página JSP existem 9 objetosinstanciados, conhecidos como Objetos Implícitos, que são:

� page: representa a própria página JSP, ou melhor, uma instância da classe servletna qual a página foi convertida. É simplesmente um sinônimo para this;

� con�g : armazena os parâmetros de inicialização (con�guração) do servlet da páginaJSP;

� request : solicitação que aciona o processamento da página;

� response: responsável pela devolução do resultado ao usuário;

� out : representa o �uxo de saída (output) para a página em si;

� pageContext : dados de contexto para a execução da página;

� session: representa a sessão atual de um usuário individual;

Página 11 de 51www.handbookdeti.com.br

Page 13: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

� application: representa a aplicação à qual a página pertence;

� exception: incluso nas páginas especí�cas para tratar exceções ou erros não captu-rados.

Para cada página JSP processada existe um servlet correspondente, ou seja, o que umfaz outro também deve fazer. Como o objeto page faz referência ao servlet gerado,existe um objeto page para cada JSP. Portanto, esta a�rmativa é verdadeira.

II. Como qualquer linguagem de programação Web, os comentários não aparecem na res-posta ao cliente. Logo, esta a�rmativa é falsa.

III. O escopo de um objeto está relacionado com as páginas JSPs que podem acessar oobjeto. Os escopos disponíveis são: application, request, response, page e session. Oobjeto que possui escopo session está disponível para todas as JSPs e os servlets, etodos os objetos vinculados à session estão disponíveis para toda a sessão de usuário.

A principal utilização do escopo session é manter os estados de conexão entre cliente e ser-vidor, pois o protocolo HTTP não armazena informações de estado. Isso permite o usuárionavegar entre várias páginas na aplicação Web sem perda de informações referentes à sessãode usuário. Um exemplo típico de utilização do escopo session é em autenticação de usuá-rios, onde é possível restringir acesso a determinadas páginas.

Portanto, esta a�rmativa é verdadeira porque os objetos com o escopo session duram du-rante toda a sessão negação do cliente.

Após a análise das a�rmativas, chegamos a conclusão que as a�rmativas I e III são ver-dadeiras. Portanto, a alternativa correta é a (E). Note que o gabarito fornecido para estaquestão não confere com o gabarito o�cial. Possivelmente, a banca que organizou a provadeve ter cometido um equívoco na a�rmativa I.

Página 12 de 51www.handbookdeti.com.br

Page 14: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

5. Assuntos relacionados: Java,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questão: 61

testDescontoValido() valida a veri�cação para o produto caderno, mas gera uma exceçãopara o produto caneta, indicando que o desconto de 90% não é válido para canetas, o queestá incorreto. A causa do problema e uma possível solução seriam:

(a). CAUSA: uso de aritmética binária de ponto �utuante para os cálculos (variáveisdo tipo double) com posterior tentativa de comparação exata entre os valorescalculados (linha 21). SOLUÇÃO: usar aritmética decimal exata substituindo osvalores primitivos double por instâncias da classe BigDecimal.

(b). CAUSA: arredondamento automático devido ao uso na mesma expressão dostipos int e double (linha 14) sem conversão de tipos (typecasting). SOLUÇÃO:transformar o parâmetro percentual em double ou realizar um typecasting explícitode int para double na expressão.

(c). CAUSA: versão antiga da máquina virtual Java, que apresenta esse tipo de pro-blema até a versão 1.1. SOLUÇÃO: atualizar para a última versão da JVM.

(d). CAUSA: falta da inclusão do pacote java.lang.math em Produto. SOLUÇÃO:incluir o pacote através de uma declaração import.

(e). CAUSA: mistura de elementos de escopos diferentes (classe e método) na expres-são lógica de retorno. SOLUÇÃO: atribuir o precoMinimo a uma variável locale utilizá-la na comparação ou tornar precoComDesconto um campo de Produto.

Solução:

(A) CORRETA

Observe, no código acima, que as variáveis preco, precoMinimo e precoComDesconto sãodo tipo double. Observe, também, que o programa está tratando com partes fracionais deuma unidade monetária, que assumiremos ser o real somente para �ns ilustrativos, e entãoprecisa de um tipo que permite pontos decimais em seus valores.

Infelizmente, números em ponto �utuante podem causar transtornos. O problema que ocorreno código acima é devido ao uso do tipo double (ou �oat) para representar quantias em reais(assumindo que quantias de real são mostradas com dois dígitos a direita do ponto decimal).Dessa forma, após a chamada do construtor Produto, poderemos ter as seguintes quantiasarmazenadas para o produto caderno:

• na varável privada preco: 10.000 e exibição 10.00;

• na variável privada precoMinimo: 0.999, o qual seria arrendondado normalmente para1.00 para propósitos de exibição.

O mesmo pode ocorrer para o produto caneta após a invocação do construtor Produto:

• na varável privada preco: 1.000 e exibição 1.00;

• na variável privada precoMinimo: 0.101, o qual seria arrendondado normalmente para0.10 para propósitos de exibição.

Página 13 de 51www.handbookdeti.com.br

Page 15: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Assim, após a invocação do método descontoValido pelos produtos caderno e lápis, teremos:

• para caderno: a variável precoComDesconto armazenará 1.000 (e exibição 1.00), o queé maior que o precoMinimo (0.999), retornando true na comparação;

• para caneta: a variável precoComDesconto armazenará 0.100 (e exibição 0.10), o queé menor que o precoMinimo (0.101), retornando false na comparação.

A recomendação é não usar variáveis do tipo double (ou �oat) para realizar cálculos mo-netários precisos. A imprecisão de números em ponto �utuante pode causar erros que re-sultarão em incorretos valores monetários. Nesses casos a recomendação é usar a classesjava.math.BigDecimal para a realização de cálculos com precisão arbitrária de valores emponto �utuante.

(B) ERRADA

Em Java, há regras de promoção que se aplicam a expressões contendo valores de doisou mais tipos primitivos. Cada valor é promovido ao tipo mais �alto� na expressão. Dessaforma, o argumento do método descontoValido (percentual) e a constante (100) do tipo intsão automaticamente promovidas para o tipo double, devido ao campo preco.

(C) ERRADA

A JVM (Java Virtual Machine ou Máquina Virtual Java, em português) é uma máquinacomputacional abstrata, que, assim como uma máquina real, possui seu próprio conjunto deinstruções e capacidade de manipular várias áreas de memória em tempo de execução.

Dentre as responsabilidade da JVM podemos citar as principais:

• independência de uma aplicação em relação ao hardware;

• independência de uma aplicação em relação ao sistema operacional;

• proteção aos usuários contra programas maliciosos.

Lembre-se que a máquina virtual Java não tem conhecimento sobre a linguagem de progra-mação Java. Ela conhece apenas um determinado formato binário, arquivo do tipo classe, oqual contém instruções da JVM (ou bytecodes) e uma tabela de símbolos, bem como outrasinformações.

(D) ERRADA

A classe Math é parte do pacote java.lang, o qual é implicitamente importado pelo compi-lador. Então não é necessário importar a classe Math para usar seus métodos.

(E) ERRADA

Os membros de uma classe, no presente caso, preco e precoMinimo, são acessíveis por qual-quer método declarado na mesma classe, independentemente do quali�cador que os precede.Assim, o campo precoMinino (this.precoMinimo no código) pertence ao escopo do métododescontoValido.

Note, ainda, que no método descontoValido, o uso da palavra chave this para o membroprecoMinimo não era necessário, pois não há variáveis locais com o mesmo nome.

Página 14 de 51www.handbookdeti.com.br

Page 16: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

6. Assuntos relacionados: Linguagens de Programação, Java, Tratamento de Exceção emJava,Banca: ESAFInstituição: Agência Nacional de Águas (ANA)Cargo: Analista Administrativo - Tecnologia da Informação e Comunicação / Desenvolvi-mento de Sistemas e Administração de Banco de DadosAno: 2009Questão: 30

Em uma aplicação Java, se o carregador de classes não conseguir localizar a classe do driverde banco de dados para uma conexão JDBC, é lançada a exceção

(a). java.lang.ClassNotFoundException.

(b). java.io.FileNotFoundException.

(c). java.lang.SecurityException.

(d). java.io.IOException.

(e). java.util.InputMismatchException.

Solução:

Exceções, como o nome sugere, são situações que fogem às regras e, no caso das linguagens deprogramação, geralmente indesejáveis. Ocorrem no momento da execução de um programae precisam ser devidamente �tratadas� para não interromperem o processamento normal deuma aplicação. Podem ocorrer por diversos motivos, como uma inadvertida divisão por zero,uso de referências para objetos inexistentes, falta de memória, dentre outros.

A Linguagem Java possui um mecanismo de tratamento de exceções baseado em escopo,o que permite utilizar um bloco de código separado daquele que gerou uma determinadaexceção para tratá-la adequadamente, propiciando maior organização ao projeto codi�cado.

Da mesma forma que os demais elementos desta linguagem, as exceções são objetos em Java,sendo a classe Exception a superclasse de todas as exceções. Esta estruturação permite queum programador de�na suas próprias exceções, que herdam características pré-de�nidas naclasse Exception. Quando uma exceção ocorre, códigos escritos por um programador po-dem tratá-la através de diretivas especializadas para este �m (throws, try, catch e �nally).Para tanto, o tipo (classe) de exceção deve ser indicado, possibilitando-se, assim, que todae qualquer exceção seja individualmente tratada.

Uma exceção comumente �lançada� durante a execução de códigos em Java é a ClassNot-FoundException, que adverte ao programador que uma determinada classe não está acessívelà JVM, isto é, nenhuma de�nição para uma classe com o nome especi�cado pôde ser en-contrada. Esta exceção, classe integrante do pacote java.lang, pode ocorrer por inexistênciareal da classe indicada ou por falta de referência à sua localização no ambiente de progra-mação utilizado (variáveis de ambiente do sistema operacional). Desta forma, a assertiva Aapresenta-se como a resposta para a questão.

A exceção java.io.FileNotFoundException ocorre para sinalizar que a tentativa de aber-tura do arquivo indicado falhou. Já a exceção java.lang.SecurityException indica a ten-tativa negada de acesso a algum recurso do sistema, como um arquivo. Operações deentrada/saída interrompidas ou falhas lançam a exceção java.io.Exception para indicar o

Página 15 de 51www.handbookdeti.com.br

Page 17: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

ocorrido. A classe Scanner (um parser simples para textos com tipos primitivos) lança a ex-ceção java.util.InputMismatchException para indicar que ou o token capturado não coincidecom o padrão do tipo esperado ou seu valor está fora da faixa esperada.

Página 16 de 51www.handbookdeti.com.br

Page 18: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

7. Assuntos relacionados: Java, Bytecode, Máquina Virtual Java (JVM),Banca: FCCInstituição: TRT 15a RegiãoCargo: Analista Judiciário - Tecnologia da InformaçãoAno: 2009Questão: 48

No âmbito da linguagem Java, considere:

I. Edição é a criação do programa, que também é chamado de código Bytecode.

II. Compilação é a geração de um código intermediário chamado fonte, que é um códigoindependente de plataforma.

III. Na interpretação, a máquina virtual Java ou JVM analisa e executa cada instrução docódigo Bytecode.

IV. Na linguagem Java a interpretação ocorre apenas uma vez e a compilação ocorre a cadavez que o programa é executado.

Está correto o que consta em

(a). I, II, III e IV.

(b). II e IV, somente.

(c). III e IV, somente.

(d). IV, somente.

(e). III, somente.

Solução:

Java é uma linguagem de programação muito popular atualmente. Ela foi desenvolvidana década de 90 pela SUN Microsystems e desde aquela época essa linguagem vem sendomelhorada e ampliada. O paradigma escolhido para o Java foi o de orientação a objetos,portanto, classes e métodos são utilizados para modelar o que se deseja programar.

Em geral, os códigos-fonte desenvolvidos em outras linguagens (C++, por exemplo) sãocompilados para serem executados em arquiteturas especí�cas. Dessa forma, executáveisgerados para uma determinada arquitetura (Intel, por exemplo) não funcionam em outrasarquiteturas (PowerPC e SPARC, por exemplo). À medida que temos diversas arquiteturase diversos sistemas que devem ser corretamente executados nessas arquiteturas, essa abor-dagem começa a se mostrar desfavorável.

A plataforma Java veio principalmente para solucionar esse tipo de problema. Diz-se entãoque a linguagem Java é portável, já que seus executáveis podem ser executados em qualquerarquitetura, desde que haja uma JVM para ela. De forma simpli�cada, essa portabilidadeé obtida da seguinte forma:

1. o desenvolvedor escreve (edita) o código-fonte de um sistema na linguagem Java;

2. ao �nal da fase de desenvolvimento, o código-fonte é compilado, uma única vez, gerando-se um código intermediário chamado de bytecode. Esse bytecode não depende da ar-quitetura da máquina física. Isso porque a máquina física não executa diretamente essecódigo intermediário;

Página 17 de 51www.handbookdeti.com.br

Page 19: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

3. uma JVM, que pode estar instalada sobre qualquer arquitetura física, interpreta e exe-cuta o código intermediário (bytecode) quantas vezes forem as vezes em que o sistemafor executado.

Perceba que com o Java não há mais dependência entre código-fonte e arquitetura física,mas passamos a ter dependência entre JVM e arquitetura física. Ou seja, foi adicionadauma camada (a JVM) para se obter a tão desejada portabilidade.

Neste ponto, podemos concluir que os itens I, II e IV são errados e o item III é correto.Portanto, a alternativa a ser marcada é a letra E.

Note que os itens I, II e IV só são errados por conta de trocas de palavras. Uma leituradesatenta provavelmente comprometeria esta questão. Vejamos:

• o item I estaria correto se a palavra �Bytecode� fosse substituída por �fonte�;

• o item II estaria correto se a palavra �fonte� fosse substituída por �Bytecode�;

• o item IV estaria correto se as palavras �interpretação� e �compilação� fossem invertidas.

Página 18 de 51www.handbookdeti.com.br

Page 20: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

8. Assuntos relacionados: Servidor de Aplicações, Java, J2EE,Máquina Virtual Java (JVM),Heap,Banca: CesgranrioInstituição: BNDESCargo: Analista de Sistemas - SuporteAno: 2008Questão: 31

Um servidor Linux, que roda, exclusivamente, um servidor de aplicação Java EE, possui 2GB de memória RAM e 1 CPU. A única aplicação em execução atinge, em momentos depico, 50 usuários simultâneos. Para que essa aplicação tenha um desempenho adequado, otamanho máximo da Heap da JVM pode ser con�gurado para

(a). 100 threads.

(b). 32 MB.

(c). 60 threads.

(d). 2 GB.

(e). 512 MB.

Solução:

O Java EE (Enterprise Edition) é uma plataforma de desenvolvimento de sistemas em Java.A plataforma inicialmente era conhecida por Java 2 Platform Enterprise Edition (J2EE),até ter seu nome trocado para Java EE, o que ocorreu na versão 5.

A plataforma JEE oferece uma série de componentes e funcionalidades que permitem aimplementação de software Java distribuído. Uma descrição sucinta da destinação e dascaracterísticas gerais da plataforma JEE pode ser encontrada na Wikipedia:

A Plataforma Java (Enterprise Edition) difere-se da Plataforma Java Standard Edition(Java SE) pela adição de bibliotecas que fornecem funcionalidade para implementar softwareJava distribuído, tolerante a falhas e multi-camada, baseada amplamente em componentesmodulares executando em um servidor de aplicações. Ela é voltada para aplicações multi-camadas, baseadas em componentes que são executados em um servidor de aplicações... Elacontém bibliotecas desenvolvidas para o acesso a base de dados, RPC, CORBA, etc. Devidoa essas características a plataforma é utilizada principalmente para o desenvolvimento deaplicações corporativas.

Os servidores de aplicação mencionados na descrição acima, em linhas gerais, são softwaresque provêem um ambiente onde as aplicações podem executar.

Uma aplicação Java usualmente é dividida em 2 partes: uma parte que executa no cli-ente e uma outra parte que executa no servidor. O servidor em si é dividido em diferentescontainers que oferecem diferentes serviços às aplicações. Entre os serviços mais comunsoferecidos pelos containers estão a execução da lógica de negócio, serviços de mensagens,serviços de gerenciamento de conexões a bancos de dados, serviços de segurança etc.

Entendido o conceito de servidores de aplicação, agora vamos falar um pouco sobre JVM(Java Virtual Machines).

Página 19 de 51www.handbookdeti.com.br

Page 21: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Quando um código Java é compilado, ele dá origem a um programa codi�cado nos cha-mados bytecodes. Os bytecodes são uma espécie de código intermediário, que só pode serexecutado por uma JVM. Uma JVM, por sua vez, é um programa que converte os bytecodesem código executável de máquina, que pode então ser executado pela máquina física.

Em última instância, são os conceitos de bytecodes que garantem a portabilidade dos códigosJava. Independente do sistema operacional ou plataforma física onde tenha sido desenvol-vido o programa Java, os bytecodes sempre serão os mesmos. Com isso, para executar oprograma Java em outro sistema, basta que se tenha uma JVM especí�ca, capaz de conver-ter os bytecodes para o código de máquina apropriado.

Agora, vamos ao que realmente interessa para alcançarmos a resposta da questão.

A heap da JVM é uma área de memória onde todos os objetos das aplicações que estãosendo executadas pela JVM residem. Além dos objetos criados nas aplicações, a heap aindapossui uma área de memória reservada para outras funções da JVM. Portanto, para que asaplicações executem com desempenho adequado, é necessário con�gurar bem o tamanho daheap.

As alternativas A e C estão erradas, simplesmente, porque o tamanho da heap não é de�nidoem termos do número de threads, mas sim em termos de quantidade de memória. Já a alte-rativa D está errada pois não faz sentido alocar toda a memória do sistema (no caso, 2GB)exclusivamente para a JVM. O sistema operacional sequer irá permitir a realização destaoperação, visto que boa parte da memória já estará sendo utilizada pelo próprio sistemaoperacional.

Com isto, nos restam as alternativas B (32 MB) e D (512 MB). O enunciado da ques-tão diz que o servidor possui 1 CPU, e que, em momentos de pico, a aplicação em execuçãoatinge 50 usuários simultâneos. O fato de o servidor possuir apenas 1 CPU implica dizerque, em momentos de alta utilização da aplicação, haverá muitas trocas de contexto, ouseja, muitas alternâncias entre os processos em execução.

Em princípio, a alteração da quantidade de memória não irá afetar a quantidade de trocasde contexto, porém irá permitir que as múltiplas threads (que serão criadas para atenderuma grande quantidade usuários simultâneos) estejam sempre na memória principal, o quepode conferir maior desempenho à aplicação.

Como o enunciado não presta informações sobre o consumo de memória das threads in-dividuais que são geradas para atender cada um dos usuários simultâneos, e levando aindaem consideração que o tamanho default da heap (ou seja, um tamanho que atende os requi-sitos de desempenho de uma aplicação média) da JVM varia entre 16MB a 64MB, podemosa�rmar que, para maximizar o desempenho da aplicação, o ideal seria con�gurar o tamanhomáximo da heap para 512MB.

Portanto, a resposta da questão é a alternativa E.

Página 20 de 51www.handbookdeti.com.br

Page 22: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

9. Assuntos relacionados: Java, Sobrecarga de Método, Sobrescrita de Método,Banca: CesgranrioInstituição: BR DistribuidoraCargo: Analista de Sistemas - DesenvolvimentoAno: 2008Questão: 47

Em um sistema desenvolvido na linguagem de programação Java, suponha a existência deuma classe Pessoa que possui um método chamado getIdenti�cador que: é público, nãorecebe nenhum argumento, retorna um inteiro e declara que não levanta exceções. Suponhaainda a existência de uma classe Cliente que herda da classe Pessoa e possui um métodochamado getIdenti�cador que é público, não recebe nenhum argumento e declara que levantaa exceção java.lang.Exception. Essa situação é um exemplo de

(a). Sobrecarga de método (overload) sem erros, pois os métodos têm o mesmo nome.

(b). Sobrescrita de método (overriding) sem erros, pois o método da classe Clientesubstitui o método da classe Pessoa.

(c). Avaliação preguiçosa (late binding) sem erros, pois o método correto a ser chamadoserá de�nido em tempo de execução.

(d). Método virtual sem erros, pois o método getIdenti�cador da classe Cliente foide�nido viabilizando sua reescrita.

(e). Erro, pois o método getIdenti�cador da classe Cliente não pode declarar que le-vanta a exceção java.lang.Exception, segundo a de�nição do método getIdenti�ca-dor na classe Pessoa.

Solução:

Métodos em Java podem ser sobrecarregados (overloading) e sobrescritos (overriding).

Métodos são sobrecarregados quando criamos outros métodos com o mesmo nome, masdiferentes assinaturas e diferentes de�nições. Sobrecarga de métodos permite que instânciasda sua classe tenham uma interface mais simples para outros objetos e se comportem demodo diferente baseado na entrada para aquele método.

Quando você chama um método em um objeto, Java compara o nome do método e o númerode argumentos para escolher qual de�nição de método executará.

Para sobrecarregar um método, tudo que você precisa fazer é criar diferentes de�niçõesde métodos na sua classe, todas com o mesmo nome, mas com diferentes listas de parâme-tros (ou em número ou tipo dos argumentos) e com diferentes corpos.

Note que Java diferencia métodos sobrecarregados com o mesmo nome, baseado sobre onúmero e tipos dos parâmetros para aquele método, e não sobre o tipo de retorno. Isto é,se você tentar criar dois métodos com o mesmo nome, mesma lista de parâmetros, mas comdiferentes tipos de retornos, você obterá um erro de compilação.

Aqui está um exemplo de como sobrecarregar um método. A classe MeuRetangulo tem4 variáveis para de�nir o canto superior esquerdo e o inferior direito do retângulo: x1, y1,x2 e y2.

Página 21 de 51www.handbookdeti.com.br

Page 23: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Class MeuRetangulo {

int x1 = 0;

int x2 = 0;

int y1 = 0;

int y2 = 0;

}

De�nimos o método constroiRetangulo que possui 4 argumentos inteiros e ajusta o tamanhodo retângulo de acordo com os valores dos cantos, retornando o objeto retângulo resultante.

MeuRetangulo constroiRetangulo (int cx1, int cy1, int cx2, int cy2) {

x1 = cx1;

y1 = cy1;

x2 = cx2;

y2 = cy2;

return this;

}

Agora, iremos sobrecarregar o método acima alterando a lista de parâmetros, passando doisobjetos da classe Ponto:

MeuRetangulo constroiRetangulo (Ponto superiorEsquerdo, Ponto inferiorDireito) {

x1 = superiorEsquerdo.x;

y1 = superiorEsquerdo.y;

x2 = inferiorDireito.x;

y2 = inferiorDireito.y;

return this;

}

Uma vez que a sobrecarga ocorre entre métodos de�nidos na mesma classe, podemos elimi-nar a alternativa A, pois o problema em questão está ligado ao polimor�smo que a herançapermite (várias classes implementando o mesmo método).

Por outro lado, sobrescrever (overriding) métodos envolve a de�nição de um método emuma subclasse que tem a mesma assinatura que um método na superclasse. Então, quandoum método é chamado, o método na subclasse é encontrado e executado em vez de serexecutado aquele da superclasse.

Para sobrescrever um método, tudo que você precisar fazer é criar um método em suasubclasse que tem a mesma assinatura (nome, tipo de retorno, e lista de argumentos) queum método de�nido por uma de suas superclasses. Além disso: o nível de acesso não podeser mais restritivo que o do método da superclasse; o método não pode lançar exceções (ex-ceto de Runtime) novas ou mais abrangentes que as declaradas no método da superclasse,porém pode lançar exceções mais especí�cas ou lançar menos exceções. Uma vez que Javaexecuta a primeira de�nição de método que encontra com a mesma assinatura, ele efetiva-mente oculta a de�nição do método original.

Aqui está um exemplo de como sobrescrever um método. A classe Impressao possui ométodo imprime (), o qual apenas imprime o nome da classe.

Página 22 de 51www.handbookdeti.com.br

Page 24: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Class Impressao {

void imprime () {

System.out.println (``Impressao'');

}

}

Agora, vamos criar uma segunda classe, Impressao2, que tem Impressao como superclasse esobrescreve o método imprime () (a diferença está no nome a ser impresso).

Class Impressao2 extends Impressao {

void imprime () {

System.out.println (``Impressao2'');

}

}

Observe que, se eu tiver um programa com objetos das classes Impressao e Impressao2,terei duas implementações diferentes do método imprime (). A chamada a.imprime () estáchamando um desses dois métodos, dependendo da classe do objeto �a�. Achar o métodocorreto a ser chamado para um objeto particular chama-se dynamic binding (late binding),ou amarração dinâmica. Isto é, temos que amarrar a chamada a.imprime () a uma dasimplementações de imprime () dinamicamente, em tempo de execução (e não em tempo decompilação, o que se chamaria static binding).

Como vimos acima, a sobrescrita de um método não pode lançar exceções novas, pois obte-remos erro em tempo de compilação. Portanto, a alternativa E é a correta.

Página 23 de 51www.handbookdeti.com.br

Page 25: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

10. Assuntos relacionados: Linguagens de Programação, Java,Banca: FCCInstituição: TCE/CECargo: Analista de Controle Externo - Auditoria de Tecnologia da InformaçãoAno: 2008Questão: 80

Recurso Java que permite que uma thread invoque um método em um objeto remoto (se-melhante à RPC) denomina-se

(a). RMI.

(b). getPriority().

(c). matcher.

(d). FocusRequester.

(e). RemoteException.

Solução:

A resposta da questão é a alternativa A. O RMI (Remote Method Invocation) é uma dasabordagens da tecnologia Java para prover as funcionalidades de uma plataforma de objetosdistribuídos. O RMI faz parte do núcleo básico do Java desde a versão 1.1, com a sua APIsendo especi�cada no pacote java.rmi e seus subpacotes.

Através da utilização do RMI, é possível que um objeto ativo em uma máquina virtualJava possa interagir com objetos de outras máquinas virtuais Java, independentemente dalocalização dessas máquinas virtuais.

No desenvolvimento de uma aplicação cliente-servidor usando Java RMI, como para qual-quer plataforma de objetos distribuídos, é essencial que seja de�nida a interface de serviçosque serão oferecidos pelo objeto servidor. Os serviços especi�cados pela interface RMI de-verão ser implementados através de uma classe Java.

O funcionamento típico de uma aplicação que usa RMI é o seguinte: uma aplicação clienteinvoca um método de um objeto no servidor. Os parâmetros são serializados e enviados pelarede para o servidor. No servidor, os dados são deserializados, e a computação é realizada.por �m, os resultados são novamente serializados e enviados de volta ao cliente.

Página 24 de 51www.handbookdeti.com.br

Page 26: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

11. Assuntos relacionados: Algoritmos, Linguagens de Programação, Java,Banca: ESAFInstituição: Secretaria do Tesouro Nacional (STN)Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento deSistemas de InformaçãoAno: 2008Questão: 25

Considere o seguinte fragmento de código, para o método run() de uma determinada linhade execução (thread), em Java.

1. try{

2. sleep(1000);

3. } catch (InterruptedException ie){}

Se considerarmos que a linha de execução não é interrompida, é correto a�rmar que

(a). o código não compila.

(b). a linha de execução entra em estado �Pronto�, após 1000 milissegundos.

(c). a linha de execução entra em estado �Pronto�, em exatamente 1000 milissegundos.

(d). a linha de execução entra em estado �Pronto�, em pelo menos 1000 milissegundos.

(e). o código compila, mas não executa, lançando uma exceção do tipo ThreadExcep-tion.

Solução:

Já que o enunciado referencia um bloco de código, uma boa forma de compreender essaquestão é através de um código que implemente o bloco correspondente em conjunto com ainfraestrutura necessária para compilação e execução. Considere, portanto, o código abaixo.import java.lang.Thread;

class Foo extends Thread {

public void run() {

try {

sleep(1000);

} catch (InterruptedException ie){}

System.out.println("Hello World!");

}

}

public class ThreadedHello {

public static void main(String[] args) {

Foo foo;

foo = new Foo();

foo.run();

}

}

É possível perceber que o bloco de código acima contém, em sua totalidade, o bloco decódigo a ser analisado na questão. Ora, se salvarmos esse código em um arquivo Threa-dedHello.java e tentarmos compilá-lo, o compilador Java o compilará sem problemas, visto

Página 25 de 51www.handbookdeti.com.br

Page 27: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

que não há erro sintático ou semântico no código. O que invalida a solução referenciada pelaopção a.

Após a compilação do bloco de código, também é possível executá-lo. O exemplo abaixoexibe a chamada ao programa compilado e a saída por ele gerada:

$ time java ThreadedHello

Hello World!

real 0m1.131s

A correta execução desse programa invalida, portanto, a opção e, já que não houve qual-quer exceção levantada e o programa exibiu a saída correta (�Hello World�, neste caso). Noexemplo acima, o comando �time� exibe os tempos de execução de um programa e optou-sepor exibir apenas o tempo real de execução, de 1,131 segundos.

Resta-nos, portanto, as opções b, c e d. Para isso, a melhor fonte é a referência da lin-guagem Java, que diz que o método sleep da classe Thread �causa a suspensão temporáriada thread em execução pelo número de milisegundos especi�cado� pelo argumento passadopara o método. Disso decorre que, terminado o tempo de suspensão, a thread retornará aoestado Pronto em 1000 milissegundos. O problema com as opções c e d são os quali�cadoresadicionados a este tempo. Por depender da precisão do timer do computador que executaráesse bloco de código e do escalonador de processos, é impossível garantir que a mudançapara o estado Pronto ocorrerá em exatamente 1000 milisegundos, invalidando a alternativac. De forma semelhante, a precisão do timer ou o escalonador podem fazer com que o tempode suspensão da thread seja menor que 1000 milisegundos, invalidando a alternativa d.

De modo geral, como não há garantias dadas pelo método sleep, é melhor selecionar a opçãoque responde a pergunta sem restrições adicionais. No caso, a alternativa b é a correta.

Página 26 de 51www.handbookdeti.com.br

Page 28: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

12. Assuntos relacionados: Teste de Mesa, Java,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questão: 65

public class Ponto {

private int x;

private int y;

public Ponto(int x, int y) {

setCoordenadas(x,y);

}

public void setCoordenadas(int x, int y) {

this.x = x;

this.y = y;

}

public String toString() {

return "(" + x + "," + y + ")";

}

public static void main(String[] args) {

int a = 1;

int b = 2;

int c = 3;

int d = 4;

Ponto p = new Ponto(a,b);

Ponto q = new Ponto(c,d);

Ponto r = p;

c = 5;

p.setCoordenadas(c,d);

System.out.print(p);

System.out.print(q);

System.out.print(r);

r.setCoordenadas(a,b);

a = b;

q.setCoordenadas(b,c);

System.out.print(p);

System.out.print(q);

System.out.println(r);

}

}

Qual será a saída da execução da classe Java acima?

(a). (5,4)(3,4)(5,4)(1,2)(2,5)(1,2)

(b). (5,4)(3,4)(1,2)(5,4)(2,5)(1,2)

(c). (5,4)(5,4)(5,4)(2,2)(2,5)(2,2)

Página 27 de 51www.handbookdeti.com.br

Page 29: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

(d). (3,4)(3,4)(5,4)(2,5)(2,5)(1,2)

(e). (3,4)(3,4)(5,4)(2,2)(2,5)(2,2)

Solução:

A seguir, o passo a passo da execução da classe em questão. Na verdade, serão abordadosos principais pontos da execução.

• após a execução da 5a linha (Ponto p = new Ponto(a,b);), teremos o seguinte cenário:a=1; b=2; c=3; d=4; p.x=1; p.y=2;

• após a execução da 6a linha (Ponto q = new Ponto(c,d);), teremos o seguinte cenário:a=1; b=2; c=3; d=4; p.x=1; p.y=2; q.x=3; q.y=4;

• após a execução da 7a linha (Ponto r = p;), teremos o seguinte cenário:a=1; b=2; c=3; d=4; p.x=1; p.y=2; q.x=3; q.y=4; r <-> p

Perceba que não foi criado um objeto que seria atribuído à variável r. Na execução dessaúltima linha, a variável r foi atribuída ao objeto já existente p. Ou seja, a partir deste ponto,em qualquer referência às variáveis r e p serão utilizadas as propriedades do mesmo objeto.

• após a execução da 9a linha (p.setCoordenadas(c,d);), teremos o seguinte cenário:a=1; b=2; c=5; d=4; p.x=5; p.y=4; q.x=3; q.y=4; r <-> p

• após as execuções das linhas de número 10, 11 e 12 (System.out.print(p); System.out.print(q);System.out.print(r);), teremos a seguinte saída:(5,4)(3,4)(5,4)

• após a execução da 13a linha (r.setCoordenadas(a,b);), teremos o seguinte cenário:a=1; b=2; c=5; d=4; p.x=1; p.y=2; q.x=3; q.y=4; r <-> p

• após a execução da 14a linha (a = b;), teremos o seguinte cenário:a=2; b=2; c=5; d=4; p.x=1; p.y=2; q.x=3; q.y=4; r <-> p

• após a execução da 15a linha (q.setCoordenadas(b,c);), teremos o seguinte cenário:a=2; b=2; c=5; d=4; p.x=1; p.y=2; q.x=2; q.y=5; r <-> p

• após as execuções das linhas de número 16, 17 e 18 (System.out.print(p); System.out.print(q);System.out.println(r);), teremos a seguinte saída:(5,4)(3,4)(5,4)(1,2)(2,5)(1,2)

Página 28 de 51www.handbookdeti.com.br

Page 30: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

13. Assuntos relacionados: Java, UML, Diagrama de Classes,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questão: 63

public class Produto {

private Fabricante mFabricante;

public Produto () {

}

public Fabricante getFabricante () {

return mFabricante;

}

public void setFabricante (Fabricante val) {

this.mFabricante = val;

}

}

import java.util.ArrayList;

public class Fabricante {

private ArrayList<Produto> mProduto;

public Fabricante () {

}

public ArrayList<Produto> getProduto () {

return mProduto;

}

public void setProduto (ArrayList<Produto> val) {

this.mProduto = val;

}

}

Assinale o diagrama de classe que expressa corretamente a implementação mostrada acima,em Java, das classes Produto e Fabricante, bem como da associação entre as mesmas.

(a). Diagrama 1

(b). Diagrama 2

(c). Diagrama 3

(d). Diagrama 4

(e). Diagrama 5

Página 29 de 51www.handbookdeti.com.br

Page 31: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Solução:

Lembre-se que diagramas de classe nos permitem identi�car tanto o conteúdo de uma classequanto o relacionamento entre várias classes. Em um diagrama de classes podemos mostraras variáveis e métodos membros de uma classe. Podemos também mostrar se uma classeherda de outra, ou se mantém uma referência para outra. Em suma, podemos descrever todasas dependências do código-fonte entre classes. Para resolvermos esta questão precisamossaber:

1. associações entre classes muito frequentemente representam instâncias de variáveis quemantêm referência para outros objetos;

2. a direção da �echa nos informa que a classe mantém referência para outra classe;

3. o número próximo à cabeça da seta nos informa quantas referências são mantidas;

4. quando existem muitas conexões representamos por estrela (*). Em Java, isso é comu-mente implementado com um Vetor ou uma Lista.

De posse desse conhecimento, estamos aptos a revolver a presente questão.

Inicialmente, analisemos a declaração da classe Produto. Observe que nela é declaradoum membro privado do tipo Fabricante. Em outras palavras, a classe Produto mantém umaúnica referência para classe Fabricante. Portanto, na associação existente entre Produto eFabricante deve existir uma �echa apontando para a classe Fabricante com o valor numérico1 (um) em sua ponta.

Agora, analisemos a declaração da classe Fabricante. Observe que nela é declarado umvetor (ArrayList) privado do tipo Produto, em outras palavras, a classe Fabricante mantémmuitas referências para classe Produto. Portanto, na associação existente entre Fabricantee Fabricante também deve existir uma �echa apontando para a classe Produto com um as-terisco (*) em sua ponta.

Concluímos, então, que a reposta correta é a letra D.

Página 30 de 51www.handbookdeti.com.br

Page 32: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

14. Assuntos relacionados: Java,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questão: 64

Considere o trecho de código a seguir.

if (x != x + 0) {

System.out.println("Condição satisfeita.");

}

Se x for da classe String e tiver sido inicializado, esse trecho de código Java

(a). imprimirá a mensagem, apenas se x não for �0�.

(b). imprimirá a mensagem, apenas se x não tiver sido inicializado com null.

(c). imprimirá a mensagem, independente do valor de x.

(d). gerará um erro de compilação.

(e). compilará, mas nunca imprimirá a mensagem.

Solução:

Para resolvermos a referida questão é preciso saber que, em Java, o operador de adição (�+�)tem precedência maior que os operadores relacionais de (des)igualdade (�!=� e �==�). Alémdisso, o operador �+� pode ser utilizado também para a concatenação de strings, que é ocaso da nossa questão. Pronto, agora nós já temos condições de resolver a questão.

Pelo enunciado, extraímos que x é uma string inicializada, isto é, uma string de tama-nho N, onde N pode ser maior do que 0 (zero), se x possuir algum conteúdo, ou N pode serigual a 0 (zero), se x for nula.

Independentemente do conteúdo de x, o lado direito do operador �!=� produzirá uma stringcom o tamanho N + 1. Isto é, a string concatenada possuirá tamanho, e obviamente, con-teúdo, diferente da original (x), o que sempre satisfará a condição de desigualdade existenteno if. Logo, esse trecho de código imprimirá a mensagem, independente do valor de x.(alternativa C).

Página 31 de 51www.handbookdeti.com.br

Page 33: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

15. Assuntos relacionados: Linguagens de Programação, Java,Banca: CesgranrioInstituição: PetrobrasCargo: Analista de Sistemas - InfraestruturaAno: 2008Questão: 62

Considere o programa em Java abaixo.

import java.io.*;

class ClassX

{

private int size;

private int[] arrayX;

private int x;

public ClassX(int s)

{

size = s;

arrayX = new int[s];

x = -1;

}

public void Met1(int p)

{ arrayX[++x] = p; }

public int Met2()

{ return arrayX[x��]; }

public int Met3()

{ return arrayX[x]; }

public boolean Met4()

{ return (x == -1); }

}

class Algoritmo {

static int theN;

static int theA;

static ClassX theS;

public static void main(String[] args) throws IOException {

System.out.print(�Forneça um valor: �);

theN = getInt();

MetX();

System.out.print(�Resultado : � + theA);

}

public static int getInt() throws IOException {

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String s = br.readLine();

return Integer.parseInt(s);

}

public static void MetX(){

Página 32 de 51www.handbookdeti.com.br

Page 34: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

theS = new ClassX(1000);

theA = 0;

while (theN > 0){

theS.Met1(theN);

��theN;

}

while (!theS.Met4()){

int newN = theS.Met2();

theA += newN;

}

}

}

Se o programa for executado recebendo como parâmetro o valor 4, em �Forneça um valor:�, o valor armazenado na variável �theA� e apresentado em �System.out.print(�Resultado : �+ theA);� será

(a). 10

(b). 12

(c). 14

(d). 16

(e). 18

Solução:

O programa Java acima possui duas classes (ClassX e Algoritmo). A classe ClassX tem trêsatributos (size, arrayX e x ), que usam o operador de acesso private. A variável size e x sãodo tipo inteiro e a variável arrayX é um vetor do tipo inteiro. Além disso, a classe ClassXpossui 4 métodos que são:

• public void Met1(int p): este método atribui o valor do parâmetro p na posição xdo arrayX. A variável x é incrementada a cada chamada do método Met1();

• public int Met2(): este método retorna o valor da posição x do arrayX. A variável xé decrementada a cada chamada do método Met2();

• public int Met3(): método de�nido mas não utilizado;

• public boolean Met4(): veri�ca se o atributo x da classe ClassX é igual a -1.

A classe Algoritmo tem três atributos (theN, theA e theS ) que usam o operador de acessostatic. A variável theN e theA são do tipo inteiro e a variável theS é do tipo da classe ClassX.Além disso, a classe ClassX possui 3 métodos que são:

• public static int getInt(): este método retorna um valor inteiro lido do teclado;

• public static void MetX(): este método possui dois laços de repetição. Um laço fazatribuições ao vetor arrayX do objeto theS da classe ClassX. Os valores atribuídos aoarrayX são passados um por um como parâmetro para o método Met1(). O segundolaço faz um somatório dos valores atribuídos ao vetor arrayX do objeto theS da classeClassX. Além disso, inicializa a variável theA com o valor 0;

• public static void main(String[] args): o método main não opera sobre quaisquerobjetos. Na verdade, quando um programa se inicia, não há qualquer objeto ainda. Ométodo main estático é executado e constrói os objetos de que o programa precisa.

Página 33 de 51www.handbookdeti.com.br

Page 35: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

O construtor da classe ClassX inicializa seus atributos com os seguintes valores:

• size: recebe o valor passado como parâmetro para o construtor (neste programa, quandoo construtor é chamado, é passado o valor 1000 como parâmetro);

• arrayX = new int[s] : o vetor é instanciado e seu tamanho é de�nido pelo parâmetropassado para o construtor (neste caso, o valor 1000);

• x = -1 : o atributo x é inicializado com o valor -1.

Como pode ser observado, as variáveis e os métodos da classe Algoritmo estão de�nidos comostatic. A seguir vamos dar uma breve descrição sobre o operador static. Quando se de�neum atributo como static, isso implica que só haverá um atributo para todos os objetos daclasse. Em contraste com atributos não static, cada objeto tem sua própria cópia de todosos atributos de instâncias. Ou seja, o atributo é compartilhado entre todas as instâncias daclasse. Além disso, mesmo se não houver qualquer objeto da classe, o atributo estático estápresente. Ele pertence à classe, não a qualquer objeto individual.

Ao executar o programa, o método main é chamado e nele é executado a linha de co-mando theN = getInt(). Como enunciado, o método retorna o valor digitado e é atribuídoo valor 4 a variável theN.

Depois é chamado a método MetX(), que executa dois laços de repetição como descritoacima.

• O primeiro laço executado pelo métodoMetX() atualiza os atributos da seguinte forma:

� arrayX[0] = 4, x = 0 e theN = 4;

� arrayX[1] = 3, x = 1 e theN = 3;

� arrayX[2] = 2, x = 2 e theN = 2;

� arrayX[3] = 1, x = 3 e theN = 1;

� theN = 0;

• O segundo laço executado pelo método MetX() atualiza os atributos da seguinte forma:

� theA = 1;

� theA = 3;

� theA = 6;

� theA = 10.

Concluindo, o valor apresentado em �System.out.print(�Resultado : � + theA)� será 10.Portanto, a alternativa A está correta.

Página 34 de 51www.handbookdeti.com.br

Page 36: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

16. Assuntos relacionados: Linguagens de Programação, Java,Banca: ESAFInstituição: Controladoria-Geral da União (CGU)Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento deSistemas de InformaçãoAno: 2008Questão: 23

Com relação à linguagem de programação Java, é correto a�rmar que

(a). o operador instanceof é utilizado para chamar o método construtor de uma classee criar um novo objeto.

(b). são tipos primitivos de dados: boolean, byte, short, char, int, long, string, �oat edouble.

(c). o tipo de dado int suporta apenas números de - 32.768 a 32.767.

(d). a instrução do-while não faz parte das instruções de controle de �uxo da linguagem.

(e). os valores booleanos não podem ser usados em uma operação de casting.

Solução:

(A) ERRADA

O operador instanceof determina se um tipo particular de objeto é de uma determinadaclasse, ou seja, o instanceof compara um objeto para um tipo (classe) especi�cado. Vocêpode usá-lo para testar se um objeto é uma instância de uma classe ou uma instância deuma subclasse, ou uma instância de uma classe que implementa uma interface especí�ca.

O operador veri�ca se uma referência de objeto é uma instância de um tipo, e retornaum valor booleano. A forma geral de uso do operador é: <objeto> instanceof <classe>,que retornará verdadeiro para os objetos instanciados a partir da classe avaliada. Note queinstanceof sempre retornará falso se <objeto> é nulo.

(B) ERRADA

Java é uma linguagem fortemente tipada. Isso signi�ca que toda variável deve ter umtipo declarado. Existem oito tipos primitivos em Java. Quatro deles são tipos de númerosinteiros, dois são tipos números de ponto �utuante, um tipo boolean (intervalo de valores0 ou 1) e um é o tipo de caracteres char, usado para unidades de código no esquema decodi�cação Unicode.

Os tipos de números inteiros servem para números sem parte fracionaria, sendo permitidovalores negativos. O Java fornece os quatro tipos de números inteiros a seguir:

Tipo Armazenamento Necessário Intervalo de Valoresint 4 bytes -2,147,483,648 a 2,147,483,647short 2 bytes 32,768 a 32, 767long 8 bytes -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807byte 1 byte -128 a 127

Os tipos �utuantes representam números com parte fracionária. Os dois tipos de ponto�utuante são mostrados a seguir:

Página 35 de 51www.handbookdeti.com.br

Page 37: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Tipo Armazenamento Necessário Intervalo de Valores�oat 4 bytes +/-3.4E-38 a +/- 3.4E+38double 8 bytes +/-1.7E-308 a +/-1.7E+308

O tipo char representa todo o conjunto de caracteres de�nidos no código de caracter Uni-code que é usado para de�nir a extensão das possibilidades de caracteres alfanuméricos esímbolos. O código UNICODE de�ne que cada caractere tenha 2 bytes.

O tipo primitivo booleano é o tipo de dados mais simples da linguagem Java. Ele pos-sui apenas dois valores, um correspondente a verdadeiro e outro a falso. O tipo boolean étipicamente usado como resultado de expressões condicionais como variáveis identi�cadorasde estado.

(C) ERRADA

Como pode ser observado na tabela que apresenta os tipos de números inteiros acima, ointervalo que o tipo de números inteiro pode assumir é -2,147,483,648 a 2,147,483,647.

(D) ERRADA

Java suporta comandos condicionais como seleção e laços para determinar o controle do�uxo do programa. Java de�ne os comandos de seleção (condicionais) if-else e switch, alémdesse, a linguagem Java determina comandos de repetição (laços ou loop) que são: while,for e do-while. Estas estruturas de controle utilizam os símbolos delimitadores (chaves)como limite de sua operação. Por exemplo:

Seleção Seleção Repetição Repetição Repetiçãoif(<condição>) switch (<opção>) for( <condição>) while(<condição>) do{ { { { {<comando1> case <const1|var1> : <comando1> <comando1> <comando1><comandon> case <const2|var2> : <comandon> <comandon> <comandon>} } } } }else while(<condição>);{<comando1><comandon>}

As chaves são utilizadas quando existe a necessidade de aplicar os comandos de controlesobre vários comandos. Quando são aplicados a apenas um comando o uso das chaves nãoé obrigatória.

(E) CORRETA

A operação de casting é responsável por fazer a conversão de um tipo de dado em outro.Existem regras para esse tipo de conversão de tipo, pois podem causar perda de informa-ções. A operação casting em Java entre tipos primitivos permite converter o valor de umtipo para outro tipo primitivo. Mais comumente ocorre com os tipos numéricos, e existe umtipo primitivo boolean que não pode ser usado em uma operação de casting, pois os valoresdeste tipo só podem ser verdadeiro ou falso.

Página 36 de 51www.handbookdeti.com.br

Page 38: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Embora o conceito de conversão seja razoavelmente simples, o uso é complicado pelo fatode que Java tem oito tipos primitivos e vários tipos de objeto. Há três formas de casting nalinguagem Java:

• Casting entre tipos primitivos, como por exemplo: int para �oat ou para double;

• Casting de uma instância de uma classe para uma instância de outra classe;

• Casting tipos primitivos para objetos.

Como apresentado, realmente o tipo primitivo boolean da linguagem Java não pode ser umdos operandos da operação de casting, fazendo a assertiva E como correta.

Página 37 de 51www.handbookdeti.com.br

Page 39: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

17. Assuntos relacionados: Programação, Java, Garbage Collection,Banca: ESAFInstituição: Secretaria do Tesouro Nacional (STN)Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento deSistemas de InformaçãoAno: 2008Questão: 21

O que fazer para forçar a coleta de lixo de um objeto, em Java? Indique a opção correta.

(a). Invocar �nalize().

(b). Remover todas as referências ao objeto.

(c). Invocar Runtime.gc().

(d). Invocar System.gc().

(e). A coleta de lixo não pode ser forçada.

Solução:

No Java, ao contrário de algumas linguagens como o C, não é necessário que o programadorse preocupe com a vida de um objeto, se responsabilizando em liberar espaços de memóriaantes que ela esgote. O mecanismo de coleta de lixo (garbage collection) do Java faz umavarredura periódica em busca de posições de memória não mais referenciadas e realiza aliberação das mesmas.

A alternativa A cita o método �nalize(). Esse método é equivalente ao método destru-tor de C++ e não é responsável em forçar a coleta de lixo. Ele é chamado diretamente pelocoletor de lixo logo antes que o objeto seja destruído. É útil quando precisamos liberar al-guns recursos anteriormente à efetivação da eliminação. Por exemplo, se precisarmos fecharuma conexão antes da destruição do objeto, isso será possível de�nindo o método �nalize()de tal maneira que realize a tarefa de fechar a conexão.

Removendo todas as referências do objeto, possibilitaremos que ele seja destruído pelo co-letor de lixo, mas essa destruição ocorrerá em algum ponto especí�co de sua execução, queé iniciada ao �bel-prazer� da JVM (Java Virtual Machine). Quando a JVM decidir que éhora de executá-lo, ele será executado, pois deve ser usado com inteligência devido aos altosrecursos computacionais que são exigidos.

Não é possível forçar a execução do coletor de lixo via programação no Java. Os méto-dos indicados nas alternativas (C) e (D) apenas noti�cam à JVM que a aplicação gostariaque o coletor de lixo fosse executado, mas não garantem que ele realmente será executadoimediatamente.

Dado o exposto, sabemos que a execução do coletor de lixo não pode ser forçada e, portanto,a alternativa correta é a alternativa (E).

Página 38 de 51www.handbookdeti.com.br

Page 40: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

18. Assuntos relacionados: Linguagens de Programação, Java, Pacotes Java, Interface comUsuário,Banca: ESAFInstituição: Controladoria-Geral da União (CGU)Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento deSistemas de InformaçãoAno: 2008Questão: 24

A linguagem Java possui uma API (Application Program Interface) que disponibiliza paco-tes 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, incluindotratamento de grá�cos e imagens, é denominado

(a). java.util.

(b). java.applet.

(c). java.graphic.

(d). java.image.

(e). java.awt.

Solução:

(A) INCORRETA

O pacote java.util provê classes que tratam de coleções, eventos, data e hora, internaci-onalização, e classes de utilidade: um tokenizador, um gerador de números aleatórios e umvetor de bits, não tendo qualquer relação com interfaces grá�cas.

(B) INCORRETA

O pacote java.applet, da distribuição padrão do Java, é usado para a criação de appletsJava. Um applet Java é uma aplicação fornecida aos usuários em formato de bytecode Javae são normalmente executados em navegadores com o intuito de prover interatividade aaplicações web. Os applets Java são normalmente escritos na linguagem Java, mas nada osimpede de serem escritos em linguagens que possuam compiladores para bytecode da JavaVirtual Machine (JVM), como Jython, Ruby ou Ei�el.

Um exemplo de código de applet Java é exibido abaixo:

import java.applet.Applet;

import java.awt.*;

public class HelloWorld extends Applet {

public void init() { }

public void stop() { }

public void paint(Graphics g) {

g.drawString("Hello, world!", 20,10);

}

}

Sendo salvo como HelloWorld.java e compilado, o seguinte trecho HTML é capaz de carregá-lo:

Página 39 de 51www.handbookdeti.com.br

Page 41: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

<html>

<head>

<title>Hello World</title>

</head>

<body>

<h1>Um exemplo de applet Java</h1>

<p><applet code="HelloWorld.class" width="200" height="40">

Aqui deveria aparecer o string "Hello World".</applet></p>

</body>

</html>

Após a compilação e o carregamento em um navegador, este applet exibirá a string �Hello,world!�.

Como o pacote java.applet provê uma forma para criação de applets Java e não provê,necessariamente, funcionalidade para criação de interfaces de usuário, java.applet não é aresposta correta.

(C) INCORRETA

Não existe pacote java.graphic na distribuição do J2SE e, portanto, esta alternativa estáincorreta.

(D) INCORRETA

Não existe pacote java.image na distribuição do J2SE e, portanto, esta alternativa estáincorreta.

(E) CORRETA

O pacote java.awt fornece classes para criação de interfaces de usuário e desenho de grá�cose imagens na tela. O exemplo de applet exibido acima faz uso, inclusive, do pacote awt paraexibição da string �Hello, world!� na janela do navegador. Seu resultado é exibido na Figura3 e, por tratar de interfaces grá�cas, essa é a alternativa que responde corretamente a estaquestão.

Figura 3: hello, world em applet.

Página 40 de 51www.handbookdeti.com.br

Page 42: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

19. Assuntos relacionados: Linguagens de Programação, Java, Pacotes Java,Banca: ESAFInstituição: Controladoria-Geral da União (CGU)Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento deSistemas de InformaçãoAno: 2008Questão: 26

Um dos aprimoramentos feitos na linguagem Java foi a introdução da re�exão. Com relaçãoa esse recurso, é incorreto a�rmar que

(a). a classe Method do pacote java.lang.re�ect decodi�ca informações de modi�cadorsobre classes, variáveis e métodos.

(b). o uso da re�exão se torna mais útil quando se está trabalhando com serializaçãode objeto.

(c). a classe Field do pacote java.lang.re�ect gerencia e localiza informações sobrevariáveis de classe e de instância.

(d). por meio da re�exão, um programa Java pode carregar uma classe sobre a qualele nada conhece, encontrar as variáveis, métodos e construtores dessa classe etrabalhar com eles.

(e). a re�exão é necessária com o uso de JavaBeans, em que a capacidade de um objetoconsultar outro a respeito do que ele pode fazer é útil ao se criar aplicativos maiscomplexos.

Solução:

A linguagem de programação Java surgiu de um projeto da empresa Sun Microsystems em1995 com a intenção de possibilitar a programação de qualquer equipamento eletrônico do-tado de um microprocessador. Com o slogan �Write once, run everywhere� (programe umvez, execute em qualquer lugar), buscou-se (e ainda busca-se) ilustrar um dos maiores bene-fícios desta linguagem que tem como característica marcante a possibilidade de criação decódigo portável (bytecodes).

Desde sua concepção e popularização, a Java vem evoluindo e ampliando seus recursos,ao mesmo tempo que as máquinas virtuais (JVM � Java Virtual Machine) têm se tornadomais e�cientes. Um dos aprimoramentos da linguagem foi a introdução da re�exão.

Re�exão (ou introspecção) é a capacidade de um programa investigar e avaliar caracte-rísticas sobre si mesmo. É comumente utilizada por programas que precisam examinar oumodi�car (em tempo de execução) o comportamento de aplicações que estejam executandona JVM. Desta forma, um programa Java pode carregar uma classe sobre a qual nada co-nhece, encontrar as variáveis, os métodos e os construtores dessa classe, e utilizá-los.

O pacote java.lang.re�ect da API Java proporciona classes e interfaces para se obter in-formações �re�etidas� a respeito de classes e objetos. A classe Method desse pacote, porexemplo, fornece informações sobre métodos de uma classe ou de uma interface, além depermitir o acesso dinâmico a tais métodos. Com isso, pode-se, para cada método examinado,veri�car os modi�cadores, o nome do método, o tipo de retorno, os parâmetros do método eas exceções que o método pode lançar. Semelhantemente, através da classe Field do mesmopacote, é possível obter dados e informações sobre os atributos membros da classes, como

Página 41 de 51www.handbookdeti.com.br

Page 43: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

modi�cadores, tipo e nome.

Outras técnicas e métodos de programação tiram proveito da Re�exão. A Serialização éo processo de codi�cação (e posterior decodi�cação) de objetos em um stream de bytes,comumente utilizado para tarefas de persistência, comunicação via sockets, RMI (RemoteMethod Invocation), dentre outras. Em Java, esta técnica bene�cia-se enormemente da re-�exão, pois em tempo de execução é possível inspecionar adequadamente os objetos a seremserializados. Outro exemplo é a criação de aplicativos JavaBeans, cuja API possui diversasinterfaces e classes em seu pacote java.beans. Além dessas interfaces e classes, a tecnologiafaz uso de modelos de eventos, de serialização de objetos e de re�exão. Com a re�exão �caprático examinar qualquer objeto dinamicamente para determinar (e potencialmente invo-car) seus métodos.

Analisando os itens da questão, observa-se que a primeira opção apresenta uma informaçãoincorreta ao a�rmar que �a classe Method do pacote java.lang.re�ect decodi�ca informaçõesde modi�cador sobre classes, variáveis e métodos�, quando na verdade a classe em questãofornece informações apenas sobre métodos. Informações sobre variáveis são obtidas pelaclasse Field e é através da classe Class que se obtém informações sobre as classes.

As demais a�rmações estão de acordo com a teoria exposta. Desta forma, a resposta àquestão encontra-se no item a).

Página 42 de 51www.handbookdeti.com.br

Page 44: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

20. Assuntos relacionados: Java,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questão: 60

Considere as informações a seguir para responder às questões de números 60 e61.

São mostrados a seguir os códigos fontes das classes Produto e ProdutoTest. O métodotestDescontoValido() é invocado pelo framework de testes automaticamente quando os tes-tes são executados, para exercitar o método descontoValido() da classe Produto. O métodoassertEquals gera um junit.framework.AssertionFailedError quando os valores de seus argu-mentos são diferentes entre si.

01 package br.com.exemplo.estoque;0203 public class Produto {0405 private double preco;06 private double precoMinimo;0708 public Produto(double preco, double precoMinimo) {09 this.preco = preco;10 this.precoMinimo = precoMinimo;11 }1213 public boolean descontoValido(int percentual) {14 double precoComDesconto;15 precoComDesconto = this.preco - this.preco * percentual / 100;16 return (precoComDesconto >= this.precoMinimo);17 }18 }

Página 43 de 51www.handbookdeti.com.br

Page 45: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

01 package br.com.exemplo.estoque;0203 import org.junit.Test;04 import static org.junit.Assert.*;0506 public class ProdutoTest {0708 @Test09 public void testDescontoValido() {10 int percentual = 90;11 boolean resultadoEsperado = true;1213 System.out.println(�caderno�);14 Produto caderno = new Produto(10.00, 1.00);15 boolean resultado = caderno.descontoValido(percentual);16 assertEquals(resultadoEsperado, resultado);1718 System.out.println(�caneta�);19 Produto caneta = new Produto(1.00, 0.10);20 resultado = caneta.descontoValido(percentual);21 assertEquals(resultadoEsperado, resultado);22 }23 }

Com base nos códigos fontes apresentados, conclui-se que

(a). a linha 08 de ProdutoTest é um comentário.

(b). a classe ProdutoTest descende de org.junit.Test

(c). a classe Produto não pode ter descendentes sem construtores explicitamente de-clarados.

(d). o campo preco da classe Produto só pode ser acessado pelas classes que estiveremno mesmo pacote de Produto.

(e). org.junit.Assert é um pacote.

Solução:

(A) ERRADA

Em Java, existem 3 (três) tipos de comentários:

• // Isto é o primeiro tipo de comentário

• /* Isto é o segundo tipo de comentário */

• /** Este é o terceiro tipo de comentário, muito utilizado para documentação web */

(B) ERRADA

Esta é uma confusão muito comum em Java. Na verdade, o código import org.junit.Testé utilizado para importar apenas a classe Test a �m de que a classe ProdutoTest possaacessar os seus métodos públicos (caso existam).

A classe ProdutoTest somente descenderia da classe Teste se ela fosse declarada utilizando-se

Página 44 de 51www.handbookdeti.com.br

Page 46: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

a palavra chave extends, da seguinte forma: public class ProdutoTest extends Test.

Lembre-se que a palavra chave extends indicaria que todas as declarações de métodos, va-riáveis e campos da superclasse (classe pai) Test seriam herdadas pela classe ProdutoTest.

(C) CORRETA

Um construtor determina como um objeto é inicializado pela criação de uma nova ins-tância de uma classe com os parâmetros especi�cados. Podemos tratá-lo como um métodoespecial: com nome igual ao da classe; sem tipo de retorno (void); e não herdado pelassubclasses.

Caso você decida em não declarar um construtor em uma classe, Java automaticamentefornecerá um construtor default que não requer nenhum argumento. O construtor defaultsimplesmente chama o construtor da superclasse, denominado super(), com nenhum argu-mento e inicializa as variáveis da instância. Se a superclasse não tiver um construtor quenão requer argumentos, ocorrerá um erro em tempo de compilação, que é o caso do presenteproblema, pois note que a superclasse Produto possui apenas um construtor, obviamente demesmo nome, que exige dois argumentos.

Assim, a qualquer subclasse da classe Produto deverá declara explicitamente o seu cons-trutor.

(D) ERRADA

O campo preco, como está precedido pelo modi�cador private, só poderá ser acessado dentroda classe Produto. Nem mesmo as subclasses da classe Produto poderão acessar esse campodiretamente.

Uma forma de tornar esse campo acessível para leitura, seria por meio da declaração deum método, público (public), na classe Produto. Esse método retornaria apenas o valorarmazenado no campo preco.

Por outro lado, se desejássemos que esse campo fosse acessível para escrita, deveríamosdeclarar um método, na classe Produto, precedido pelo modi�cador protected. Isso per-mitiria que apenas as subclasses da classe Produto atualizem o campo preco.

(E) ERRADA

Por convenção, todos os nomes de pacotes e diretório que o seguem deveriam ser especi�ca-dos usando-se letras minúsculas. Por outro lado, os nomes das classes e interfaces que vocêdeseja referenciar dentro do pacote deveriam ser especi�cados usando-se a primeira letra emmaiúsculo. Isso permite que outros programadores que usam os seus pacotes determinem fa-cilmente quais componentes são nomes de diretórios e quais são nomes de interfaces e classes.

Assim, na verdade, org.junit.* é um pacote que contém várias classes, dentre elas a classeorg.junit.Assert.

Página 45 de 51www.handbookdeti.com.br

Page 47: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

21. Assuntos relacionados: Desenvolvimento de Software, Diagrama de Classes,Banca: CESGRANRIOInstituição: PetrobrasCargo: Analista de Sistemas - Eng. de SoftwareAno: 2008Questão: 62

Com base no diagrama acima, analise os trechos de código Java a seguir.

I - Produto p = new Produto();p.setNome(�Carro�);

II - Seguravel s = new Veiculo();s.setNome(�Carro�);double p = s.calculaPremio();

III - Seguravel s = new Veiculo();((Veiculo) s).setNome(�Carro�);

IV - Vendavel v = new Peca();Produto p = (Produto) v;p.setNome(�Pneu�);

V - Vendavel v = new Veiculo();Produto p = (Peca)((Produto)((Veiculo) v));

Estão corretos APENAS os trechos de código

(a). I e III

(b). I e IV

(c). II e III

Página 46 de 51www.handbookdeti.com.br

Page 48: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

(d). III e IV

(e). IV e V

Solução:

(I) ERRADA

Observe pelo diagrama que Produto é uma classe abstrata, portanto não é possível aplicarum construtor sobre ela. Em outras palavras, ela não pode ser instanciada. Nós precisamosassegurar que o objeto a ser construído pertence a uma classe concreta da classe abstrataProduto, no caso, ou a classe Veículo ou a classe Peca. Uma solução de correção seria oseguinte código:

Produto p = new Veículo();

(II) ERRADA

Note que apesar da variável s ser uma instância da classe Veiculo, ela foi automaticamenteconvertida (upcast) no momento da sua declaração para a interface Seguravel. Desse modo,esse objeto poderá acessar apenas os métodos que foram de�nidos na interface, no caso, ométodo calculaPremio, e não o método setNome.

(III) CORRETA

Semelhante à alternativa anterior, porém com um conversão (downcast) explícita entre ainterface Seguravel e a classe que a implementa (Veiculo). Este tipo de conversão permite auma classe pai, no caso a interface Seguravel, acessar todos os métodos da classe �lha.

Note, também, que s é uma instância da classe Veiculo, e por isso não foi necessário inserirmecanismos que veri�cam o tipo do objeto antes da conversão (RITT, do inglês Run-TimeType Identi�cation).

Em Java isso é alcançado por meio do operador instanceof. O uso adequado desse ope-rador garante que as conversões são sempre seguras, não permitindo que um objeto sejaconvertido para uma classe inválida.

(IV) CORRETA

No trecho de código são realizadas duas conversões:

1. Upcast entre uma instância da classe, a classe concreta Peca, e a interface Vendavel.Mais uma vez lembre-se que uma conversão para uma classe (ou interface) pai é feitaimplicitamente;

2. Downcast entre a interface Vendavel, que é uma instância da classe Peca, e a classeabstrata Produto. Observe, nesse caso, que a conversão é realizada para a classe pai(Produto) da classe instanciada (Peca), o que é perfeitamente aceitável uma vez quetoda Peca é um Produto.

Após a realização do downcast o método setNome da classe Produto é apropriadamenteinvocado.

Página 47 de 51www.handbookdeti.com.br

Page 49: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

(V) ERRADA

No trecho de código, há uma tentativa de realizar um cast entre a instância de Veiculo,representada por v, para a classe Peca. Tal tipo de cast (entre classe irmãs) produzirá umerro de compilação, pois as referidas classes possuem métodos completamente diferentes enão relacionados.

Página 48 de 51www.handbookdeti.com.br

Page 50: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

22. Assuntos relacionados: Linguagens de Programação, Orientação a Objeto, Herança, Clas-ses e Superclasses, Java, Modi�cadores de Acesso,Banca: ESAFInstituição: Agência Nacional de Águas (ANA)Cargo: Analista Administrativo - Tecnologia da Informação e Comunicação / Desenvolvi-mento de Sistemas e Administração de Banco de DadosAno: 2009Questão: 29

Em Java, para que um método de uma superclasse não seja sobrescrito em suas subclasses,aplica-se o modi�cador

(a). static

(b). public

(c). �nal

(d). protected

(e). abstract

Solução:

Esta é uma questão que aborda como a linguagem Java aborda um dos principais conceitosda programação orientada a objetos � a herança. No entanto, antes de explicarmos o que éherança, vamos rever os conceitos de classe, objeto, classe, atributos e métodos.

Um objeto pode ser de�nido como uma entidade com limites bem de�nidos e um signi-�cado para a aplicação. Tais entidades representar elementos físicos (como um carro, umacasa, um cliente etc), elementos conceituais (como uma venda, uma matrícula etc), elemen-tos de software (uma lista, um array, um arquivo etc). Uma classe, por sua vez, consiste dadescrição de um grupo de objetos com propriedades e comportamento idênticos entre si.

As propriedades da qual são representadas pelos atributos dos objetos. Um objeto da classecasa, por exemplo, poderia ter como propriedades 2 portas, 4 janelas, 100 metros quadradosde área, entre outras. A combinação de valores dos atributos de um determinado objeto é oque determina o seu estado. Para alterá-lo, é necessário utilizar os métodos. Vamos agoraao conceito de herança.

A herança é um mecanismo que permite criar novas classes a partir de classes já existentes,aproveitando-se das características (atributos e métodos) destas. Ou seja, com a herança épossível criar classes derivadas (subclasses) a partir de classes bases (superclasses).

As subclasses herdam todos os atributos e métodos de suas superclasses. Entretanto, assubclasses não estão limitadas às características herdadas de sua superclasse, uma vez quenas subclasses podem existir atributos e métodos que não existem na superclasse.

Em alguns casos, as subclasses também podem rede�nir os métodos herdados, oferecendoimplementações especializadas para os métodos quando necessário. Essa técnica é tambémconhecida como sobrescrita ou override.

Recordados alguns dos conceitos básicos sobre orientação a objetos, vamos agora falar umpouco sobre as alternativas trazidas na questão � static, public, �nal, protected e abstract

Página 49 de 51www.handbookdeti.com.br

Page 51: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

� que, na linguagem Java, são conhecidos como modi�cadores de acesso, que são keywordsintroduzidas no código para determinar a forma como as classes, métodos e atributos podemser acessados pelas diversas partes do programa.

O modi�cador static, quando usado em um atributo, serve para criar uma variável de classe.Isso signi�ca dizer que este atributo será comum em todos os objetos da classe, de modoque as modi�cações neste atributo feitas por um objeto se re�itam em todos os demais. Jáos métodos, quando de�nidos como static, impede que estes sejam sobrescritos pelas sub-classes. Com isso, esta é a resposta da questão.

O modi�cador de acesso private indica que um um atributos ou métodos só podem seracessados de dentro da classe que os criou. Este modi�cador de acesso é o que permite aoJava implementar o conceito de encapsulamento.

Já o modi�cador de acesso public determina que a classe, método ou atributo podem seracessados por qualquer parte do programa, e a qualquer instante da execução deste.

O modi�cador �nal determina que a classe, método ou atributo se mantenham imutáveis nodecorrer do processamento do programa. Ao utilizarmos o modi�cador �nal em um atributo,estamos de�nindo uma constante. Já quando aplicamos este modi�cador a um método deuma superclasse, impedimos que ele seja sobrescrito em suas subclasses.

Em Java, um pacote é uma coleção das classes relacionadas, que podem ser importadas(por meio do comando import) em programas que necessitem das classes contidas no pa-cote. Neste contexto, o modi�cador protected é o que determina que um método ou umatributo podem ser acessados somente dentro do pacote em que estão contidos.

Por �m, temos o modi�cador de acesso abstract, que servem para declara métodos ou classesabstratas. Para recapitulação, métodos abstratos são aqueles que não são implementadosnas classes, �cando esta tarefa a cargo das subclasses. Já uma classe abstrata é aquelaque não está completamente implementada, �cando a cargo das subclasses implementar orestante delas.

Diante do exposto, podemos a�rmar que a resposta da questão é a alternativa C.

Página 50 de 51www.handbookdeti.com.br

Page 52: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Handbook de Questões de TI Comentadas para Concursos Volume questões de TI

Questão Resposta

1 B

2 E

3 A

4 E

5 A

6 A

7 E

8 E

9 E

10 A

11 B

12 A

13 D

14 C

15 A

16 E

17 E

18 E

19 A

20 C

21 D

22 C

Página 51 de 51 Handbook de TI Além do Gabarito

Page 53: Java - apostilando.yolasite.comapostilando.yolasite.com/resources/handbook_questoes_java.pdf · Handbook de Questões de TI Comentadas para Concursos olumeV questões de TI Prefácio

Índice Remissivo

.NET, 5

Algoritmos, 25

Bytecode, 17

Classes e Superclasses, 49

Desenvolvimento de Software, 46Diagrama de Classes, 29, 46

EAR, 4EJB, 4

Garbage Collection, 38

Heap, 19Herança, 49

Interface com Usuário, 39

J2EE, 4, 5, 7, 19JAR, 4Java, 11, 13, 15, 17, 19, 21, 24, 25, 27, 29, 31,

32, 35, 38, 39, 41, 43, 49Java Transaction API (JTA), 7JavaServer Pages (JSP), 11JEE, 5

Linguagens de Programação, 11, 15, 24, 25, 32,35, 39, 41, 49

Máquina Virtual Java (JVM), 17, 19Modi�cadores de Acesso, 49MVC, 5, 7

Orientação a Objeto, 49

Pacotes Java, 39, 41Programação, 38

Servidor de Aplicações, 4, 5, 19Sobrecarga de Método, 21Sobrescrita de Método, 21

Teste de Mesa, 27Tratamento de Exceção em Java, 15

UML, 29

WAR, 452