Você está na página 1de 53

Java

para concursos
Questes comentadas

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Prefcio
Concebida inicialmente para ser utilizada no desenvolvimento de pequenos aplicativos e programas de controle de aparelhos eletrnicos, a linguagem de programao orientada a objeto
Java, com o boom da Internet, foi rapidamente adaptada aos conceitos da Internet, dando s
pginas HTML contedos mais dinmico.
Desde o seu lanamento, em maio de 1995, Java foi rapidamente adotada pelos desenvolvedores, estando presente em diversos tipos de web browsers, celulares, mainframes, etc.
Com algumas caractersticas peculiares, como multi-plataforma, alto desempenho, segurana,
cdigo interpretado, a linguagem Java est presente em muitos projetos, e por esta crescente
utilizao, a linguagem Java tornou-se um padro para o mercado.
Seguindo este cenrio, o assunto Java sempre cobrado nas provas de concursos pblicos. Para
voc pode ser preparar melhor neste tema, o Grupo Handbook de TI preparou o volume Java,
que traz uma sria de questes comentadas sobre tal tpico.
Bons estudos,

Grupo Handbook de TI

Pgina 1 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Direitos Autorais
Este material registrado no Escritrio de Direitos Autorais (EDA) da Fundao Biblioteca
Nacional. Todos os direitos autorais referentes a esta obra so reservados exclusivamente aos
seus autores.
Os autores deste material no probem seu compartilhamento entre amigos e colegas prximos de estudo. Contudo, a reproduo, parcial ou integral, e a disseminao deste material de
forma indiscriminada atravs de qualquer meio, inclusive na Internet, extrapolam os limites da
colaborao. Essa prtica desincentiva o lanamento de novos produtos e enfraquece a comunidade concurseira Handbook de TI.
A srie

Handbook de Questes de TI Comentadas para Concursos  Alm do Gabarito

produo independente e contamos com voc para mant-la sempre viva.

Grupo Handbook de TI

Pgina 2 de 51

www.handbookdeti.com.br

uma

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Canais de Comunicao
O Grupo Handbook de TI disponibiliza diversos canais de comunicao para os concurseiros
de TI.

Loja Handbook de TI
Acesse a nossa loja virtual em

http://www.handbookdeti.com.br

Servio de Atendimento
Comunique-se diretamente conosco atravs do e-mail

faleconosco@handbookdeti.com.br

Twitter do Handbook de TI
Acompanhe de perto promoes e lanamentos de produtos pelo nosso Twitter

com/handbookdeti

Pgina 3 de 51

www.handbookdeti.com.br

http://twitter.

Handbook de Questes de TI Comentadas para Concursos

1.

Volume questes de TI

Assuntos relacionados: Servidor de Aplicaes, J2EE, EJB, WAR, JAR, EAR,


Banca: CESGRANRIO
Instituio: BNDES
Cargo: Analista de Suporte
Ano: 2008
Questo: 42
Uma aplicao empresarial contendo componentes EJB e mdulos web dever ser publicada
em um servidor de aplicao compatvel com J2EE. No contexto do empacotamento dessa
aplicao para publicao (deploy), correto armar que
(a). no h como juntar componentes EJB e mdulos web em uma mesma aplicao,
pois devero ser publicados separadamente.
(b). um arquivo EAR poder conter arquivos WAR e JAR representativos dos mdulos
web e EJB.
(c). o tamanho do pacote, em bytes, sempre ca maior que o cdigo original, em virtude
do algoritmo empregado no empacotamento da aplicao em um arquivo EAR.
(d). mdulos web no devem ser empacotados, pois isso inviabiliza seu acesso pela
Internet.
(e). arquivos JAR servem apenas para empacotar componentes EJB.

Soluo:
Os arquivos JAR (Java Archive) agrupam arquivos de classes e os recursos utilizados por
essas classes, como imagens e propriedades. Os pacotes JAR so muito utilizados no mundo
Java e so facilmente visualizveis por softwares de descompactao populares, como o Winzip. A utilizao desses arquivos JAR no se restringe ao empacotamento de componentes
EJB, pois tambm so utilizados para empacotar componentes Java no pertencentes ao
padro J2EE. Conclumos, ento, que a alternativa E est incorreta.
O que difere um arquivo JAR comum e um arquivo JAR que armazena componentes EJB so
os arquivos manifest, cuja nalidade fornecer informaes adicionais que sero utilizadas
em tempo de execuo. 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 mdulos web podem ser empacotados em arquivos com extenso WAR (Web Archive) e
no h problema nenhum em relao ao seu acesso pela Internet, pois uma vez que o arquivo
WAR siga as especicaes do padro J2EE, o container web do servidor de aplicao ser
responsvel por gerar os arquivos HTML para serem entregues ao browser. Logo, a alternativa D est incorreta.
A alternativa C est errada, uma vez que os arquivos JAR, WAR etc.

so compactados

e tendem a possuir tamanho reduzido, embora no haja garantia de que sejam menores que
o cdigo original.
Um arquivo EAR (Enterprise Application Archive) utilizado para permitir que uma aplicao J2EE complexa possa ser facilmente instalada em um servidor J2EE. Ele permite
agrupar pacotes JAR comuns, pacotes JAR com EJBs e pacotes WAR. Portanto, a alternativa B a alternativa correta para a questo.

Pgina 4 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

2.

Volume questes de TI

Assuntos relacionados: Servidor de Aplicaes, J2EE, JEE, .NET, MVC,


Banca: CESGRANRIO
Instituio: Petrobras
Cargo: Analista de Sistemas - Eng. de Software
Ano: 2008
Questo: 47
Um servidor de aplicaes prov diversos servios para as aplicaes que hospeda. Considerandose implementaes tpicas em J2EE/JEE e .NET, compondo uma arquitetura em 3 camadas,
correto armar que, dentre os servios oferecidos pelos servidores de aplicaes, encontra-se
(a). validao de objetos de domnio, segundo as regras de negcio da aplicao.
(b). gerao de cdigo atravs de MDA (Model Driven Architecture).
(c). persistncia nal dos objetos de domnio.
(d). suporte nativo arquitetura MVC.
(e). estrutura para troca de mensagens entre aplicaes.

Soluo:
O objetivo dos servidores de aplicaes disponibilizar uma plataforma que permita aos
programadores abstrair de uma gama de tarefas inerentes ao desenvolvimento do software.
Dessa forma, os programadores podem se concentrar mais nas regras de negcio do que nas
questes de infraestrutura da aplicao, como segurana, disponibilidade, balanceamento de
carga, mensageiria etc.
Para aplicaes simples, a utilizao de um servidor de aplicaes pode representar um
overhead ao invs de facilitar as tarefas dos programadores.

No entanto, para grandes

aplicaes comerciais com requisitos mais rgidos de desempenho e robustez a falhas, os


servidores de aplicaes mostram-se muito teis.
Embora o conceito de servidor de aplicaes seja aplicvel para o desenvolvimento em uma
grande quantidade de linguagens, nos ltimos anos os que mais se tornaram populares so
os servidores de aplicaes J2EE (ou JEE, nas verses mais recentes), criados para suportar
aplicaes escritas em Java.
Para exemplicar o conjunto de servios que os servidores de aplicaes podem oferecer,
vejamos a Figura 1. Ela mostra a arquitetura JEE mais recente, publicada pela Sun Microsystems no documento JSR-000316.

No esquema mostrado nessa gura, tanto o Web

Container quanto o EJB Container so hospedados no servidor de aplicaes, que oferece


servios diversos por meio de vrias APIs. A API JMS (Java Message Service), por exemplo, oferece suporte a comunicao ponto-a-ponto convel. A API JavaMail permite que as
aplicaes enviem e-mails sem ter que se preocupar com as questes de las de mensagens,
falhas etc. A API JASS, por sua vez, oferece facilidades para implementao de autenticao
e autorizao nas aplicaes.
Vale lembrar que os servidores de aplicaes tambm oferecem facilidades para persistncia
de 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 to cheio de funcionalidades como um servidor de aplicaes oferea suporte a construo de aplicaes segundo

Pgina 5 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

o modelo MVC. No entanto, a construo de uma aplicaes que obedea ao MVC est
muito mais ligada a separao dos componentes e camadas do sistema do que plataforma
tecnolgica utilizada. , portanto, possvel construir aplicaes MVC no bom e velho ASP,
bem como nos novos e modernos servidores de aplicaes.
A validao de objetos de que trata a alternativa A feita pelos servidores de aplicaes,
mas no est relacionada as regras de negcio das aplicaes.

A gerao automtica de

cdigo, por sua vez, uma tarefa comum s IDEs, e no aos servidores de aplicaes.
Portanto, a alternativa E, por ser a mais objetiva e clara, a resposta correta para essa
questo.

Figura 1: arquitetura JEE 6.0.

Pgina 6 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

3.

Volume questes de TI

Assuntos relacionados: J2EE, Java Transaction API (JTA), MVC,


Banca: Cesgranrio
Instituio: Petrobras
Cargo: Analista de Sistemas - Infraestrutura
Ano: 2008
Questo: 63
A aplicao do padro MVC (Model-View-Controller ) no desenvolvimento de aplicaes Web
J2EE permite dividir a aplicao em camadas e resolver uma srie de problemas. Sobre os
recursos da arquitetura J2EE e o desenvolvimento de aplicaes J2EE utilizando o MVC,
so feitas as armativas abaixo.
I - Uma possvel estratgia no desenvolvimento de um site Web seria utilizar pginas
JSP para construir a camada View, Servlets para a camada Controller e EJBs para a
camada Model.
II - A API JTA do J2EE permite aos clientes de EJB obter um contexto inicial a partir
do qual possvel recuperar o objeto Home de um EJB.
III - Na demarcao de transao gerenciada pelo container, se o atributo transacional
associado ao mtodo de um EJB for denido como Required, o container sempre criar
uma nova transao a cada chamada do mtodo.
Est(o) correta(s) a(s) armativa(s)
(a). I, apenas.
(b). II, apenas.
(c). III, apenas.
(d). I e II, apenas.
(e). I, II e III.

Soluo:
Abordaremos cada item.

Sobre o Item I
A plataforma J2EE (Java

2 Platform, Enterprise Edition )

uma soluo baseada em com-

ponentes para projeto, desenvolvimento, montagem e disponibilizao de aplicaes distribudas em ambientes corporativos.

Tipicamente, as aplicaes J2EE so divididas em 3

camadas:

Cliente;

Web;

Negcios;

A Figura 2 exemplica a arquitetura J2EE. A partir da Figura 2, identicamos a existncia


de containers, que so ambientes que fornecem um conjunto de servios para os componentes
apropriados (Apache Tomcat um tipo de container).

Pgina 7 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Figura 2: arquitetura J2EE.


Podemos observar, tambm, a existncia de dois tipos de clientes:

