Questão nº 41

Questão de Tecnologia da Informação · CESGRANRIO CAIXA 1/2021/NM (nº 41)

CESGRANRIO2021Técnico Bancário Novo - Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Ever comentário ↓

As classes Java a seguir pertencem ao pacote default e foram incluídas no arquivo Main.java.

```java
class MnopA {
static int x=10,y=10,z=10;
public MnopA() {
x=2;
}
{
y+=5;
z+=10;
}
}

class MnopB extends MnopA {
public MnopB(int c) {
y
=c;
}

{
z+=y;
}
static {
x=y=z=1;
}
}

public class Main {
public static void main(String[] args) {
MnopB o=new MnopB(2);
System.out.println(MnopB.x+MnopB.y+MnopB.z);
}
}
```

O que será exibido no console quando o método main for executado?

Resposta comentada

Gabarito Alternativa E

Conceito-chave: Em Java, a ordem de execução de uma classe é: 1º) bloco estático (uma única vez, quando a classe é carregada), 2º) bloco de instância (antes do construtor, a cada objeto criado). Em herança, a superclasse é inicializada primeiro (estáticos e depois instância), e só então a subclasse.

  • (A) Incorreta: 3 seria o resultado se apenas o bloco estático de MnopB rodasse (x=y=z=1) e nada mais, ignorando construtores e blocos de instância.
  • (B) Incorreta: 4 não corresponde a nenhuma combinação possível; provavelmente um chute sem seguir a ordem de inicialização.
  • (C) Incorreta: 19 seria obtido se você esquecesse de aplicar o x*=2 do construtor de MnopA ou o z+=y do bloco de instância de MnopB.
  • (D) Incorreta: 27 é a armadilha clássica: você calcula corretamente os blocos de instância e o construtor, mas esquece que o bloco estático de MnopB roda ANTES de qualquer objeto, resetando x, y e z para 1. Depois, ao criar o objeto, x vira 2 (construtor de MnopA), y vira 12 (bloco de MnopA + construtor MnopB), z vira 13 (bloco de MnopA + bloco de MnopB), somando 27. Mas falta o passo crucial: o bloco estático de MnopB roda antes de tudo, e depois os blocos de instância e construtores rodam em cima desses valores resetados.
  • (E) Correta: O bloco estático de MnopB roda primeiro (x=y=z=1). Ao criar MnopB(2), a superclasse MnopA é inicializada: bloco de instância (y+=5 → y=6, z+=10 → z=11) e construtor (x*=2 → x=2). Depois, a subclasse MnopB: bloco de instância (z+=y → z=11+6=17) e construtor (y*=c → y=6*2=12). Soma final: 2+12+17 = 31.

Fonte: CESGRANRIO CAIXA 1/2021/NM Técnico Bancário Novo - Tecnologia da Informação. Reproduzida para fins de estudo.

Continue estudando

Estudar é izi

Pratique milhares de questões como esta, de graça, com explicação e gamificação no Quizinho.

Estudar de graça no Quizinho