1. Modificação final
As classes modificadas pelo final não podem ser herdadas; portanto, os métodos de membro da classe final não podem ser substituídos e as classes modificadas pelas palavras -chave finais não têm subclasses, portanto os detalhes da implementação da classe não podem ser alterados e não podem ser expandidos. Todos os métodos de membro na classe final serão especificados implicitamente como métodos finais, e as variáveis do membro na classe final podem ser definidas como final conforme necessário.
2. Método de modificação final
Se um método em uma classe for modificado pela palavra -chave final, sua subclasse não poderá substituir o método e só poderá ser herdada pela subclasse. Se um método na classe pai não quiser ser substituído por sua subclasse, o método poderá ser definido como o tipo final. Além disso, o método privado na classe pai (ou seja, o método modificado pela palavra -chave privado) não pode ser substituído pela subclasse. Portanto, o método modificado pela palavra -chave privado na classe pai é padrão para o tipo final. O método modificado pela palavra -chave final tem as seguintes características:
Este método está bloqueado, impedindo que qualquer classe de herança modifique seu significado e implementação;
Eficiente. Quando o compilador encontrar chamando o método final, ele entrará no mecanismo incorporado, melhorando bastante a eficiência da execução;
Além disso, métodos estáticos que usam modificação final não podem ser ocultos nas subclasses de sua classe a que pertencem;
3. Variáveis de modificação final
O significado da palavra -chave final é "isso é insubstituível" ou "estado final";
Então, por que parar a mudança?
O inventor do idioma Java pode evitar alterações devido a dois propósitos:
A. Questões de eficiência:
Certos métodos de certas classes no JDK não podem ser substituídos pelos usuários. O designer pode pensar que o método usado é o melhor método.
Se o usuário o cobrar em particular ou a cobrar devido a negligência, afetará os recursos do sistema da JVM ou sistema;
B. Requisitos de projeto:
Como todos sabemos, alguns casos devem usar palavras -chave finais, como a passagem do parâmetro de classes internas anônimas no método.
Algumas pessoas dizem que as variáveis finais são imutáveis após a tarefa.
Então, o que exatamente isso significa?
Esse invariante refere -se a uma referência, um endereço e o conteúdo do objeto referenciado ainda é mutável.
Ou seja, essa variável final sempre aponta para um objeto, é um ponteiro constante, não um ponteiro para uma constante.
(1) o tipo de dados básico modificado pela palavra -chave final não pode ser alterado depois de ser inicializado;
(2) Se for uma variável do tipo de referência, não pode ser permitido apontar para outro objeto depois de inicializá -lo, mas o conteúdo do objeto apontado pela referência pode alterar. O motivo é: o endereço do objeto de referência armazenado na memória de heap do tipo de dados de referência. Após os modifys finais do tipo de referência, o espaço da memória da heap apontado pela referência (ou o endereço de memória da heap armazenado na referência) não pode ser alterado.
Ao usar o final para modificar uma variável de membro não estática de uma classe, há duas maneiras de inicializar as variáveis de membros:
(3) Inicialize durante a declaração (4) inicialize ao declarar uma variável. A variável é chamada de final em branco, ou seja, em branco final, mas o valor inicial deve ser atribuído a essa variável em todos os construtores da classe em que a variável está localizada.
Ao usar o final para modificar a variável de membro estático de uma classe, há duas maneiras de inicializar a variável de membro estático:
(5) Inicialize ao declarar (6) Inicializar no bloco de inicialização estática Ao modificar as variáveis estáticas finais da interface, há apenas uma maneira de inicializar:
(7) Inicialize ao declarar. Ao usar o final para modificar as variáveis locais, você só precisa garantir que a atribuição seja inicializada antes do uso.
Em resumo, as variáveis modificadas pela palavra -chave final não podem ser inicializadas quando declaradas, mas deve -se garantir que a variável seja inicializada antes do uso. Uma vez inicializado e atribuído, ele não pode ser transferido. Tente analisar os resultados da saída do programa:
classe pública teste {public static void main (string [] args) {string a = "hello2"; String final B = "Hello"; String d = "hello"; String c = b + 2; String e = d + 2; System.out.println ((a == c)); System.out.println ((a == e)); }} 4. Parâmetros de modificação final
Quando o parâmetro do método é o tipo final, você pode ler e usar esse parâmetro, mas não pode alterar o valor do parâmetro. Essa variável é criada quando o método é chamado e é inicializado para o valor do parâmetro correspondente. Seu valor não pode ser alterado antes que o corpo do método seja executado. O valor do parâmetro do tipo de dados básico modificado com a palavra -chave final não pode ser alterado. O tipo de dados de referência modificado com a palavra -chave final não pode ser a referência apontando para outro objeto ou atribuindo um valor a nulo novamente, mas o conteúdo do objeto de referência pode ser alterado usando esta referência. O objetivo do final de modificar os parâmetros não é impedir que a operação do parâmetro altere o valor da variável correspondente fora do método dentro do método chamado, mas para impedir a operação de reatribuição do parâmetro dentro do método, afetando o valor inicial quando o parâmetro for passado. Além disso, a modificação dos parâmetros no método com a palavra -chave final não pode impedir que o conteúdo do valor do parâmetro passado de fora do método seja alterado. Para detalhes, consulte a explicação do tipo de dados de referência de modificação final.