Un interno classe definito all'interno di un metodo non può accedere alle variabili locali del metodo a meno che queste variabili locali non siano contrassegnate final
. Ho esaminato altri post nello stack overflow e nel java code ranch ma nessuno di essi sembra rispondere esattamente al domanda su come la marcatura delle variabili finali permette alla classe interna di accedere alle variabili locali nel metodo.In che modo contrassegnare una variabile come finale consente alle classi interne di accedervi?
class MyOuter {
private String x = "Outer";
void fly(final int speed) {
final int e = 1;
class FlyingEquation {
public void seeOuter()
{
System.out.println("Outer x is " + x);
}
public void display()
{
System.out.println(e);// line 1
System.out.println(speed);// line 2
}
}
FlyingEquation f=new FlyingEquation();
f.seeOuter();
f.display();
}
public static void main(String args[])
{
MyOuter mo=new MyOuter();
mo.fly(5);
}
}
Spiegazioni ho trovato a questo: le variabili
locali vengono memorizzate su stack e, non appena la chiamata al metodo termina la pila è spuntato e variabili locali inaccessibili mentre variabili locali finali sono memorizzati nella sezione dati della memoria consentendo potenzialmente di accedere a JVM
anche dopo la fine della chiamata al metodo. Dov'è il data section of memory
? Credo che tutte le variabili locali definitive o non siano memorizzate nello stack. Quando il metodo viene rimosso dallo stack, la variabile finale verrà rimossa con esso. È che il valore nella variabile finale è memorizzato con l'oggetto nell'heap?
Non supporta i campi non finali in quanto potrebbero essere modificati, sia dal metodo o dalla classe e questo non è supportato perché in realtà ci sono due diversi campi/variabili.
Questo [SO link] (http://stackoverflow.com/a/1299889/1168372) potrebbe essere utile – Sujay
ho aggiunto una risposta. Spero che ti abbia aiutato a leggere la mia risposta –