Cliente Web:

pginas Web dinamicamente geradas por componentes Web (JSP ou

Servlets) e que so exibidas no browser;

Cliente Aplicao: permite que o usurio interaja com o servidor da aplicao atravs
de interfaces mais complexas, geralmente atravs de APIs.

J do lado servidor, encontramos dois containers:

Container EJB (Enterprise

Java Beans ) que implementa toda a lgica do negcio,

isto

, encapsula o cdigo (com classes, mtodos e atributos) que realiza o propsito da


aplicao;

Container WEB que contm:

Servlets: classes que processam dinamicamente as requisies e constroem respostas na forma de pginas HTML;

Pginas JSP (Java

Server Pages ):

permitem a mistura de pginas HTML, est-

ticas, com contedos gerados dinamicamente pelos Servlets.


Note que os Servlets atuam como uma camada intermediria entre a requisio proveniente
do Web browser (ou outro cliente http) e o banco de dados (ou aplicao no servidor http).
importante mencionar que, quando uma pgina JSP requisitada pela primeira vez,
o container a compila gerando um Servlet. Nas chamadas sucessivas essa etapa no mais
necessria (a no ser que a JSP tenha sido modicada). Portanto, as pginas JSP so, em
ltima instncia, processadas como Servlets.
Aps esta breve reviso sobre J2EE, relembremos o signicado do padro MVC. MVC
um padro de arquitetura de software utilizado para separar dados ou lgica de negcios
(Model) da interface do usurio (View) e do uxo da aplicao (Control). Sua ideia central
permitir que uma mesma lgica de negcio possa ser acessada e visualizada atravs de
vrias interfaces. Outro benefcio considervel dessa abordagem que alteraes feitas no
layout no afetam a manipulao de dados.
A partir do que foi exposto acima, conseguimos identicar que a pgina JSP (mistura de
HTML com Servlet), representa a camada View, uma vez que compe a interface com o
usurio. O Servlet representa a camada Control, pois atua como uma camada intermediria

Pgina 8 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

entre o Web browser e o EJB. Por m, o EJB representada a camada Model, j que implementa toda a lgica do negcio. Portanto, o item I est correto.

Sobre o Item II
JTA (abreviao de

Java Transaction API ) uma especicao feita pela Sun Microsystems

(criadora do Java) visando padronizar o uso de transaes distribudas feitas por aplicativos
Java.
Basicamente, isso signica que ela pode ser usada para fazer commit, rollback ou criar
transaes, ao invs de usar transaes diretamente pelo driver JDBC. A principal vantagem que o uso de JTA acarreta, contudo, a possibilidade de executar transaes globais
(unidades lgicas de trabalho que seguem 4 princpios fundamentais: atomicidade, consistncia, isolamento e durabilidade).
JTA dene somente as interfaces que um aplicativo deve chamar para fazer uso de transaes distribudas, mas deve ser implementada por algum servio que implemente essa
API. Praticamente todo

application server, atualmente,


Transaction Manager.

tem uma implementao dessas,

que normalmente chamada de

Na plataforma J2EE, a JNDI (Java

Naming and Directory Interface )

que fornece uma in-

terface padro para localizao de usurios, mquinas, redes, objetos e servios, permitindo
aos clientes a obteno 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 gerncia transacional em J2EE que ela esconde os detalhes de
baixo-nvel, assim, o desenvolvedor pode assumir que qualquer recurso transacional ser
adequadamente tratado pela plataforma, usando, para tanto, demarcaes transacionais
declarativas (tambm chamadas de implcitas) ou usando demarcaes transacionais programticas (tambm chamada de explcitas).
Uma demarcao transacional basicamente a denio do ponto onde ela se inicia (usa-se
o comando

Begin )

e o ponto onde ela termina (usa-se o comando

Commit ).

Em J2EE as

transaes podem ser demarcadas de trs maneiras:

Declarativa (CMT -

Container-Managed Transactions ):

o container manipula a demar-

cao transacional;

Programtica (BMT -

Bean Managed Transactions ):

os EJBs manipulam a demarcao

transacional;

Iniciada pelo cliente: cdigo cliente manipula a demarcao transacional (ex. cliente
WEB).

Portanto, estamos diante de uma transao declarativa (gerenciada pelo container), a qual
possui os seguintes atributos transacionais (o atributo especica como o componente ir
reagir quando o seu mtodo for chamado por um cliente dentro ou fora do contexto de uma
transao):

Required :

indica que o escopo de uma transao requerido pelo mtodo. Se no existe

transao, uma nova criada e dura at que o mtodo termine ( propagada para todos

Pgina 9 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

os mtodos chamados). Caso j exista uma transao iniciada pelo cliente, o bean
includo no seu escopo durante a chamada do mtodo (j podemos eliminar o item III);

Supports :

indica que o mtodo suporta transaes. Ser includo no escopo da tran-

sao do cliente se existir.

Se ele for chamado fora do escopo de uma transao ele

realizar suas tarefas sem transaes e pode chamar objetos que no suportam transaes;

RequiresNew :

indica que o mtodo requer uma nova transao.

Estando ou no o

cliente no escopo de uma transao, o bean ir iniciar uma nova transao que iniciar
e terminar no bean;

NotSupported :

indica que o mtodo no suporta transaes. Se o mtodo for chamado

pelo cliente no escopo de uma transao, a mesma ser suspensa enquanto durar a
chamada do mtodo (no haver propagao de transaes do cliente);

Mandatory :

indica que o mtodo s pode ser chamado no escopo de uma transao do

cliente;

Never :

indica que o mtodo nunca pode estar dentro de uma transao. Se o cliente que

chama o mtodo for parte de uma transao, o bean ir provocar um RemoteException


(ou EJBException em clientes locais).
Logo, a alternativa

A est correta.

Pgina 10 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

4.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Java, JavaServer Pages (JSP),


Banca: ESAF
Instituio: Agncia Nacional de guas (ANA)
Cargo: Analista Administrativo - Tecnologia da Informao e Comunicao / Desenvolvimento de Sistemas e Administrao de Banco de Dados
Ano: 2009
Questo: 32
Analise as seguintes armaes a respeito de JSP:
I. Em uma aplicao

Web,

h apenas um objeto page em cada JSP.

II. Comentrios JSP aparecem na resposta ao cliente.


III. Os objetos com escopo

session

duram por toda a sesso de navegao do cliente.

Assinale a opo correta.


(a). Apenas a armao I verdadeira.
(b). Apenas a armao II verdadeira.
(c). Apenas a armao III verdadeira.
(d). As armaes I, II e III so verdadeiras.
(e). Nenhuma das armaes verdadeira.

Soluo:
JavaServer Pages

(JSP) uma tecnologia baseada em Java utilizada no desenvolvimento

Active Server Page (ASP) e


PHP. Ela faz parte de uma tecnologia maior referida como Java 2 Enterprise Edition (J2EE).
de pginas Web com contedo dinmico, similar s tecnologias

Alm das tags HTML, que geram o contedo esttico, uma pgina JSP tambm contm
elementos JSP especiais que permitem inserir contedo dinmico por meio dos elementos
JSP. Os elementos JSP so processados pelo servidor Web antes da pgina HTLM ser enviada de volta ao browser. Ou seja, quando o usurio faz uma requisio a uma pgina JSP,
o servidor executa os elementos JSP da pgina, inserindo os resultados dos mesmos junto a
parte esttica da pgina, e envia a pgina HTML para o usurio. A tecnologia JSP pode ser
usada, por exemplo, para recuperar informao em um banco de dados, manipular arquivos,
obter informaes sobre o visitante, etc.
Aps uma breve introduo de JSP, a seguir, analisamos as armativas da questo:
I. Como forma de facilitar a programao Web, em uma pgina JSP existem 9 objetos
instanciados, conhecidos como Objetos Implcitos, que so:

 page :

representa a prpria pgina JSP, ou melhor, uma instncia da classe

servlet

na qual a pgina foi convertida. simplesmente um sinnimo para this;

 cong :

armazena os parmetros de inicializao (congurao) do servlet da pgina

JSP;







request : solicitao que aciona o processamento da pgina;


response : responsvel pela devoluo do resultado ao usurio;
out : representa o uxo de sada (output) para a pgina em si;
pageContext : dados de contexto para a execuo da pgina;
session : representa a sesso atual de um usurio individual;

Pgina 11 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

 application : representa a aplicao qual a pgina pertence;


 exception : incluso nas pginas especcas para tratar excees ou erros no capturados.
Para cada pgina JSP processada existe um
faz outro tambm deve fazer.

servlet

correspondente, ou seja, o que um

Como o objeto page faz referncia ao

servlet

gerado,

existe um objeto page para cada JSP. Portanto, esta armativa verdadeira.

II. Como qualquer linguagem de programao Web, os comentrios no aparecem na resposta ao cliente. Logo, esta armativa falsa.

III. O escopo de um objeto est relacionado com as pginas JSPs que podem acessar o
objeto. Os escopos disponveis so:
objeto que possui escopo

application, request, response, page

session est disponvel para


session esto disponveis

todos os objetos vinculados


A principal utilizao do escopo

session

todas as JSPs e

session. O
os servlets, e
e

para toda a sesso de usurio.

manter os estados de conexo entre cliente e ser-

vidor, pois o protocolo HTTP no armazena informaes de estado. Isso permite o usurio
navegar entre vrias pginas na aplicao Web sem perda de informaes referentes sesso
de usurio. Um exemplo tpico de utilizao do escopo

session

em autenticao de usu-

rios, onde possvel restringir acesso a determinadas pginas.


Portanto, esta armativa verdadeira porque os objetos com o escopo

session

duram du-

rante toda a sesso negao do cliente.


Aps a anlise das armativas, chegamos a concluso que as armativas I e III so verdadeiras. Portanto, a alternativa correta a

(E).

Note que o gabarito fornecido para esta

questo no confere com o gabarito ocial. Possivelmente, a banca que organizou a prova
deve ter cometido um equvoco na armativa I.

Pgina 12 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

5.

Volume questes de TI

Assuntos relacionados: Java,


Banca: CESGRANRIO
Instituio: Petrobras
Cargo: Analista de Sistemas - Eng. de Software
Ano: 2008
Questo: 61
testDescontoValido() valida a vericao para o produto caderno, mas gera uma exceo
para o produto caneta, indicando que o desconto de 90% no vlido para canetas, o que
est incorreto. A causa do problema e uma possvel soluo seriam:
(a).

CAUSA: uso de aritmtica binria de ponto utuante para os clculos (variveis


do tipo double) com posterior tentativa de comparao exata entre os valores
calculados (linha 21).

SOLUO: usar aritmtica decimal exata substituindo os

valores primitivos double por instncias da classe BigDecimal.


(b).

CAUSA:

arredondamento automtico devido ao uso na mesma expresso dos

