Você está na página 1de 11

Para todas as perguntas, considerar a versão 5.0 do Java.

 1. O que irá acontecer quando compilar e executar o seguinte program ?
public class MyClass {
private static int x = getValue();
private static int y=1;

private static int getValue(){


return y;
}

public static void main(String[] args) {


System.out.println(x);
}

 a) Erro de compilação devido a restrição de acesso de variáveis private da classe.
 b) Erro de compilação devido à forma como a referência é enviada pelo método getValue()
 c) Erro de compilação devido ao envio de referência de atributo static y
 d) Imprime o número 0  
A chamada  do método estático getValue() acontece ANTES que y tenha um valor 
definido e, portanto, o valor 0 é apresentado.  Se fosse:
private static int y=1;
private static int x = getValue();

o código apresentaria o valor 1 na tela.

 2. O que acontece ao tentar compilar e rodar o seguinte código.

public class Construtor {


String s;

void Construtor (){


s="Construtor";
}

void imprime(){
System.out.println(s);
}

public static void main(String[] args) {


Construtor k = new Construtor();
k.imprime();

 a) O código roda mas nada aparece na saída padrão.
 b) O código não roda e dá um erro na criação do objeto da classe Construtor
 c) O código roda e “null” aparece na saída padrão.
 d) O código roda e “Construtor” aparece na saída padrão.
Aqui é uma questão de atenção: o método void Construtor () não é o construtor da classe pois 
ele tem um retorno (void). Portanto, s é inicializado com o valor null e a chamada k.imprime() 
apresenta o valor null na tela.

 3. O que irá acontece ao tentar rodar e compilar o seguinte programa:

public class Pai {


Pai(int i){
System.out.println("Pai");
}
}

public class Derivada extends Pai{


Derivada(){
System.out.println("Derivada");
}
public static void main(String []args){
Derivada d = new Derivada();
}
}

 a) Compila e imprime Derivado na saída padrão
 b) Compila mas não produz nada na saída padrão.
 c) Compila e imprime Pai na saída padrão.
 d) Não compila. 

O construtor da classe Derivada chama de forma IMPLÍCITA um construto sem parâmetros 
da classe Pai (que não existe). Cuidado, isso somente ocorre nas versões mais recentes do Java. 

 4. Qual é o resultado da compilação e execução do código abaixo ?

public class A {
int b=10;
A(){
this.b=7;
}

int f(){
return b;
}
}

public class B extends A{


int b=15;
}

public class Teste {

public static void main(String[] args) {


A a = new B();
System.out.println(a.f());

}
}
 a) Não compilação
 b) Imprime 15
 c) Imprime 10
 d) Imprime 7
Aparece o 7 porque, após inicializar a variável, o construtor é chamado. Como a classe 
B (instância criada) não tem construtor, um construtor padrão é chamado. Esse construtor 
padrão chama o construtor da classe pai – neste caso a A. 

Assim, ao chamar o construtor da classe A, o valor de b é alterado para 7 e esse valor é 
mostrado na tela.

 5. Qual das alternativas abaixo apresenta um conjunto de modificadores de acesso possíveis e 
legais ao método getMe da classe B ?

public class A {
void getMe() {}
}

public class B extends A {


void getMe() {}
}

 a) public, private, protected
 b) public, protected, default (padrão)
 c) public, private, default(padrão)
 d) private, protected, default (padrão)

O método sobrescrito pode ter modificador de acesso igual ou menos restritivo que o 
da classe original. O método da classe A tem modificador de acesso default. Portanto, os 
modificadores permitidos são protected, public e default. 

 6. O fragmento de código abaixo é equivalente a a qual linha de código ?
if (x>y) z=x; else z=y;
 a) z=x<y?x:y
 b) z=x<y?y:x
 c) z=y<x?x:y
 d) z=y<x?y:x

 7. Qual o resultado da compilação e execução do seguinte trecho de código ?

String s1 = new String(“Motor”);


String s2 = new String (“motor”);
System.out.println(s1.equals(s2)==s2.equals(s1));

 a) Não compila
 b) Imprime na saída padrão true
 c) Imprime na saída padrão false
 d) Imprime na saída padrão true==true
 e) Imprime na saída padrão false==false
Como ambas as Strings foram criadas com o new, cada uma representa um espaço na 
memória e cada uma tem um valor armazenado diferente. Portanto, s1.equals(s2) é false e 
s2.equals(s1) é false. Assim, temos a operação relacional false==false → que é verdadeira. 
Portanto, letra (b). 

 8.  Qual a saída do seguinte trecho de código após ser compilado e executado ?

