Questão nº 41
Questão de Tecnologia da Informação · CESGRANRIO CAIXA 1/2021/NM (nº 41)
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?
- A3
- B4
- C19
- D27
- E31 (alternativa correta)
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
MnopBrodasse (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*=2do construtor deMnopAou oz+=ydo bloco de instância deMnopB. - (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
MnopBroda ANTES de qualquer objeto, resetandox,yezpara 1. Depois, ao criar o objeto,xvira 2 (construtor deMnopA),yvira 12 (bloco deMnopA+ construtorMnopB),zvira 13 (bloco deMnopA+ bloco deMnopB), somando 27. Mas falta o passo crucial: o bloco estático deMnopBroda 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
MnopBroda primeiro (x=y=z=1). Ao criarMnopB(2), a superclasseMnopAé inicializada: bloco de instância (y+=5→ y=6,z+=10→ z=11) e construtor (x*=2→ x=2). Depois, a subclasseMnopB: 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.