tipos int e double (linha 14) sem converso de tipos (typecasting).

SOLUO:

transformar o parmetro percentual em double ou realizar um typecasting explcito


de int para double na expresso.
(c).

(d).

CAUSA: verso antiga da mquina virtual Java, que apresenta esse tipo de problema at a verso 1.1. SOLUO: atualizar para a ltima verso da JVM.
CAUSA: falta da incluso do pacote java.lang.math em Produto. SOLUO:
incluir o pacote atravs de uma declarao import.

(e).

CAUSA: mistura de elementos de escopos diferentes (classe e mtodo) na expresso lgica de retorno. SOLUO: atribuir o precoMinimo a uma varivel local
e utiliz-la na comparao ou tornar precoComDesconto um campo de Produto.

Soluo:
(A) CORRETA
Observe, no cdigo acima, que as variveis preco, precoMinimo e precoComDesconto so
do tipo double. Observe, tambm, que o programa est tratando com partes fracionais de
uma unidade monetria, que assumiremos ser o real somente para ns ilustrativos, e ento
precisa de um tipo que permite pontos decimais em seus valores.
Infelizmente, nmeros em ponto utuante podem causar transtornos. O problema que ocorre
no cdigo acima devido ao uso do tipo double (ou oat) para representar quantias em reais
(assumindo que quantias de real so mostradas com dois dgitos a direita do ponto decimal).
Dessa forma, aps a chamada do construtor Produto, poderemos ter as seguintes quantias
armazenadas para o produto caderno:

na varvel privada preco: 10.000 e exibio 10.00;

na varivel privada precoMinimo: 0.999, o qual seria arrendondado normalmente para


1.00 para propsitos de exibio.

O mesmo pode ocorrer para o produto caneta aps a invocao do construtor Produto:

na varvel privada preco: 1.000 e exibio 1.00;

na varivel privada precoMinimo: 0.101, o qual seria arrendondado normalmente para


0.10 para propsitos de exibio.

Pgina 13 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Assim, aps a invocao do mtodo descontoValido pelos produtos caderno e lpis, teremos:

para caderno: a varivel precoComDesconto armazenar 1.000 (e exibio 1.00), o que


maior que o precoMinimo (0.999), retornando true na comparao;

para caneta: a varivel precoComDesconto armazenar 0.100 (e exibio 0.10), o que


menor que o precoMinimo (0.101), retornando false na comparao.

A recomendao no usar variveis do tipo double (ou oat) para realizar clculos monetrios precisos. A impreciso de nmeros em ponto utuante pode causar erros que resultaro em incorretos valores monetrios.

Nesses casos a recomendao usar a classes

java.math.BigDecimal para a realizao de clculos com preciso arbitrria de valores em


ponto utuante.
(B) ERRADA
Em Java, h regras de promoo que se aplicam a expresses contendo valores de dois
ou mais tipos primitivos. Cada valor promovido ao tipo mais alto na expresso. Dessa
forma, o argumento do mtodo descontoValido (percentual) e a constante (100) do tipo
so automaticamente promovidas para o tipo

double, devido ao campo preco.

int

(C) ERRADA
A JVM (Java Virtual Machine ou Mquina Virtual Java, em portugus) uma mquina
computacional abstrata, que, assim como uma mquina real, possui seu prprio conjunto de
instrues e capacidade de manipular vrias reas de memria em tempo de execuo.
Dentre as responsabilidade da JVM podemos citar as principais:

independncia de uma aplicao em relao ao hardware;

independncia de uma aplicao em relao ao sistema operacional;

proteo aos usurios contra programas maliciosos.

Lembre-se que a mquina virtual Java no tem conhecimento sobre a linguagem de programao Java. Ela conhece apenas um determinado formato binrio, arquivo do tipo classe, o
qual contm instrues da JVM (ou bytecodes) e uma tabela de smbolos, bem como outras
informaes.
(D) ERRADA
A classe Math parte do pacote java.lang, o qual implicitamente importado pelo compilador. Ento no necessrio importar a classe Math para usar seus mtodos.
(E) ERRADA
Os membros de uma classe, no presente caso, preco e precoMinimo, so acessveis por qualquer mtodo declarado na mesma classe, independentemente do qualicador que os precede.
Assim, o campo precoMinino (this.precoMinimo no cdigo) pertence ao escopo do mtodo
descontoValido.
Note, ainda, que no mtodo descontoValido, o uso da palavra chave this para o membro
precoMinimo no era necessrio, pois no h variveis locais com o mesmo nome.

Pgina 14 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

6.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Java, Tratamento de Exceo em


Java,

Banca: ESAF
Instituio: Agncia Nacional de guas (ANA)
Cargo: Analista Administrativo - Tecnologia da Informao e Comunicao / Desenvolvimento de Sistemas e Administrao de Banco de Dados
Ano: 2009
Questo: 30

Em uma aplicao Java, se o carregador de classes no conseguir localizar a classe do driver


de banco de dados para uma conexo JDBC, lanada a exceo
(a). java.lang.ClassNotFoundException.
(b). java.io.FileNotFoundException.
(c). java.lang.SecurityException.
(d). java.io.IOException.
(e). java.util.InputMismatchException.

Soluo:
Excees, como o nome sugere, so situaes que fogem s regras e, no caso das linguagens de
programao, geralmente indesejveis. Ocorrem no momento da execuo de um programa
e precisam ser devidamente tratadas para no interromperem o processamento normal de
uma aplicao. Podem ocorrer por diversos motivos, como uma inadvertida diviso por zero,
uso de referncias para objetos inexistentes, falta de memria, dentre outros.
A Linguagem Java possui um mecanismo de tratamento de excees baseado em escopo,
o que permite utilizar um bloco de cdigo separado daquele que gerou uma determinada
exceo para trat-la adequadamente, propiciando maior organizao ao projeto codicado.
Da mesma forma que os demais elementos desta linguagem, as excees so objetos em Java,
sendo a classe Exception a superclasse de todas as excees. Esta estruturao permite que
um programador dena suas prprias excees, que herdam caractersticas pr-denidas na
classe Exception.

Quando uma exceo ocorre, cdigos escritos por um programador po-

dem trat-la atravs de diretivas especializadas para este m (throws, try, catch e nally).
Para tanto, o tipo (classe) de exceo deve ser indicado, possibilitando-se, assim, que toda
e qualquer exceo seja individualmente tratada.
Uma exceo comumente lanada durante a execuo de cdigos em Java a ClassNotFoundException, que adverte ao programador que uma determinada classe no est acessvel
JVM, isto , nenhuma denio para uma classe com o nome especicado pde ser encontrada. Esta exceo, classe integrante do pacote java.lang, pode ocorrer por inexistncia
real da classe indicada ou por falta de referncia sua localizao no ambiente de programao utilizado (variveis de ambiente do sistema operacional). Desta forma, a assertiva A
apresenta-se como a resposta para a questo.
A exceo java.io.FileNotFoundException ocorre para sinalizar que a tentativa de abertura do arquivo indicado falhou.

J a exceo java.lang.SecurityException indica a ten-

tativa negada de acesso a algum recurso do sistema, como um arquivo.

Operaes de

entrada/sada interrompidas ou falhas lanam a exceo java.io.Exception para indicar o

Pgina 15 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

ocorrido. A classe Scanner (um parser simples para textos com tipos primitivos) lana a exceo java.util.InputMismatchException para indicar que ou o token capturado no coincide
com o padro do tipo esperado ou seu valor est fora da faixa esperada.

Pgina 16 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

7.

Volume questes de TI

Assuntos relacionados: Java, Bytecode, Mquina Virtual Java (JVM),


Banca: FCC
Instituio: TRT 15a Regio
Cargo: Analista Judicirio - Tecnologia da Informao
Ano: 2009
Questo: 48
No mbito da linguagem Java, considere:
I. Edio a criao do programa, que tambm chamado de cdigo Bytecode.
II. Compilao a gerao de um cdigo intermedirio chamado fonte, que um cdigo
independente de plataforma.
III. Na interpretao, a mquina virtual Java ou JVM analisa e executa cada instruo do
cdigo Bytecode.
IV. Na linguagem Java a interpretao ocorre apenas uma vez e a compilao ocorre a cada
vez 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.

Soluo:
Java uma linguagem de programao muito popular atualmente.

Ela foi desenvolvida

na dcada de 90 pela SUN Microsystems e desde aquela poca essa linguagem vem sendo
melhorada e ampliada. O paradigma escolhido para o Java foi o de orientao a objetos,
portanto, classes e mtodos so utilizados para modelar o que se deseja programar.
Em geral, os cdigos-fonte desenvolvidos em outras linguagens (C++, por exemplo) so
compilados para serem executados em arquiteturas especcas.

Dessa forma, executveis

gerados para uma determinada arquitetura (Intel, por exemplo) no funcionam em outras
arquiteturas (PowerPC e SPARC, por exemplo). medida que temos diversas arquiteturas
e diversos sistemas que devem ser corretamente executados nessas arquiteturas, essa abordagem comea a se mostrar desfavorvel.
A plataforma Java veio principalmente para solucionar esse tipo de problema. Diz-se ento
que a linguagem Java portvel, j que seus executveis podem ser executados em qualquer
arquitetura, desde que haja uma JVM para ela. De forma simplicada, essa portabilidade
obtida da seguinte forma:
1. o desenvolvedor escreve (edita) o cdigo-fonte de um sistema na linguagem Java;
2. ao nal da fase de desenvolvimento, o cdigo-fonte compilado, uma nica vez, gerandose um cdigo intermedirio chamado de bytecode. Esse bytecode no depende da arquitetura da mquina fsica. Isso porque a mquina fsica no executa diretamente esse
cdigo intermedirio;

Pgina 17 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

3. uma JVM, que pode estar instalada sobre qualquer arquitetura fsica, interpreta e executa o cdigo intermedirio (bytecode) quantas vezes forem as vezes em que o sistema
for executado.
Perceba que com o Java no h mais dependncia entre cdigo-fonte e arquitetura fsica,
mas passamos a ter dependncia entre JVM e arquitetura fsica.

Ou seja, foi adicionada

uma camada (a JVM) para se obter a to desejada portabilidade.


Neste ponto, podemos concluir que os itens I, II e IV so errados e o item III correto.
Portanto, a alternativa a ser marcada a letra E.
Note que os itens I, II e IV s so errados por conta de trocas de palavras. Uma leitura
desatenta provavelmente comprometeria esta questo. Vejamos:

o item I estaria correto se a palavra Bytecode fosse substituda por fonte;

o item II estaria correto se a palavra fonte fosse substituda por Bytecode;

o item IV estaria correto se as palavras interpretao e compilao fossem invertidas.

Pgina 18 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

8.

Volume questes de TI

Assuntos relacionados: Servidor de Aplicaes, Java, J2EE, Mquina Virtual Java (JVM),
Heap,

