Questão nº 34
Questão de Tecnologia da Informação · CESGRANRIO BASA 01/2018 (nº 34)
Considere o código Java listado a seguir, onde a numeração de linhas está sendo utilizada apenas como referência:
```java
i. package teste;
ii. public class Classe {
iii. private static int a = 5;
iv. public static void main(String[] args) {
v. int a = 8;
vi.
vii. }
viii. }
```
Que comando deve ser inserido na linha vi para exibir o valor 5 na console?
- A`System.out.println(a);`
- B`System.out.println(Classe.a);` (alternativa correta)
- C`System.out.println(Integer.parseInt(a));`
- D`System.out.println(super.a);`
- E`System.out.println(this.a);`
Resposta comentada
Gabarito Alternativa B
Conceito-chave: Em Java, uma variável static pertence à classe, não a um objeto. Para acessá-la de fora da classe (ou quando há uma variável local com o mesmo nome), você deve usar o nome da classe antes do ponto: Classe.a.
- (A) Incorreta:
aaqui se refere à variável localint a = 8;(linha v), que tem escopo restrito ao métodomain. Imprimiria8, não5. - (B) Correta:
Classe.aacessa diretamente o atributo estáticoprivate static int a = 5;da classeClasse. Como éstatic, o acesso é feito pelo nome da classe, independente de instância, e imprime5. - (C) Incorreta:
Integer.parseInt(a)tenta converter umaStringemint, masaé umint, não umaString. Isso gera erro de compilação (tipos incompatíveis). - (D) Incorreta:
super.arefere-se ao atributo da superclasse (classe pai). ComoClassenão estende nenhuma classe explicitamente (sóObject, que não tema), isso gera erro de compilação. - (E) Incorreta:
this.arefere-se ao atributo de instância da classe atual. Comoaéstatic(não pertence a um objeto),thisnão pode ser usado para acessá-lo em um contexto estático (métodomain). Gera erro de compilação.
Armadilha do distrator (A): A banca coloca uma variável local com o mesmo nome (int a = 8;) para tentar fazer você esquecer que a variável estática existe. A pegadinha é que, sem o prefixo Classe., o Java sempre prioriza a variável de escopo mais próximo (a local), então System.out.println(a) imprime 8, não 5. Para acessar a estática, você precisa desambiguar usando o nome da classe.
Fonte: CESGRANRIO BASA 01/2018 Técnico Científico - Área de Formação: Tecnologia da Informação. Reproduzida para fins de estudo.