Campo final e classe anônima

Eu ainda não estou satisfeito com a explicação sobre a classe anônima e o campo final. Havia toneladas de perguntas tentando explicar o problema óbvio, mas eu não encontrei respostas para todas as minhas perguntas :-)

Suponha o seguinte código:

public void method(final int i, int j) {
    final int z = 6;
    final int x = j;
    int k = 5;
    new Runnable() {
        public void run() {
            System.out.print(i);
            System.out.print(x);
            System.out.print(z);
            System.out.print(k);
        }
    };
}
Não é possível compilar este código por causa de "unfinal"k propriedade.Eu entendo que o compilador pode substituirz propriedade com o valor declarado durante o tempo de compilação.

Quando eu procurei por solução como exatamente pode funcionai ex Eu achei istoresponda que diz:

O compilador pode então substituir apenas o uso de lastPrice e o preço na classe anônima com os valores das constantes (em tempo de compilação, é claro), e você não terá mais o problema de acessar variáveis ​​inexistentes.

Como isso poderia funcionar para camposi ex se eles são parâmetros do método? Eles não são conhecidos durante o tempo de compilação? Essa abordagem pode funcionarz.

Por outro lado, há uma explicação sobreproblemas de pilha:

Isso permite que o compilador Java "capture" o valor da variável no tempo de execução e armazene uma cópia como um campo na classe interna. Depois que o método externo é finalizado e seu quadro de pilha é removido, a variável original desaparece, mas a cópia privada da classe interna persiste na própria memória da classe.

Eu entenderia que a classe anônima de alguma forma copiou todo o conteúdo necessário (campos) durante sua criação. Ausência definal tem problema óbvio que, se algum códigoabaixo declaração de classe anônima mudaria o valor, a execução usada possívelstale valores.

Mas ok, isso deve resolver o problema quando o método da classe anônima é executado fora do escopo das propriedades usadas.

Mas esta abordagem deve funcionaraté semfinal declaração, uma vez que apenas copia todos os campos.

Ambas as abordagens parecem independentes para mim. Falando nisso - e isso poderia resolver minhas perguntas - eu não encontrei como o trabalhofinal campo do método. Eles não são removidos da pilha mesmo se o método for concluído? Parece um absurdo para mim, mas isso explicaria muitas coisas :-)

Qual é a resposta correta?

questionAnswers(3)

yourAnswerToTheQuestion