Banca: Cesgranrio
Instituio: BNDES
Cargo: Analista de Sistemas - Suporte
Ano: 2008
Questo: 31
Um servidor Linux, que roda, exclusivamente, um servidor de aplicao Java EE, possui 2
GB de memria RAM e 1 CPU. A nica aplicao em execuo atinge, em momentos de
pico, 50 usurios simultneos. Para que essa aplicao tenha um desempenho adequado, o
tamanho mximo da Heap da JVM pode ser congurado para
(a). 100 threads.
(b). 32 MB.
(c). 60 threads.
(d). 2 GB.
(e). 512 MB.

Soluo:
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 verso 5.
A plataforma JEE oferece uma srie de componentes e funcionalidades que permitem a
implementao de software Java distribudo.

Uma descrio sucinta da destinao e das

caractersticas gerais da plataforma JEE pode ser encontrada na Wikipedia:

A Plataforma Java (Enterprise Edition) difere-se da Plataforma Java Standard Edition


(Java SE) pela adio de bibliotecas que fornecem funcionalidade para implementar software
Java distribudo, tolerante a falhas e multi-camada, baseada amplamente em componentes
modulares executando em um servidor de aplicaes. Ela voltada para aplicaes multicamadas, baseadas em componentes que so executados em um servidor de aplicaes... Ela
contm bibliotecas desenvolvidas para o acesso a base de dados, RPC, CORBA, etc. Devido
a essas caractersticas a plataforma utilizada principalmente para o desenvolvimento de
aplicaes corporativas.
Os servidores de aplicao mencionados na descrio acima, em linhas gerais, so softwares
que provem um ambiente onde as aplicaes podem executar.
Uma aplicao 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 diferentes

containers

que oferecem diferentes servios s aplicaes.

oferecidos pelos

containers

Entre os servios mais comuns

esto a execuo da lgica de negcio, servios de mensagens,

servios de gerenciamento de conexes a bancos de dados, servios de segurana etc.


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

Pgina 19 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Quando um cdigo Java compilado, ele d origem a um programa codicado nos chamados

bytecodes.

Os bytecodes so uma espcie de cdigo intermedirio, que s pode ser

executado por uma JVM. Uma JVM, por sua vez, um programa que converte os bytecodes
em cdigo executvel de mquina, que pode ento ser executado pela mquina fsica.
Em ltima instncia, so os conceitos de bytecodes que garantem a portabilidade dos cdigos
Java. Independente do sistema operacional ou plataforma fsica onde tenha sido desenvolvido o programa Java, os bytecodes sempre sero os mesmos.

Com isso, para executar o

programa Java em outro sistema, basta que se tenha uma JVM especca, capaz de converter os bytecodes para o cdigo de mquina apropriado.
Agora, vamos ao que realmente interessa para alcanarmos a resposta da questo.
A

heap

da JVM uma rea de memria onde todos os objetos das aplicaes que esto

sendo executadas pela JVM residem. Alm dos objetos criados nas aplicaes, a heap ainda
possui uma rea de memria reservada para outras funes da JVM. Portanto, para que as
aplicaes executem com desempenho adequado, necessrio congurar bem o tamanho da
heap.
As alternativas A e C esto erradas, simplesmente, porque o tamanho da heap no denido
em termos do nmero de threads, mas sim em termos de quantidade de memria. J a alterativa D est errada pois no faz sentido alocar toda a memria do sistema (no caso, 2GB)
exclusivamente para a JVM. O sistema operacional sequer ir permitir a realizao desta
operao, visto que boa parte da memria j estar sendo utilizada pelo prprio sistema
operacional.
Com isto, nos restam as alternativas B (32 MB) e D (512 MB). O enunciado da questo diz que o servidor possui 1 CPU, e que, em momentos de pico, a aplicao em execuo
atinge 50 usurios simultneos. O fato de o servidor possuir apenas 1 CPU implica dizer
que, em momentos de alta utilizao da aplicao, haver muitas trocas de contexto, ou
seja, muitas alternncias entre os processos em execuo.
Em princpio, a alterao da quantidade de memria no ir afetar a quantidade de trocas
de contexto, porm ir permitir que as mltiplas threads (que sero criadas para atender
uma grande quantidade usurios simultneos) estejam sempre na memria principal, o que
pode conferir maior desempenho aplicao.
Como o enunciado no presta informaes sobre o consumo de memria das threads individuais que so geradas para atender cada um dos usurios simultneos, e levando ainda
em considerao que o tamanho default da heap (ou seja, um tamanho que atende os requisitos de desempenho de uma aplicao mdia) da JVM varia entre 16MB a 64MB, podemos
armar que, para maximizar o desempenho da aplicao, o ideal seria congurar o tamanho
mximo da heap para 512MB.
Portanto, a resposta da questo a alternativa E.

Pgina 20 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

9.

Volume questes de TI

Assuntos relacionados: Java, Sobrecarga de Mtodo, Sobrescrita de Mtodo,


Banca: Cesgranrio
Instituio: BR Distribuidora
Cargo: Analista de Sistemas - Desenvolvimento
Ano: 2008
Questo: 47
Em um sistema desenvolvido na linguagem de programao Java, suponha a existncia de
uma classe Pessoa que possui um mtodo chamado getIdenticador que:

pblico, no

recebe nenhum argumento, retorna um inteiro e declara que no levanta excees. Suponha
ainda a existncia de uma classe Cliente que herda da classe Pessoa e possui um mtodo
chamado getIdenticador que pblico, no recebe nenhum argumento e declara que levanta
a exceo java.lang.Exception. Essa situao um exemplo de
(a). Sobrecarga de mtodo (overload ) sem erros, pois os mtodos tm o mesmo nome.
(b). Sobrescrita de mtodo (overriding ) sem erros, pois o mtodo da classe Cliente
substitui o mtodo da classe Pessoa.
(c). Avaliao preguiosa (late

binding ) sem erros, pois o mtodo correto a ser chamado

ser denido em tempo de execuo.


(d). Mtodo virtual sem erros, pois o mtodo getIdenticador da classe Cliente foi
denido viabilizando sua reescrita.
(e). Erro, pois o mtodo getIdenticador da classe Cliente no pode declarar que levanta a exceo java.lang.Exception, segundo a denio do mtodo getIdenticador na classe Pessoa.

Soluo:
Mtodos em Java podem ser sobrecarregados (overloading ) e sobrescritos (overriding ).
Mtodos so sobrecarregados quando criamos outros mtodos com o mesmo nome, mas
diferentes assinaturas e diferentes denies. Sobrecarga de mtodos permite que instncias
da sua classe tenham uma interface mais simples para outros objetos e se comportem de
modo diferente baseado na entrada para aquele mtodo.
Quando voc chama um mtodo em um objeto, Java compara o nome do mtodo e o nmero
de argumentos para escolher qual denio de mtodo executar.
Para sobrecarregar um mtodo, tudo que voc precisa fazer criar diferentes denies
de mtodos na sua classe, todas com o mesmo nome, mas com diferentes listas de parmetros (ou em nmero ou tipo dos argumentos) e com diferentes corpos.
Note que Java diferencia mtodos sobrecarregados com o mesmo nome, baseado sobre o
nmero e tipos dos parmetros para aquele mtodo, e no sobre o tipo de retorno. Isto ,
se voc tentar criar dois mtodos com o mesmo nome, mesma lista de parmetros, mas com
diferentes tipos de retornos, voc obter um erro de compilao.
Aqui est um exemplo de como sobrecarregar um mtodo.

A classe MeuRetangulo tem

4 variveis para denir o canto superior esquerdo e o inferior direito do retngulo: x1, y1,
x2 e y2.

Pgina 21 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Class MeuRetangulo {
int x1 = 0;
int x2 = 0;
int y1 = 0;
int y2 = 0;
}
Denimos o mtodo constroiRetangulo que possui 4 argumentos inteiros e ajusta o tamanho
do retngulo de acordo com os valores dos cantos, retornando o objeto retngulo 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 mtodo acima alterando a lista de parmetros, passando dois
objetos 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 mtodos denidos na mesma classe, podemos eliminar a alternativa A, pois o problema em questo est ligado ao polimorsmo que a herana
permite (vrias classes implementando o mesmo mtodo).
Por outro lado, sobrescrever (overriding ) mtodos envolve a denio de um mtodo em
uma subclasse que tem a mesma assinatura que um mtodo na superclasse. Ento, quando
um mtodo chamado, o mtodo na subclasse encontrado e executado em vez de ser
executado aquele da superclasse.
Para sobrescrever um mtodo, tudo que voc precisar fazer criar um mtodo em sua
subclasse que tem a mesma assinatura (nome, tipo de retorno, e lista de argumentos) que
um mtodo denido por uma de suas superclasses. Alm disso: o nvel de acesso no pode
ser mais restritivo que o do mtodo da superclasse; o mtodo no pode lanar excees (exceto de

Runtime )

novas ou mais abrangentes que as declaradas no mtodo da superclasse,

porm pode lanar excees mais especcas ou lanar menos excees. Uma vez que Java
executa a primeira denio de mtodo que encontra com a mesma assinatura, ele efetivamente oculta a denio do mtodo original.
Aqui est um exemplo de como sobrescrever um mtodo.
mtodo imprime (), o qual apenas imprime o nome da classe.

Pgina 22 de 51

www.handbookdeti.com.br

