modificador final:
As variáveis-membro finais modificadas devem ter um valor inicial especificado explicitamente pelo programador.
Campo de uma classe: O valor inicial deve ser especificado em um bloco de inicialização estático ou na declaração do Campo.
Campo de Instância: O Campo deve ser declarado em um bloco de inicialização não estático ou o valor inicial deve ser especificado no construtor.
variáveis locais finais: devem ser inicializadas explicitamente pelo programador.
Qual é a diferença entre variáveis básicas modificadas finais e variáveis de tipo de referência?
Variáveis básicas modificadas por final: Variáveis básicas não podem ser reatribuídas.
Variável de referência final modificada: Só é garantido que o endereço referenciado por este tipo de referência não será alterado, ou seja, refere-se sempre ao mesmo objeto, mas este objeto pode mudar completamente.
Copie o código do código da seguinte forma:
/**
*/
importar java.util.*;
classe pública Demo5
{
público estático void principal(String[] args)
{
B final = novo B(22);
b.teste();
// Altera legalmente o valor, mas ainda aponta para a mesma referência
b.setAge(20);
System.out.println(b.getAge());
// ilegal
// b = nulo;
b.teste2();
}
}
/**
fian modifica variáveis de membro
*/
classe A
{
//legítimo
final int a = 10;
//Especifica o valor inicial no construtor ou bloco de inicialização
cadeia de caracteres final;
final intc;
duplo estático final d;
{
str = "olá";
//ilegal
//a = 100;
}
estático
{
d = 100;
}
// O construtor pode especificar valores iniciais para campos não especificados no bloco de inicialização
públicoA()
{
// ilegal
//str = "ddd";
c = 1000;
}
mudança dupla públicaFinal()
{
// Você não pode especificar um valor inicial para final em um método normal
// retorno d = 1000,90;
retornar 0;
}
}
/**
fial modifica objetos de array
*/
classe B
{
idade interna privada;
públicoB()
{
}
público B (int idade)
{
esta.idade = idade;
}
public void setAge(int idade)
{
esta.idade = idade;
}
public int getIdade()
{
retorne esta idade;
}
teste de vazio público()
{
final int[] arr={23.434.56.898};
System.out.println(Arrays.toString(arr));
Matrizes.sort(arr);
System.out.println(Arrays.toString(arr));
arr[2] = 200;
System.out.println(Arrays.toString(arr));
//A seguinte reatribuição de Arr é ilegal
// arr = nulo;
}
/**
Aprofunde sua compreensão do final
*/
teste de vazio público2()
{
String str1 = "Futuro melhor";
//Referência direta ao "Futuro Melhor" no pool constante
String str2 = "Lindo"+"Futuro";
//verdadeiro
System.out.println(str1 == str2);
String s1 = "Linda";
String s2 = "Futuro";
Sequência s3 = s1+s2;
//false s1 s2 é apenas uma variável que não pode ser determinada em tempo de compilação
//Se você quiser determiná-lo em tempo de compilação, use final para modificar s1 s2
System.out.println(str1 == s3);
}
}
Vocês sabem algo sobre o modificador final em Java, acredito que tenha sido explicado claramente nos comentários, então não entrarei em detalhes aqui.