-
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!!!