A classe Impressao possui o

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Class Impressao {
void imprime () {
System.out.println (``Impressao'');
}
}
Agora, vamos criar uma segunda classe, Impressao2, que tem Impressao como superclasse e
sobrescreve o mtodo imprime () (a diferena 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 implementaes diferentes do mtodo imprime (). A chamada a.imprime () est
chamando um desses dois mtodos, dependendo da classe do objeto a. Achar o mtodo
correto a ser chamado para um objeto particular chama-se
ou amarrao dinmica.

dynamic binding (late binding ),

Isto , temos que amarrar a chamada a.imprime () a uma das

implementaes de imprime () dinamicamente, em tempo de execuo (e no em tempo de


compilao, o que se chamaria

static binding ).

Como vimos acima, a sobrescrita de um mtodo no pode lanar excees novas, pois obteremos erro em tempo de compilao. Portanto, a alternativa

Pgina 23 de 51

www.handbookdeti.com.br

E a correta.

Handbook de Questes de TI Comentadas para Concursos

10.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Java,


Banca: FCC
Instituio: TCE/CE
Cargo: Analista de Controle Externo - Auditoria de Tecnologia da Informao
Ano: 2008
Questo: 80
Recurso Java que permite que uma thread invoque um mtodo em um objeto remoto (semelhante RPC) denomina-se
(a). RMI.
(b).

getPriority().

(c).

matcher.

(d).

FocusRequester.

(e).

RemoteException.

Soluo:
A resposta da questo a alternativa A. O RMI (Remote Method Invocation) uma das
abordagens da tecnologia Java para prover as funcionalidades de uma plataforma de objetos
distribudos. O RMI faz parte do ncleo bsico do Java desde a verso 1.1, com a sua API
sendo especicada no pacote java.rmi e seus subpacotes.
Atravs da utilizao do RMI, possvel que um objeto ativo em uma mquina virtual
Java possa interagir com objetos de outras mquinas virtuais Java, independentemente da
localizao dessas mquinas virtuais.
No desenvolvimento de uma aplicao cliente-servidor usando Java RMI, como para qualquer plataforma de objetos distribudos, essencial que seja denida a interface de servios
que sero oferecidos pelo objeto servidor. Os servios especicados pela interface RMI devero ser implementados atravs de uma classe Java.
O funcionamento tpico de uma aplicao que usa RMI o seguinte: uma aplicao cliente
invoca um mtodo de um objeto no servidor. Os parmetros so serializados e enviados pela
rede para o servidor. No servidor, os dados so deserializados, e a computao realizada.
por m, os resultados so novamente serializados e enviados de volta ao cliente.

Pgina 24 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

11.

Volume questes de TI

Assuntos relacionados: Algoritmos, Linguagens de Programao, Java,


Banca: ESAF
Instituio: Secretaria do Tesouro Nacional (STN)
Cargo: Analista de Finanas e Controle - Tecnologia da Informao / Desenvolvimento de
Sistemas de Informao
Ano: 2008
Questo: 25

Considere o seguinte fragmento de cdigo, para o mtodo run() de uma determinada linha
de execuo (thread), em Java.

1. try{
2.
sleep(1000);
3. } catch (InterruptedException ie){}
Se considerarmos que a linha de execuo no interrompida, correto armar que
(a). o cdigo no compila.
(b). a linha de execuo entra em estado Pronto, aps 1000 milissegundos.
(c). a linha de execuo entra em estado Pronto, em exatamente 1000 milissegundos.
(d). a linha de execuo entra em estado Pronto, em pelo menos 1000 milissegundos.
(e). o cdigo compila, mas no executa, lanando uma exceo do tipo ThreadException.

Soluo:
J que o enunciado referencia um bloco de cdigo, uma boa forma de compreender essa
questo atravs de um cdigo que implemente o bloco correspondente em conjunto com a
infraestrutura necessria para compilao e execuo. Considere, portanto, o cdigo 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();
}
}
possvel perceber que o bloco de cdigo acima contm, em sua totalidade, o bloco de
cdigo a ser analisado na questo.

Ora, se salvarmos esse cdigo em um arquivo Threa-

dedHello.java e tentarmos compil-lo, o compilador Java o compilar sem problemas, visto

Pgina 25 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

que no h erro sinttico ou semntico no cdigo. O que invalida a soluo referenciada pela
opo a.
Aps a compilao do bloco de cdigo, tambm possvel execut-lo. O exemplo abaixo
exibe a chamada ao programa compilado e a sada por ele gerada:

$ time java ThreadedHello


Hello World!
real

0m1.131s

A correta execuo desse programa invalida, portanto, a opo e, j que no houve qualquer exceo levantada e o programa exibiu a sada correta (Hello World, neste caso). No
exemplo acima, o comando time exibe os tempos de execuo de um programa e optou-se
por exibir apenas o tempo real de execuo, de 1,131 segundos.
Resta-nos, portanto, as opes b, c e d.

Para isso, a melhor fonte a referncia da lin-

guagem Java, que diz que o mtodo sleep da classe Thread causa a suspenso temporria
da thread em execuo pelo nmero de milisegundos especicado pelo argumento passado
para o mtodo. Disso decorre que, terminado o tempo de suspenso, a thread retornar ao
estado Pronto em 1000 milissegundos. O problema com as opes c e d so os qualicadores
adicionados a este tempo. Por depender da preciso do timer do computador que executar
esse bloco de cdigo e do escalonador de processos, impossvel garantir que a mudana
para o estado Pronto ocorrer em exatamente 1000 milisegundos, invalidando a alternativa
c. De forma semelhante, a preciso do timer ou o escalonador podem fazer com que o tempo
de suspenso da thread seja menor que 1000 milisegundos, invalidando a alternativa d.
De modo geral, como no h garantias dadas pelo mtodo sleep, melhor selecionar a opo
que responde a pergunta sem restries adicionais. No caso, a alternativa b a correta.

Pgina 26 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

12.

Assuntos relacionados: Teste de Mesa, Java,


Banca: CESGRANRIO
Instituio: Petrobras
Cargo: Analista de Sistemas - Eng. de Software
Ano: 2008
Questo: 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 sada da execuo 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)

Pgina 27 de 51

www.handbookdeti.com.br

Volume questes de TI

Handbook de Questes de TI Comentadas para Concursos

Volume questes 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)

Soluo:
A seguir, o passo a passo da execuo da classe em questo. Na verdade, sero abordados
os principais pontos da execuo.

aps a execuo da 5a linha (Ponto p = new Ponto(a,b);), teremos o seguinte cenrio:


a=1; b=2; c=3; d=4; p.x=1; p.y=2;

aps a execuo da 6a linha (Ponto q = new Ponto(c,d);), teremos o seguinte cenrio:


a=1; b=2; c=3; d=4; p.x=1; p.y=2; q.x=3; q.y=4;

aps a execuo da 7a linha (Ponto r = p;), teremos o seguinte cenrio:


a=1; b=2; c=3; d=4; p.x=1; p.y=2; q.x=3; q.y=4; r <-> p

Perceba que no foi criado um objeto que seria atribudo varivel r. Na execuo dessa
ltima linha, a varivel r foi atribuda ao objeto j existente p. Ou seja, a partir deste ponto,
em qualquer referncia s variveis r e p sero utilizadas as propriedades do mesmo objeto.

aps a execuo da 9a linha (p.setCoordenadas(c,d);), teremos o seguinte cenrio:


a=1; b=2; c=5; d=4; p.x=5; p.y=4; q.x=3; q.y=4; r <-> p

aps as execues das linhas de nmero 10, 11 e 12 (System.out.print(p); System.out.print(q);


System.out.print(r);), teremos a seguinte sada:
(5,4)(3,4)(5,4)

aps a execuo da 13a linha (r.setCoordenadas(a,b);), teremos o seguinte cenrio:


a=1; b=2; c=5; d=4; p.x=1; p.y=2; q.x=3; q.y=4; r <-> p

aps a execuo da 14a linha (a = b;), teremos o seguinte cenrio:


a=2; b=2; c=5; d=4; p.x=1; p.y=2; q.x=3; q.y=4; r <-> p

aps a execuo da 15a linha (q.setCoordenadas(b,c);), teremos o seguinte cenrio:


a=2; b=2; c=5; d=4; p.x=1; p.y=2; q.x=2; q.y=5; r <-> p

aps as execues das linhas de nmero 16, 17 e 18 (System.out.print(p); System.out.print(q);


System.out.println(r);), teremos a seguinte sada:
(5,4)(3,4)(5,4)(1,2)(2,5)(1,2)

Pgina 28 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

13.

Volume questes de TI

Assuntos relacionados: Java, UML, Diagrama de Classes,


Banca: CESGRANRIO
Instituio: Petrobras
Cargo: Analista de Sistemas - Eng. de Software
Ano: 2008
Questo: 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 implementao mostrada acima,


em Java, das classes Produto e Fabricante, bem como da associao entre as mesmas.
(a). Diagrama 1
(b). Diagrama 2
(c). Diagrama 3
(d). Diagrama 4
(e). Diagrama 5

Pgina 29 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Soluo:
Lembre-se que diagramas de classe nos permitem identicar tanto o contedo de uma classe
quanto o relacionamento entre vrias classes. Em um diagrama de classes podemos mostrar
as variveis e mtodos membros de uma classe. Podemos tambm mostrar se uma classe
herda de outra, ou se mantm uma referncia para outra. Em suma, podemos descrever todas
as dependncias do cdigo-fonte entre classes.

Para resolvermos esta questo precisamos

saber:
1. associaes entre classes muito frequentemente representam instncias de variveis que
mantm referncia para outros objetos;
2. a direo da echa nos informa que a classe mantm referncia para outra classe;
3. o nmero prximo cabea da seta nos informa quantas referncias so mantidas;
4. quando existem muitas conexes representamos por estrela (*). Em Java, isso comumente implementado com um Vetor ou uma Lista.
De posse desse conhecimento, estamos aptos a revolver a presente questo.
Inicialmente, analisemos a declarao da classe Produto.

Observe que nela declarado

um membro privado do tipo Fabricante. Em outras palavras, a classe Produto mantm uma
nica referncia para classe Fabricante. Portanto, na associao existente entre Produto e
Fabricante deve existir uma echa apontando para a classe Fabricante com o valor numrico
1 (um) em sua ponta.
Agora, analisemos a declarao da classe Fabricante.

Observe que nela declarado um

vetor (ArrayList) privado do tipo Produto, em outras palavras, a classe Fabricante mantm
muitas referncias para classe Produto. Portanto, na associao existente entre Fabricante
e Fabricante tambm deve existir uma echa apontando para a classe Produto com um asterisco (*) em sua ponta.
Conclumos, ento, que a reposta correta a letra

D.

Pgina 30 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

14.

Volume questes de TI

Assuntos relacionados: Java,


Banca: CESGRANRIO
Instituio: Petrobras
Cargo: Analista de Sistemas - Eng. de Software
Ano: 2008
Questo: 64
Considere o trecho de cdigo a seguir.

if (x != x + 0) {
System.out.println("Condio satisfeita.");
}
Se x for da classe String e tiver sido inicializado, esse trecho de cdigo Java
(a). imprimir a mensagem, apenas se x no for 0.
(b). imprimir a mensagem, apenas se x no tiver sido inicializado com null.
(c). imprimir a mensagem, independente do valor de x.
(d). gerar um erro de compilao.
(e). compilar, mas nunca imprimir a mensagem.

Soluo:
Para resolvermos a referida questo preciso saber que, em Java, o operador de adio (+)
tem precedncia maior que os operadores relacionais de (des)igualdade (!= e ==). Alm
disso, o operador + pode ser utilizado tambm para a concatenao de strings, que o
caso da nossa questo. Pronto, agora ns j temos condies de resolver a questo.
Pelo enunciado, extramos que x uma string inicializada, isto , uma string de tamanho N, onde N pode ser maior do que 0 (zero), se x possuir algum contedo, ou N pode ser
igual a 0 (zero), se x for nula.
Independentemente do contedo de x, o lado direito do operador != produzir uma string
com o tamanho N + 1. Isto , a string concatenada possuir tamanho, e obviamente, contedo, diferente da original (x), o que sempre satisfar a condio de desigualdade existente
no