String str = "Welcome";


str.concat(" to Java!");
System.out.println(str);

 a) Strings são imutáveis, aparece um erro de compilação
 b) Strings são imutáveis, aparece um erro de execução
 c) Imprime Welcome
 d) Imprime Welcome to Java!

Str.concat(“  to Java”) irá resultar em “Welcome to Java” , PORÉM, não irá modificar a 
variável str. Portanto, letra (c) 

 9. O que aconteceu se chamarmos o método infiniteloop ?

void infiniteLoop()
{
byte b = 1;
while ( ++b > 0 )
;
System.out.println("Welcome to Java");
}

 a) O laço nunca termina (loop infinito) 
 b) Imprime Welcome to Java
 c) Erro de compilação
 d) Compila e executa mas não imprime nada na tela

O loop é de um comando vazio – mas o b é incrementado 1 a 1. O que acontece é que qualquer 
valor acima de 128 e menor que 256 (o máximo passa a ser representado usando oito bits) 
passa a ser representado como um valor negativo para o tipo byte.

Exemplo:

byte exemplo1 = 127; // por ser menor que 128, não precisa de cast
byte exemplo2 = (byte) 255; // por ser maior que 128, o cast é necessário
byte exemplo3 = (byte) 254; // idem acima

println(exemplo1); // mostra 127
println(exemplo2); // mostra ­1
println(exemplo3); // mostra ­2
 10.Qual declaração de método main abaixo permitiria que a classe fosse iniciada como um 
programa executável ?
 a) public static int main(char args[])
 b) static public void main(String args[])
 c) public static void MAIN(String args[])
 d) static public void main(String args)

Intermediário
 11. Qual das alternativas abaixo é um tipo de retorno (destacado com ???) legal para o método 
callMe() na classe Test ?

interface X{}
class AA{}
class A extends AA implements X{}
class B extends A{}
class C extends B{}
class SuperTest {
public A callMe() {return new A(); }
}

class Test extends SuperTest {


public ??? callMe() {return new C(); }
}

 a) X
 b) A
 c) B
 d) Test
Como na classe SuperTest callMe retorna A, na classe Test, callMe pode retornar qualquer 
coisa que seja A, ou seja, pode ser B ou C. No nossa caso a resposta é letra (c)

 12.O que acontecerá quando tentar compilar e rodar o seguinte programa ?

public final class Test {

class Inner{
void test(){
if (Test.this.ativo);
MeuMetodo();
}
}

private boolean ativo = false;

public void MeuMetodo(){


System.out.println("Meu Método");
}

public Test(){
new Inner().test();
}
public static void main(String[] args) {
new Test();
}
}

 a) Imprime “Meu Método”
 b) O programa não imprime nada mas termina corretamente
 c) O programa dá erro de execução
 d) O programa dá erro de compilação
new Test() cria uma instância de Test e chama o construtor. O construtor, chama o método 
test() da classe interna Inner. O método test() tem a seguinte lógica:
void test(){
if (Test.this.ativo);
MeuMetodo();
}

Claro que Test.this.ativo é falso (false), mas ao final do if temos um ponto e vírgula (comando 
nulo) que não é executado. Em seguida, MeuMetodo() é chamado. Ele imprime na tela “Meu 
método”.

 13.Considere o seguinte trecho de código:

public class MyProgram{


public static void main(String[] params){
System.out.println(params[0]);
}
}

Ao executar esta classe através do comando
java MyProgram meu teste
A saída no console será:

 a) MyProgram
 b) teste
 c) meu
 d) Erro pois não existe o vetor args

 14.Considere o trecho de código JAVA abaixo.

for(int i = 0; i < 10; i++){


if ( i > 5)
continue;
if ( i == 8)
continue;
System.out.print(i);
if (i == 9) break;
}

A saída no console será:
 a) 012345
 b) 0123459
 c) 0123456789
 d) 01234589

 15.O que acontece quando compilamos e executamos o código abaixo ?

public class MinhaClasse {


static int x=5;

public static void main(String[] args) {


MinhaClasse m1 = new MinhaClasse();
MinhaClasse m2 = new MinhaClasse();
MinhaClasse m3 = new MinhaClasse();
m1.x=10;
m2.x=20;
m3.x=30;

System.out.println(m1.x);
System.out.println(m2.x);
System.out.println(m3.x);

 a) Apresenta um erro de compilação
 b) Imprime
