Questão nº 56

Questão de Tecnologia da Informação · CESGRANRIO BASA 02/2021 (nº 56)

CESGRANRIO2021Técnico Científico - Tecnologia da InformaçãoTecnologia da Informação
Gabarito: Ever comentário ↓

Admita que as duas classes Java a seguir pertençam ao
pacote default e ocupem arquivos separados.

```java
public class Va {
private int a=0,b=2,c=4;
private static int sb;
public Va() {
a=2;
b
=3;
c=4;
}
public Va(int x) {
this();
sb+=x;
}
{
sb
=2;
a+=1;
}
static {
sb+=8;
}
public void print() {
System.out.print(a+b+c+sb);
}
}

public class Main {
public static void main(String[] args) {
new Va(1).print();
}
}
```

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 é: 1) bloco static da classe (uma única vez), 2) bloco de instância { } (antes de qualquer construtor), 3) construtor. O this() chama outro construtor da mesma classe, e o static pertence à classe, não ao objeto.

  • (A) Incorreta: 16 seria o resultado se você ignorasse o bloco static e o bloco de instância, calculando apenas a+b+c (0+2+4=6) e somando sb como 10 (8+2), mas o bloco de instância sb*=2 e o sb+=x do construtor com parâmetro alteram o valor.
  • (B) Incorreta: 31 seria obtido se você esquecesse de aplicar o sb*=2 do bloco de instância (ficaria sb=8+1=9 e a=1,b=6,c=16, total 32, não 31) — armadilha comum de inverter a ordem do this() e do bloco.
  • (C) Incorreta: 33 seria o resultado se você aplicasse o bloco de instância antes do static (invertendo a ordem), ou se esquecesse de somar o sb+=x do construtor com parâmetro.
  • (D) Incorreta: 39 seria obtido se você calculasse a=2,b=6,c=16 (após construtor) e sb=8+2=10, mas esquecesse do sb*=2 do bloco de instância (ficaria 2+6+16+10=34, não 39) — outra pegadinha de não aplicar o bloco de instância.
  • (E) Correta: O gabarito oficial é 41. Execução: static { sb+=8 }sb=8. Depois, ao criar new Va(1), o bloco de instância roda primeiro: sb*=2 (8→16) e a+=1 (0→1). Então o construtor Va(int x) chama this(), que executa a*=2 (1→2), b*=3 (2→6), c*=4 (4→16). Retorna ao construtor com parâmetro e faz sb+=x (16+1=17). Por fim, print() soma a+b+c+sb = 2+6+16+17 = 41.

Fonte: CESGRANRIO BASA 02/2021 Técnico Científico - 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