if.

Logo, esse trecho de cdigo imprimir a mensagem, independente do valor de x.

(alternativa

C).

Pgina 31 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

15.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Java,


Banca: Cesgranrio
Instituio: Petrobras
Cargo: Analista de Sistemas - Infraestrutura
Ano: 2008
Questo: 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(Fornea 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(){

Pgina 32 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes 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 parmetro o valor 4, em Fornea um valor:


, o valor armazenado na varivel theA e apresentado em System.out.print(Resultado : 
+ theA); ser
(a). 10
(b). 12
(c). 14
(d). 16
(e). 18

Soluo:
ClassX tem trs
x ), que usam o operador de acesso private. A varivel size e x so
varivel arrayX um vetor do tipo inteiro. Alm disso, a classe ClassX

O programa Java acima possui duas classes (ClassX e Algoritmo). A classe


atributos (size,

arrayX

do tipo inteiro e a

possui 4 mtodos que so:

public void Met1(int p): este mtodo atribui o valor do


do arrayX. A varivel x incrementada a cada chamada do
public int Met2():
public int Met3():

mtodo

este mtodo retorna o valor da posio

decrementada a cada chamada do mtodo

Met2() ;

p na posio x
Met1() ;

parmetro

do

arrayX.

A varivel

mtodo denido mas no utilizado;

public boolean Met4():

verica se o atributo

da classe

ClassX

igual a -1.

Algoritmo tem trs atributos (theN, theA e theS ) que usam o operador de acesso
static. A varivel theN e theA so do tipo inteiro e a varivel theS do tipo da classe ClassX.
Alm disso, a classe ClassX possui 3 mtodos que so:

A classe

public static int getInt():

este mtodo retorna um valor inteiro lido do teclado;

public static void MetX(): este mtodo possui dois laos de repetio. Um lao faz
atribuies ao vetor arrayX do objeto theS da classe ClassX. Os valores atribudos ao
arrayX so passados um por um como parmetro para o mtodo Met1(). O segundo
lao faz um somatrio dos valores atribudos ao vetor arrayX do objeto theS da classe
ClassX. Alm disso, inicializa a varivel theA com o valor 0;
public static void main(String[] args):

o mtodo

main

no opera sobre quaisquer

objetos. Na verdade, quando um programa se inicia, no h qualquer objeto ainda. O


mtodo

main

esttico executado e constri os objetos de que o programa precisa.

Pgina 33 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

ClassX

O construtor da classe

size :

Volume questes de TI

inicializa seus atributos com os seguintes valores:

recebe o valor passado como parmetro para o construtor (neste programa, quando

o construtor chamado, passado o valor 1000 como parmetro);

arrayX = new int[s] :

o vetor instanciado e seu tamanho denido pelo parmetro

passado para o construtor (neste caso, o valor 1000);

x = -1 :

o atributo x inicializado com o valor -1.

Como pode ser observado, as variveis e os mtodos da classe Algoritmo esto denidos como

static.

A seguir vamos dar uma breve descrio sobre o operador

um atributo como

static,

static.

Quando se dene

isso implica que s haver um atributo para todos os objetos da

classe. Em contraste com atributos no

static,

cada objeto tem sua prpria cpia de todos

os atributos de instncias. Ou seja, o atributo compartilhado entre todas as instncias da


classe. Alm disso, mesmo se no houver qualquer objeto da classe, o atributo esttico est
presente. Ele pertence classe, no a qualquer objeto individual.
Ao executar o programa, o mtodo main chamado e nele executado a linha de comando

theN

getInt(). Como
theN.

enunciado, o mtodo retorna o valor digitado e atribudo

o valor 4 a varivel

Depois chamado a mtodo

MetX(),

que executa dois laos de repetio como descrito

acima.

O primeiro lao executado pelo mtodo







arrayX[0] =
arrayX[1] =
arrayX[2] =
arrayX[3] =
theN = 0;

4,
3,
2,
1,

x
x
x
x

= 0 e
= 1 e
= 2 e
= 3 e

theN
theN
theN
theN

= 4;
= 3;
= 2;
= 1;

O segundo lao executado pelo mtodo






theA
theA
theA
theA

MetX() atualiza os atributos da seguinte forma:

MetX()

atualiza os atributos da seguinte forma:

= 1;
= 3;
= 6;
= 10.

Concluindo, o valor apresentado em System.out.print(Resultado :


Portanto, a alternativa

A est correta.

Pgina 34 de 51

www.handbookdeti.com.br

+ theA) ser 10.

Handbook de Questes de TI Comentadas para Concursos

16.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Java,


Banca: ESAF
Instituio: Controladoria-Geral da Unio (CGU)
Cargo: Analista de Finanas e Controle - Tecnologia da Informao / Desenvolvimento de
Sistemas de Informao
Ano: 2008
Questo: 23

Com relao linguagem de programao Java, correto armar que


(a). o operador instanceof utilizado para chamar o mtodo construtor de uma classe
e criar um novo objeto.
(b). so tipos primitivos de dados: boolean, byte, short, char, int, long, string, oat e
double.
(c). o tipo de dado int suporta apenas nmeros de - 32.768 a 32.767.
(d). a instruo do-while no faz parte das instrues de controle de uxo da linguagem.
(e). os valores booleanos no podem ser usados em uma operao de casting.

Soluo:
(A) ERRADA
O operador instanceof determina se um tipo particular de objeto de uma determinada
classe, ou seja, o instanceof compara um objeto para um tipo (classe) especicado. Voc
pode us-lo para testar se um objeto uma instncia de uma classe ou uma instncia de
uma subclasse, ou uma instncia de uma classe que implementa uma interface especca.
O operador verica se uma referncia de objeto uma instncia de um tipo, e retorna
um 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 que
instanceof sempre retornar falso se <objeto> nulo.
(B) ERRADA
Java uma linguagem fortemente tipada.

Isso signica que toda varivel deve ter um

tipo declarado. Existem oito tipos primitivos em Java. Quatro deles so tipos de nmeros
inteiros, dois so tipos nmeros de ponto utuante, um tipo boolean (intervalo de valores
0 ou 1) e um o tipo de caracteres char, usado para unidades de cdigo no esquema de
codicao Unicode.
Os tipos de nmeros inteiros servem para nmeros sem parte fracionaria, sendo permitido
valores negativos. O Java fornece os quatro tipos de nmeros inteiros a seguir:

Tipo Armazenamento Necessrio

Intervalo de Valores

int

4 bytes

-2,147,483,648 a 2,147,483,647

short

2 bytes

32,768 a 32, 767

long

8 bytes

-9,223,372,036,854,775,808 a 9,223,372,036,854,775,807

byte

1 byte

-128 a 127

Os tipos utuantes representam nmeros com parte fracionria.


utuante so mostrados a seguir:

Pgina 35 de 51

www.handbookdeti.com.br

Os dois tipos de ponto

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Tipo

Armazenamento Necessrio

Intervalo de Valores

oat

4 bytes

+/-3.4E-38 a +/- 3.4E+38

double

8 bytes

+/-1.7E-308 a +/-1.7E+308

O tipo char representa todo o conjunto de caracteres denidos no cdigo de caracter Unicode que usado para denir a extenso das possibilidades de caracteres alfanumricos e
smbolos. O cdigo UNICODE dene 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 expresses condicionais como variveis identicadoras
de estado.
(C) ERRADA
Como pode ser observado na tabela que apresenta os tipos de nmeros inteiros acima, o
intervalo que o tipo de nmeros inteiro pode assumir -2,147,483,648 a 2,147,483,647.
(D) ERRADA
Java suporta comandos condicionais como seleo e laos para determinar o controle do
uxo do programa. Java dene os comandos de seleo (condicionais) if-else e switch, alm
desse, a linguagem Java determina comandos de repetio (laos ou loop) que so: while,
for e do-while. Estas estruturas de controle utilizam os smbolos delimitadores

(chaves)

como limite de sua operao. Por exemplo:

Repetio

Repetio

if(<condio>)

Seleo

switch (<opo>)

Seleo

for( <condio>)

while(<condio>)

do

Repetio

<comando1>

case <const1|var1> :

<comando1>

<comando1>

<comando1>

<comandon>

case <const2|var2> :

<comandon>

<comandon>

<comandon>

else

while(<condio>);

{
<comando1>
<comandon>
}

As chaves so utilizadas quando existe a necessidade de aplicar os comandos de controle


sobre vrios comandos. Quando so aplicados a apenas um comando o uso das chaves no
obrigatria.
(E) CORRETA
A operao de casting responsvel por fazer a converso de um tipo de dado em outro.
Existem regras para esse tipo de converso de tipo, pois podem causar perda de informaes. A operao casting em Java entre tipos primitivos permite converter o valor de um
tipo para outro tipo primitivo. Mais comumente ocorre com os tipos numricos, e existe um
tipo primitivo boolean que no pode ser usado em uma operao de casting, pois os valores
deste tipo s podem ser verdadeiro ou falso.

Pgina 36 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

Embora o conceito de converso seja razoavelmente simples, o uso complicado pelo fato
de que Java tem oito tipos primitivos e vrios tipos de objeto. H trs formas de casting na
linguagem Java:

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

Casting de uma instncia de uma classe para uma instncia de outra classe;

Casting tipos primitivos para objetos.

Como apresentado, realmente o tipo primitivo boolean da linguagem Java no pode ser um
dos operandos da operao de casting, fazendo a assertiva E como correta.

Pgina 37 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

17.

Volume questes de TI

Assuntos relacionados: Programao, Java, Garbage Collection,


Banca: ESAF
Instituio: Secretaria do Tesouro Nacional (STN)
Cargo: Analista de Finanas e Controle - Tecnologia da Informao / Desenvolvimento de
Sistemas de Informao
Ano: 2008
Questo: 21

O que fazer para forar a coleta de lixo de um objeto, em Java? Indique a opo correta.
(a). Invocar nalize().
(b). Remover todas as referncias ao objeto.
(c). Invocar Runtime.gc().
(d). Invocar System.gc().
(e). A coleta de lixo no pode ser forada.

Soluo:
No Java, ao contrrio de algumas linguagens como o C, no necessrio que o programador
se preocupe com a vida de um objeto, se responsabilizando em liberar espaos de memria
antes que ela esgote. O mecanismo de coleta de lixo (garbage

collection )

do Java faz uma

varredura peridica em busca de posies de memria no mais referenciadas e realiza a


liberao das mesmas.
A alternativa A cita o mtodo nalize().
tor de C++ e

Esse mtodo equivalente ao mtodo destru-

no responsvel em forar a coleta de lixo.

Ele chamado diretamente pelo

coletor de lixo logo antes que o objeto seja destrudo. til quando precisamos liberar alguns recursos anteriormente efetivao da eliminao. Por exemplo, se precisarmos fechar
uma conexo antes da destruio do objeto, isso ser possvel denindo o mtodo nalize()
de tal maneira que realize a tarefa de fechar a conexo.
Removendo todas as referncias do objeto, possibilitaremos que ele seja destrudo pelo coletor de lixo, mas essa destruio ocorrer em algum ponto especco de sua execuo, 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 inteligncia devido aos altos
recursos computacionais que so exigidos.
No possvel forar a execuo do coletor de lixo via programao no Java.

Os mto-

dos indicados nas alternativas (C) e (D) apenas noticam JVM que a aplicao gostaria
que o coletor de lixo fosse executado, mas no garantem que ele realmente ser executado
imediatamente.
Dado o exposto, sabemos que a execuo do coletor de lixo no pode ser forada e, portanto,
a alternativa correta a alternativa

(E).

Pgina 38 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

18.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Java, Pacotes Java, Interface com

Usurio,

Banca: ESAF
Instituio: Controladoria-Geral da Unio (CGU)
Cargo: Analista de Finanas e Controle - Tecnologia da Informao / Desenvolvimento de
Sistemas de Informao
Ano: 2008
Questo: 24

A linguagem Java possui uma API (Application Program Interface) que disponibiliza pacotes e classes com diversas funcionalidades para auxiliar no desenvolvimento de aplicaes.
O pacote que contm classes que auxiliam na criao de interfaces de usurio, incluindo
tratamento de grcos e imagens, denominado
(a). java.util.
(b). java.applet.
(c). java.graphic.
(d). java.image.
(e). java.awt.

Soluo:
(A) INCORRETA
O pacote java.util prov classes que tratam de colees, eventos, data e hora, internacionalizao, e classes de utilidade: um tokenizador, um gerador de nmeros aleatrios e um
vetor de bits, no tendo qualquer relao com interfaces grcas.
(B) INCORRETA
O pacote java.applet, da distribuio padro do Java, usado para a criao de applets
Java. Um applet Java uma aplicao fornecida aos usurios em formato de bytecode Java
e so normalmente executados em navegadores com o intuito de prover interatividade a
aplicaes web. Os applets Java so normalmente escritos na linguagem Java, mas nada os
impede de serem escritos em linguagens que possuam compiladores para bytecode da Java
Virtual Machine (JVM), como Jython, Ruby ou Eiel.
Um exemplo de cdigo 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 carreglo:

Pgina 39 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes 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>
Aps a compilao e o carregamento em um navegador, este applet exibir a string Hello,
world!.
Como o pacote java.applet prov uma forma para criao de applets Java e no prov,
necessariamente, funcionalidade para criao de interfaces de usurio, java.applet no a
resposta correta.
(C) INCORRETA
No existe pacote java.graphic na distribuio do J2SE e, portanto, esta alternativa est
incorreta.
(D) INCORRETA
No existe pacote java.image na distribuio do J2SE e, portanto, esta alternativa est
incorreta.
(E) CORRETA
O pacote java.awt fornece classes para criao de interfaces de usurio e desenho de grcos
e imagens na tela. O exemplo de applet exibido acima faz uso, inclusive, do pacote awt para
exibio da string Hello, world! na janela do navegador. Seu resultado exibido na Figura
3 e, por tratar de interfaces grcas, essa a alternativa que responde corretamente a esta
questo.

Figura 3: hello, world em applet.

Pgina 40 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

19.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Java, Pacotes Java,


Banca: ESAF
Instituio: Controladoria-Geral da Unio (CGU)
Cargo: Analista de Finanas e Controle - Tecnologia da Informao / Desenvolvimento de
Sistemas de Informao
Ano: 2008
Questo: 26

Um dos aprimoramentos feitos na linguagem Java foi a introduo da reexo. Com relao
a esse recurso, incorreto armar que
(a). a classe Method do pacote java.lang.reect decodica informaes de modicador
sobre classes, variveis e mtodos.
(b). o uso da reexo se torna mais til quando se est trabalhando com serializao
de objeto.
(c). a classe Field do pacote java.lang.reect gerencia e localiza informaes sobre
variveis de classe e de instncia.
(d). por meio da reexo, um programa Java pode carregar uma classe sobre a qual
ele nada conhece, encontrar as variveis, mtodos e construtores dessa classe e
trabalhar com eles.
(e). a reexo necessria com o uso de JavaBeans, em que a capacidade de um objeto
consultar outro a respeito do que ele pode fazer til ao se criar aplicativos mais
complexos.

Soluo:
A linguagem de programao Java surgiu de um projeto da empresa Sun Microsystems em
1995 com a inteno de possibilitar a programao de qualquer equipamento eletrnico dotado de um microprocessador. Com o slogan Write once, run everywhere (programe um
vez, execute em qualquer lugar), buscou-se (e ainda busca-se) ilustrar um dos maiores benefcios desta linguagem que tem como caracterstica marcante a possibilidade de criao de
cdigo portvel (bytecodes).
Desde sua concepo e popularizao, a Java vem evoluindo e ampliando seus recursos,
ao mesmo tempo que as mquinas virtuais (JVM  Java Virtual Machine) tm se tornado
mais ecientes. Um dos aprimoramentos da linguagem foi a introduo da reexo.
Reexo (ou introspeco) a capacidade de um programa investigar e avaliar caractersticas sobre si mesmo. comumente utilizada por programas que precisam examinar ou
modicar (em tempo de execuo) o comportamento de aplicaes que estejam executando
na JVM. Desta forma, um programa Java pode carregar uma classe sobre a qual nada conhece, encontrar as variveis, os mtodos e os construtores dessa classe, e utiliz-los.
O pacote java.lang.reect da API Java proporciona classes e interfaces para se obter informaes reetidas a respeito de classes e objetos.

A classe Method desse pacote, por

exemplo, fornece informaes sobre mtodos de uma classe ou de uma interface, alm de
permitir o acesso dinmico a tais mtodos. Com isso, pode-se, para cada mtodo examinado,
vericar os modicadores, o nome do mtodo, o tipo de retorno, os parmetros do mtodo e
as excees que o mtodo pode lanar. Semelhantemente, atravs da classe Field do mesmo
pacote, possvel obter dados e informaes sobre os atributos membros da classes, como

Pgina 41 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

modicadores, tipo e nome.


Outras tcnicas e mtodos de programao tiram proveito da Reexo.

A Serializao

o processo de codicao (e posterior decodicao) de objetos em um stream de bytes,


comumente utilizado para tarefas de persistncia, comunicao via sockets, RMI (Remote
Method Invocation), dentre outras. Em Java, esta tcnica benecia-se enormemente da reexo, pois em tempo de execuo possvel inspecionar adequadamente os objetos a serem
serializados. Outro exemplo a criao de aplicativos JavaBeans, cuja API possui diversas
interfaces e classes em seu pacote java.beans. Alm dessas interfaces e classes, a tecnologia
faz uso de modelos de eventos, de serializao de objetos e de reexo. Com a reexo ca
prtico examinar qualquer objeto dinamicamente para determinar (e potencialmente invocar) seus mtodos.
Analisando os itens da questo, observa-se que a primeira opo apresenta uma informao
incorreta ao armar que a classe Method do pacote java.lang.reect decodica informaes
de modicador sobre classes, variveis e mtodos, quando na verdade a classe em questo
fornece informaes apenas sobre mtodos.

Informaes sobre variveis so obtidas pela

classe Field e atravs da classe Class que se obtm informaes sobre as classes.
As demais armaes esto de acordo com a teoria exposta.
questo encontra-se no item a).

Pgina 42 de 51

www.handbookdeti.com.br

Desta forma, a resposta

Handbook de Questes de TI Comentadas para Concursos

20.

Volume questes de TI

Assuntos relacionados: Java,


Banca: CESGRANRIO
Instituio: Petrobras
Cargo: Analista de Sistemas - Eng. de Software
Ano: 2008
Questo: 60
Considere as informaes a seguir para responder s questes de nmeros 60 e
61.
So mostrados a seguir os cdigos fontes das classes Produto e ProdutoTest.

O mtodo

testDescontoValido() invocado pelo framework de testes automaticamente quando os testes so executados, para exercitar o mtodo descontoValido() da classe Produto. O mtodo
assertEquals gera um junit.framework.AssertionFailedError quando os valores de seus argumentos so diferentes entre si.
01 package br.com.exemplo.estoque;
02
03 public class Produto

04
05

private double preco;

06

private double precoMinimo;

07
08

public Produto(double preco, double precoMinimo)

09

this.preco = preco;

10

this.precoMinimo = precoMinimo;

11
12
13

public boolean descontoValido(int percentual)

14

double precoComDesconto;

15

precoComDesconto = this.preco - this.preco * percentual / 100;

16

return (precoComDesconto >= this.precoMinimo);

17
18

Pgina 43 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

01 package br.com.exemplo.estoque;
02
03 import org.junit.Test;
04 import static org.junit.Assert.*;
05
06 public class ProdutoTest

07
08

@Test

09

public void testDescontoValido()

10

int percentual = 90;

11

boolean resultadoEsperado = true;

12
13

System.out.println(caderno);

14

Produto caderno = new Produto(10.00, 1.00);

15

boolean resultado = caderno.descontoValido(percentual);

16

assertEquals(resultadoEsperado, resultado);

17
18

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 cdigos fontes apresentados, conclui-se que


(a). a linha 08 de ProdutoTest um comentrio.
(b). a classe ProdutoTest descende de org.junit.Test
(c). a classe Produto no pode ter descendentes sem construtores explicitamente declarados.
(d). o campo preco da classe Produto s pode ser acessado pelas classes que estiverem
no mesmo pacote de Produto.
(e). org.junit.Assert um pacote.

Soluo:
(A) ERRADA
Em Java, existem 3 (trs) tipos de comentrios:

// Isto o primeiro tipo de comentrio

/* Isto o segundo tipo de comentrio */

/** Este o terceiro tipo de comentrio, muito utilizado para documentao web */

(B) ERRADA
Esta uma confuso muito comum em Java. Na verdade, o cdigo

import org.junit.Test

utilizado para importar apenas a classe Test a m de que a classe ProdutoTest possa
acessar os seus mtodos pblicos (caso existam).
A classe ProdutoTest somente descenderia da classe Teste se ela fosse declarada utilizando-se

Pgina 44 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

a palavra chave extends, da seguinte forma:


Lembre-se que a palavra chave

extends

Volume questes de TI

public class ProdutoTest extends Test.

indicaria que todas as declaraes de mtodos, va-

riveis e campos da superclasse (classe pai) Test seriam herdadas pela classe ProdutoTest.
(C) CORRETA
Um construtor determina como um objeto inicializado pela criao de uma nova instncia de uma classe com os parmetros especicados. Podemos trat-lo como um mtodo
especial: com nome igual ao da classe; sem tipo de retorno (

void);

e no herdado pelas

subclasses.
Caso voc decida em no declarar um construtor em uma classe, Java automaticamente
fornecer um construtor default que no requer nenhum argumento. O construtor default
simplesmente chama o construtor da superclasse, denominado

super(), com nenhum argu-

mento e inicializa as variveis da instncia. Se a superclasse no tiver um construtor que


no requer argumentos, ocorrer um erro em tempo de compilao, que o caso do presente
problema, pois note que a superclasse Produto possui apenas um construtor, obviamente de
mesmo nome, que exige dois argumentos.
Assim, a qualquer subclasse da classe Produto dever declara explicitamente o seu construtor.
(D) ERRADA
O campo preco, como est precedido pelo modicador private, s poder ser acessado dentro
da classe Produto. Nem mesmo as subclasses da classe Produto podero acessar esse campo
diretamente.
Uma forma de tornar esse campo acessvel para leitura, seria por meio da declarao de

public),

