É correto afirmar que:
01 class Circulo
02 {
03 private double raio;
04 public Circulo(double r)
05 {
06 raio = r;
07 }
08 public void setRaio(double r)
09 {
10 raio = r;
11 }
12 public double getRaio( )
13 {
14 return raio;
15 }
16 }
17 public classTeste
18 {
19 private static final Circulo roda = new Circulo(5.0);
20 public static void main (String args[ ])
21 {
22 System.out.println(“Raio = “ + roda.getRaio( ));
23 roda.setRaio(7.0);
24 System.out.println(“Novo raio = ”+ roda.getRaio( ));
25 }
26 }
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Alternativa correta: E - a linha 19 instancia um objeto final da classe Circulo.
Para compreender a questão e identificar a alternativa correta, é necessário entender alguns conceitos da linguagem de programação Java. Vamos analisar os conceitos relevantes e o motivo pelo qual a alternativa E é a correta:
A palavra-chave final em Java é utilizada para definir uma constante, ou seja, uma vez atribuído um valor a uma variável declarada como final, não é possível alterar esse valor posteriormente. No contexto de objetos, quando uma referência é declarada como final, isso significa que a referência não pode ser alterada para apontar para um outro objeto, mas o estado interno do objeto apontado por essa referência ainda pode ser modificado (a menos que seus campos também sejam final).
Na linha 19 do código fornecido:
19 private static final Circulo roda = new Circulo(5.0);
temos a declaração de uma referência final para um objeto da classe Circulo. A palavra-chave private indica que a variável roda só pode ser acessada dentro da classe Teste, e static significa que roda é uma variável de classe, compartilhada entre todas as instâncias de Teste. O objeto do tipo Circulo é instanciado com o valor de raio 5.0, e a partir deste ponto, não é permitido fazer roda referenciar outro objeto, mas é perfeitamente legal chamar métodos que modificam o estado do objeto ao qual roda se refere, como é feito na linha 23 com o método setRaio(7.0).
As outras alternativas estão incorretas pelos seguintes motivos:
- A: A classe Circulo só possui atributos privados, o que pode ser verificado na linha 03.
- B: A linha 23 não apresentará erro de compilação, pois está alterando o estado do objeto e não a referência que é final.
- C: A saída do programa será 'Raio = 5.0' seguido por 'Novo raio = 7.0', já que o raio é alterado pelo método setRaio.
- D: Não haverá erro de execução na linha 10, pois a instrução está alterando o valor de um atributo do objeto e não a referência final.
Portanto, a alternativa correta é a E, pois descreve corretamente o comportamento da linha 19: a criação de uma referência final de um objeto da classe Circulo.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo