Campo final y clase anonima

Todavía no estoy satisfecho con la explicación sobre la clase anónima y el campo final. Hubo un montón de preguntas tratando de explicar el problema obvio, pero no he encontrado respuestas para todas mis preguntas :-)

Supongamos el siguiente 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);
        }
    };
}
No es posible compilar este código debido a "no final"k propiedad.Entiendo que el compilador puede reemplazarz Propiedad con el valor declarado durante el tiempo de compilación.

Cuando he buscado una solución, ¿cómo puede funcionar exactamente?i yx encontré estoresponder que dice:

Entonces, el compilador simplemente puede reemplazar el uso de lastPrice y el precio en la clase anónima con los valores de las constantes (en el momento de la compilación, por supuesto), y ya no tendrá el problema de acceder a variables no existentes.

Cómo podría funcionar para los campos.i yx ¿Si son parámetros del método? ¿No se conocen durante el tiempo de compilación? Este enfoque puede funcionar paraz.

Por otro lado, hay una explicación con respecto aproblemas de pila:

Esto permite al compilador de Java "capturar" el valor de la variable en tiempo de ejecución y almacenar una copia como un campo en la clase interna. Una vez que el método externo ha terminado y su marco de pila se ha eliminado, la variable original desaparece, pero la copia privada de la clase interna persiste en la propia memoria de la clase.

Entendería que la clase anónima de alguna manera copió todo el contenido requerido (campos) durante su creación. Desaparecidofinal tiene problema obvio que si algún códigoabajo La declaración de clase anónima cambiaría el valor, la ejecución utilizada posiblestale valores.

Pero está bien, esto debería resolver el problema cuando el método de la clase anónima se ejecuta fuera del alcance de las propiedades utilizadas.

Pero este enfoque debería funcionarincluso sinfinal Declaración, ya que sólo copia todos los campos.

Ambos enfoques me parecen independientes. Hablando de eso, y podría resolver mis preguntas, no he encontrado cómo funcionafinal campo del metodo ¿No se eliminan de la pila incluso si el método se termina? Parece una tontería para mí, pero explicaría muchas cosas :-)

¿Cuál es la respuesta correcta?

Respuestas a la pregunta(3)

Su respuesta a la pregunta