um mtodo, pblico (

na classe Produto. Esse mtodo retornaria apenas o valor

armazenado no campo preco.


Por outro lado, se desejssemos que esse campo fosse acessvel para escrita, deveramos
declarar um mtodo, na classe Produto, precedido pelo modicador

protected.

Isso per-

mitiria que apenas as subclasses da classe Produto atualizem o campo preco.


(E) ERRADA
Por conveno, todos os nomes de pacotes e diretrio que o seguem deveriam ser especicados usando-se letras minsculas. Por outro lado, os nomes das classes e interfaces que voc
deseja referenciar dentro do pacote deveriam ser especicados usando-se a primeira letra em
maisculo. Isso permite que outros programadores que usam os seus pacotes determinem facilmente quais componentes so nomes de diretrios e quais so nomes de interfaces e classes.
Assim, na verdade,

org.junit.Assert.

org.junit.* um pacote que contm vrias classes, dentre elas a classe

Pgina 45 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

21.

Volume questes de TI

Assuntos relacionados: Desenvolvimento de Software, Diagrama de Classes,


Banca: CESGRANRIO
Instituio: Petrobras
Cargo: Analista de Sistemas - Eng. de Software
Ano: 2008
Questo: 62

Com base no diagrama acima, analise os trechos de cdigo 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));
Esto corretos

