2017-01-09 4 views
0

У меня есть ученик, изучающий экзамен по Java 7 OCP, и он представил мне эту проблему. И он, и я понимаю, что локальная переменная не может использоваться в пределах внутреннего класса метода, если только это не окончательный, но он подарил мне на следующий код, который работает просто отлично:Локальная переменная не может использоваться внутри внутреннего класса. Так почему же этот код работает?

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(); 

    } 

} 

Выход есть:

outer: Outer 2 
outer: local 

Так что же мы оба упускаем?

+5

Это [член класса] (https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) , – Maroun

+3

Возможно, вы компилируете с Java 8, где правило немного изменяется: переменная должна быть только «эффективной» окончательной. –

ответ

3

При компиляции с Java 8 это потому, что фактически окончательное link here