SóProvas


ID
2743201
Banca
FGV
Órgão
MPE-AL
Ano
2018
Provas
Disciplina
Programação
Assuntos

Analise o código Java a seguir.


public class Exemplo {

static class C {

static int a;

int b;

void metodo() {

System.out.println(String.format("%d %d" ,a, b ));

}

}

public static void main(String[] args) {

C myC1 = new C();

C myC2 = new C();

myC1.a=10;

myC2.b=20;

myC1.metodo();

myC2.metodo();

}

}


A execução desse código produz

Alternativas
Comentários
  • A palavra chave static indica que o campo declarado pertence à classe. Portanto, qualquer modificação que ele sofra, surte efeito em todos os objetos da classe. Dessa forma, quando o código myC1.a=10; é executado, o valor de a na classe (e consequentemente para todos os seus objetos) passa a ser 10. Note que o mesmo não ocorre com o b.

     

    OBS Importante: O próprio Java recomenda que os campos estáticos não sejam acessados através de referências de objetos (da forma que é feito na questão), pois não torna claro que as variáveis são de classe.

     

    Alternativa Correta: Letra C

     

    Fonte: https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

  • Não esquecendo que podem haver classes internas como static, porém não classes externas.

     

    O que pode ser estático:

    Métodos;

    Atributos; e

    Classes aninhadas.

  • Pelo motivo da variável "a" ser "static",toda a classe C vai enxergar o valor 10 atribuído a ela, tanto C1 quanto C2, porque ambos pertencem à classe C. Por isso o valor de a permanece 10, tanto na linha 0 10, quanto na linha 10 20.

    A variável "b" fica 0 na 1a.linha porque como ela não é static somente myC2 tem valor 20 para ela, então na 2a.linha será 10 20, somente quando chamo o metodo a partir de C2 aparece seu valor 20.

  • Só um pequeno detalhe:

     

    Sempre que instanciar uma classe e tiver tipo primitivo, como o int, seu valor será "0", se for objeto Integer, seu valor será null.

     

    Lembrando também que o que é static fica dispinível para todas as instâncias e não apenas a uma.

     

    Go @ahead!!!