Bom, vamos lá:
as variaveis de referencia finais nao podem referenciar um objeto diferente se ja estiverem um objeto atribuido a elas.
Uma variável de referência final só tem o seu valor definido uma única vez durante a execução do seu aplicativo. Se ela não for um tipo primitivo (como int, double, char, etc.), ela é uma variável que referencia alguma instância de um objeto qualquer. O que isto quer dizer: quer dizer que você só pode definir o valor desta variável (no caso, a referência a um outro objeto) uma única vez durante o tempo de execução do seu aplicativo.
Vou lhe dar um exemplo em código:
class teste {
public final Object variavelFinal;
public teste(){}
public static void main(Stirng args[])
{
teste novaInstancia = new teste();
teste.variavelFinal = new String("Iniciei a variável final pela primeira e única vez durante o ciclo de vida da aplicação");
// Pronto, agora já iniciei a variável, que referencia um objeto do tipo String.
// Agora, suponhamos que eu me esqueça de tratar-se de uma variável final e tente mudar o seu valor novamente.
teste.variavelFinal = new Integer(666);
// Um erro será disparado. (não me lembro se em tempo de execução ou de compilação)
}
}
Variáveis final servem como constantes dentro do seu sistema. Porém uma constante aprimorada, porque você pode definir o seu valor (apenas uma vez, repetindo) durante a execução do seu programa.
e mais uma pergunta: o que seria um modificador transient e pq so pode ser aplicado a variaveis de instancia e quando utilizo? mais o volatile tb so pode ser aplicado a variaveis de instancia qual diferença…
Para entender o modificador transient, primeiro você deve aprender serialização em Java. Serializar uma instância de uma classe corresponde a salvar o seu estado (o valor de suas variáveis, referências, etc) em um arquivo que, posteriormente, pode ser carregado novamente. Se você declara uma variável com o modificador transient, o seu valor não será incluido no arquivo gerado após a serialização da classe. Só pode ser portanto aplicado a variáveis de instância porque são os valores destas variáveis que queremos persistir em um arquivo e recuperar novamente em tempo de execução. Sacou?