APENAS os trechos de cdigo

(a). I e III
(b). I e IV
(c). II e III

Pgina 46 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

(d). III e IV
(e). IV e V

Soluo:
(I) ERRADA
Observe pelo diagrama que Produto uma classe abstrata, portanto no possvel aplicar
um construtor sobre ela. Em outras palavras, ela no pode ser instanciada. Ns precisamos
assegurar que o objeto a ser construdo pertence a uma classe concreta da classe abstrata
Produto, no caso, ou a classe Veculo ou a classe Peca.

Uma soluo de correo seria o

seguinte cdigo:
Produto p = new Veculo();
(II) ERRADA
Note que apesar da varivel s ser uma instncia da classe Veiculo, ela foi automaticamente
convertida (upcast ) no momento da sua declarao para a interface Seguravel. Desse modo,
esse objeto poder acessar apenas os mtodos que foram denidos na interface, no caso, o
mtodo calculaPremio, e no o mtodo setNome.
(III) CORRETA
Semelhante alternativa anterior, porm com um converso (downcast ) explcita entre a
interface Seguravel e a classe que a implementa (Veiculo). Este tipo de converso permite a
uma classe pai, no caso a interface Seguravel, acessar todos os mtodos da classe lha.
Note, tambm, que s uma instncia da classe Veiculo, e por isso no foi necessrio inserir
mecanismos que vericam o tipo do objeto antes da converso (RITT, do ingls

Type Identication ).
Em Java isso alcanado por meio do operador

instanceof.

Run-Time

O uso adequado desse ope-

rador garante que as converses so sempre seguras, no permitindo que um objeto seja
convertido para uma classe invlida.
(IV) CORRETA
No trecho de cdigo so realizadas duas converses:
1.

Upcast

entre uma instncia da classe, a classe concreta Peca, e a interface Vendavel.

Mais uma vez lembre-se que uma converso para uma classe (ou interface) pai feita
implicitamente;
2.

Downcast

entre a interface Vendavel, que uma instncia da classe Peca, e a classe

abstrata Produto. Observe, nesse caso, que a converso realizada para a classe pai
(Produto) da classe instanciada (Peca), o que perfeitamente aceitvel uma vez que
toda Peca um Produto.
Aps a realizao do

downcast

o mtodo setNome da classe Produto apropriadamente

invocado.

Pgina 47 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

(V) ERRADA
No trecho de cdigo, h uma tentativa de realizar um

cast

entre a instncia de Veiculo,

representada por v, para a classe Peca. Tal tipo de cast (entre classe irms) produzir um
erro de compilao, pois as referidas classes possuem mtodos completamente diferentes e
no relacionados.

Pgina 48 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

22.

Volume questes de TI

Assuntos relacionados: Linguagens de Programao, Orientao a Objeto, Herana, Classes e Superclasses, Java, Modicadores de Acesso,

Banca: ESAF
Instituio: Agncia Nacional de guas (ANA)
Cargo: Analista Administrativo - Tecnologia da Informao e Comunicao / Desenvolvimento de Sistemas e Administrao de Banco de Dados
Ano: 2009
Questo: 29

Em Java, para que um mtodo de uma superclasse no seja sobrescrito em suas subclasses,
aplica-se o modicador
(a). static
(b). public
(c). nal
(d). protected
(e). abstract

Soluo:
Esta uma questo que aborda como a linguagem Java aborda um dos principais conceitos
da programao orientada a objetos  a herana. No entanto, antes de explicarmos o que
herana, vamos rever os conceitos de classe, objeto, classe, atributos e mtodos.
Um objeto pode ser denido como uma entidade com limites bem denidos e um signicado para a aplicao. Tais entidades representar elementos fsicos (como um carro, uma
casa, um cliente etc), elementos conceituais (como uma venda, uma matrcula etc), elementos de software (uma lista, um array, um arquivo etc). Uma classe, por sua vez, consiste da
descrio de um grupo de objetos com propriedades e comportamento idnticos entre si.
As propriedades da qual so representadas pelos atributos dos objetos. Um objeto da classe
casa, por exemplo, poderia ter como propriedades 2 portas, 4 janelas, 100 metros quadrados
de rea, entre outras. A combinao de valores dos atributos de um determinado objeto o
que determina o seu estado. Para alter-lo, necessrio utilizar os mtodos. Vamos agora
ao conceito de herana.
A herana um mecanismo que permite criar novas classes a partir de classes j existentes,
aproveitando-se das caractersticas (atributos e mtodos) destas. Ou seja, com a herana
possvel criar classes derivadas (subclasses) a partir de classes bases (superclasses).
As subclasses herdam todos os atributos e mtodos de suas superclasses.

Entretanto, as

subclasses no esto limitadas s caractersticas herdadas de sua superclasse, uma vez que
nas subclasses podem existir atributos e mtodos que no existem na superclasse.
Em alguns casos, as subclasses tambm podem redenir os mtodos herdados, oferecendo
implementaes especializadas para os mtodos quando necessrio. Essa tcnica tambm
conhecida como sobrescrita ou

override.

Recordados alguns dos conceitos bsicos sobre orientao a objetos, vamos agora falar um
pouco sobre as alternativas trazidas na questo  static, public, nal, protected e abstract

Pgina 49 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Volume questes de TI

 que, na linguagem Java, so conhecidos como modicadores de acesso, que so keywords


introduzidas no cdigo para determinar a forma como as classes, mtodos e atributos podem
ser acessados pelas diversas partes do programa.
O modicador static, quando usado em um atributo, serve para criar uma varivel de classe.
Isso signica dizer que este atributo ser comum em todos os objetos da classe, de modo
que as modicaes neste atributo feitas por um objeto se reitam em todos os demais. J
os mtodos, quando denidos como static, impede que estes sejam sobrescritos pelas subclasses. Com isso, esta a resposta da questo.
O modicador de acesso private indica que um um atributos ou mtodos s podem ser
acessados de dentro da classe que os criou. Este modicador de acesso o que permite ao
Java implementar o conceito de encapsulamento.
J o modicador de acesso public determina que a classe, mtodo ou atributo podem ser
acessados por qualquer parte do programa, e a qualquer instante da execuo deste.
O modicador nal determina que a classe, mtodo ou atributo se mantenham imutveis no
decorrer do processamento do programa. Ao utilizarmos o modicador nal em um atributo,
estamos denindo uma constante. J quando aplicamos este modicador a um mtodo de
uma superclasse, impedimos que ele seja sobrescrito em suas subclasses.
Em Java, um pacote uma coleo das classes relacionadas, que podem ser importadas
(por meio do comando import) em programas que necessitem das classes contidas no pacote.

Neste contexto, o modicador protected o que determina que um mtodo ou um

atributo podem ser acessados somente dentro do pacote em que esto contidos.
Por m, temos o modicador de acesso abstract, que servem para declara mtodos ou classes
abstratas. Para recapitulao, mtodos abstratos so aqueles que no so implementados
nas classes, cando esta tarefa a cargo das subclasses.

J uma classe abstrata aquela

que no est completamente implementada, cando a cargo das subclasses implementar o


restante delas.
Diante do exposto, podemos armar que a resposta da questo a alternativa C.

Pgina 50 de 51

www.handbookdeti.com.br

Handbook de Questes de TI Comentadas para Concursos

Questo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

Pgina 51 de 51

Volume questes de TI

Resposta
B
E
A
E
A
A
E
E
E
A
B
A
D
C
A
E
E
E
A
C
D
C

Handbook de TI

Alm do Gabarito

ndice Remissivo
.NET, 5
Algoritmos, 25
Bytecode, 17
Classes e Superclasses, 49
Desenvolvimento de Software, 46
Diagrama de Classes, 29, 46
EAR, 4
EJB, 4
Garbage Collection, 38
Heap, 19
Herana, 49
Interface com Usurio, 39
J2EE, 4, 5, 7, 19
JAR, 4
Java, 11, 13, 15, 17, 19, 21, 24, 25, 27, 29, 31,
32, 35, 38, 39, 41, 43, 49
Java Transaction API (JTA), 7
JavaServer Pages (JSP), 11
JEE, 5
Linguagens de Programao, 11, 15, 24, 25, 32,
35, 39, 41, 49
Mquina Virtual Java (JVM), 17, 19
Modicadores de Acesso, 49
MVC, 5, 7
Orientao a Objeto, 49
Pacotes Java, 39, 41
Programao, 38
Servidor de Aplicaes, 4, 5, 19
Sobrecarga de Mtodo, 21
Sobrescrita de Mtodo, 21
Teste de Mesa, 27
Tratamento de Exceo em Java, 15
UML, 29
WAR, 4

52