10
20
30
 c) Imprime
30
30
30
 d) Imprime
5
5
5
Variável estática é de toda a classe, portanto, o valor 30 vale para m1, m2 e m3.

 16.O que será impresso na saída padrão se a seguinte classe for executada usando o comando:
java Test 1 dois 3 

public class Test {


static public void main(String[] args) {
int k = Integer.parseInt(args[1]);
}
}

 a) 1
 b) dois
 c) 3
 d) Lança uma exceção NumerFormatException
Pois está tentando converter “dois” para Integer. 

 17. Qual das seguintes afirmações é verdadeira ?
 a) Assim que o contador de referência de um objeto  atinge zero, este será imediatamente 
coletado pelo garbage collector.
 b) O método finalize() não será invocado mais de uma vez para o mesmo objeto
 c) O método finalize() não pode ser sobrecarregado.
 d) A implementação do garbage collector é independente da JVM

 18.Qual será o resultado da compilação e execução do seguinte código ?

public class Test{


void teste() { System.out.println(“Super”); }
}

public class SubTest extends Test{


void teste() { System.out.println(“Sub”); }
}

public class RodaTest{


public static void main(String[] args){
Test t = new SubTest();
t.teste();
}
}

 a) Erro de compilação.
 b) Imprime Super
 c) Imprime Sub
 d) Compila, roda mas não imprime nada

O método teste(0 chamado é da instância, portanto, da classe SubTest.
 19.O que será escrito na saída padrão quando o programa a seguir for compilado e executado ?

public class Binario {


int a;
int b;

public void f(){


a=0;
b=0;
int[] c = {0};
g(b,c);
System.out.println(a+" "+b+" "+c[0]);

public void g (int b, int[] c){


a=1;
b=1;
c[0]=1;
}

public static void main(String[] args) {


Binario o = new Binario();
o.f();
}

 a) 0 0 1
 b) 0 1 0 
 c) 1 0 0 
 d) 1 0 1
Vetor é objeto e é passado como referência. Dentro do método f, a e b são atributos. Dentro do 
método g, b é variável local e a é atributo. 

 20.Qual das seguintes afirmativas é um benefício do encapsulamento ?
 a) Reutilização de código
 b) Execução mais rápida
 c) Menos dependência entre classes
 d) Maior acoplamento

 21. A ordem  dos modificadores de acesso de membros de classe do mais restritivo para o 
menos restritivo está apresentado na alternativa :
 a) private, protected, default, public
 b) private, default, protected, public
 c) public, protected, default, private
 d) public, default, protected, private

Avançado
 22.Qual será o resultado da compilação e execução do seguinte código:

public class MyBoolean {


Boolean[] bool = new Boolean[5];

public static void main(String[] args) {


new MyBoolean().meuMetodo();

public void meuMetodo(){


if (bool[1]==false){
System.out.println("true");
} else {
System.out.println("false");
}
}

 a) Imprime true
 b) Imprime false
 c) Lança uma exceção (Exception)
 d) Dá um erro de compilação

Os valores do vetor Boolean[5] não foram inicializados. Java inicializa o atributo com um 
valor inicial. Mas os elementos do vetor não são inicializados. 

 23. Qual o resultado da compilação e execução do seguinte código:

public class Teste {


void f(){
System.out.println("Outer");
}

public class InnerTeste{


InnerTeste(){
System.out.println("Inner Constructor");
}

void f(){
System.out.println("Inner f");
}
}

public static void main(String[] args) {


Teste t = new Teste();
Teste.InnerTeste test = t.new InnerTeste(){
public void f(){
t.f();
System.out.println("Sub Inner f");
}
};
test.f();

 a) O código não compila.
 b) Imprime Inner Constructor, Outer e Sub Inner f na saída padrão.
 c) Imprime Outer e Sub Inner f na saída padrão.
 d) Imprime Outer, Inner f e Sub Inner f na saída padrão
 e) Imprime Outer na saída padrão

Não é possível acessar t de dentro do método f() no main.
Gabarito
Questão Resposta
1 d
2 c
3 d
4 d
5 b
6 c
7 b
8 c
9 b
10 b
11 c
12 a
13 c
14 a
15 c
16 d
17 b
18 c
19 d
20 a
21 b
22 c
23 a

Você também pode gostar