2017-01-09 2 views
0

J'ai un étudiant qui étudie pour l'examen OCP Java 7, et il m'a présenté ce problème. Lui-même et je comprends qu'une variable locale ne peut pas être utilisé dans la classe interne de la méthode à moins qu'il est définitif, mais il m'a présenté le code suivant qui fonctionne très bien:Une variable locale ne peut pas être utilisée dans une classe interne. Alors pourquoi ce code fonctionne-t-il?

public class TestC195 { 

    public static void main(String[] args) { 
     TestC195 myObject = new TestC195(); 
     myObject.doStuff(); 
    } 

    private String x = "Outer 2"; 

    void doStuff() { 
     String z = "local"; 

     class myInner { 
      public void seeOuter() { 
       System.out.println("outer: " + x); 
       System.out.println("outer: " + z); 
      } 
     } 
     myInner in = new myInner(); 
     in.seeOuter(); 

    } 

} 

La sortie est:

outer: Outer 2 
outer: local 

Alors qu'est-ce qu'on manque tous les deux?

+5

Il est [membre de la classe] (https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) . – Maroun

+3

Vous compilez probablement avec Java 8, où la règle change légèrement: la variable doit seulement être "effectivement" finale. –

Répondre

3

Si vous compilez avec java 8, il est parce qu'il est effectivement finale link here