Variáveis finais

3 respostas
tRuNkSnEt

Iniciei a jornada em busca da certificação! :slight_smile:

Me deparei com a seguinte afirmação:

“… mas o que significa ter uma variável final de referência a objeto? Uma variável de referencia marcada como final nunca poderá ser reatribuída para referenciar um objeto diferente. Os dados do objeto, no entendo, poderão ser alterados, mas a variável de referência não. Em outras palavras, você pode usar uma variável de referência final e alterar o objeto atribuido a ela, mas não pode alterar a variável de referência para fazê-la referenciar um objeto dirente. Memorize isso: não ha objetos finais, somente referências finais.”

Realmente não intendi, o que isso quer dizer na prática?? Alguem tem algum código de exemplo?

Obrigado;

Eliezer Reis

3 Respostas

Rafael_Nunes

Tenha por parâmetro essa declaração:

Válido:

Inválido:

Ou seja, depois de declarado uma variável de referência para objeto como final, você pode modificar o conteúdo do objeto, porém não pode modificar a referência para outro objeto.

Java_Vinicius_Machin

Quer dizer mais ou menos isso aqui (ilustrando novamente aquilo que o Rafael Nunes afirmou acima):

class SuaClasse {
   private int id;

   SuaClasse( int id ) {
      super();
      this.id = id;
   }
   public int getId()
   {
      return id;
   }

   public void setId( int novoId )
   {
      id = novoId;
   }

   public String toString()
   {
       return "Id= " + id;
   }
}

public class Teste {
   public static void main( String args[] ) 
   {
       final SuaClasse sc = new SuaClasse(10); 
       sc.setId( 20 ); //isso é válido, alterar o objeto sem alterar a referencia
       //ou seja referenciar outro objeto. Isso porque o padrões de bits da 
       //referencia não pode ser alterado uma vez que ele tenha sido inicializado
       
       sc = new SuaClasse(5); //isso não é válido, pois viola o padrões de bits
       //da referencia


       SuaClasse sc2 = new SuaClasse(1); 
       sc = sc2; //isso também não (claro!!!)
   }
}

Erros:

[b]Teste.java:32: cannot assign a value to final variable sc
sc = new SuaClasse(5); //isso não é válido, pois viola os padrões de bits
^

Teste.java:35: cannot assign a value to final variable sc
sc = sc2; //isso também não (claro!!!)
^
[/b] :XD: Joinha agora?

agodinho

Tem um livro muito bom que cobre bem esse assunto,
dá uma olhada em Hardcore Java, 2004 - O´Really.

Woody

Criado 18 de agosto de 2005
Ultima resposta 30 de mar. de 2006
Respostas 3
Participantes 4