2017-01-07 5 views
-2
class outer3 { 
    private String x = "outer"; 

    void dostuff() { 
     String z = "9"; 
     class inner3 { 
      public void f() { 
       System.out.println("x is " + x + "z=" + z); 
      } 
     } 
     inner3 in = new inner3(); 
     in.f(); 
    } 
} 

I gelesen, dass Verfahren lokale innere Klasse nicht lokale Mitglieder der Methode können, in der sie declared.But dieser Code auch kompiliert (z lokale Variable obwohl)
I verwendet Javac 1.8.0_65.Is dies eine Änderung in Java oder mache ich einen Fehler?Warum wird dieser innere Klassencode kompiliert?

+0

Sie bitte Ihre Quellen zitieren. –

+0

ich in Kathy Sierra scjp Anleitung lesen, aber es alte Ausgabe (Java 6) –

+2

wird in Java 8 geändert: http://stackoverflow.com/questions/4732544/why-are-only-final-variables-accessible-in- anonymous-Klasse – Tom

Antwort

4

In Java SE 8 kann eine lokale Klasse lokalen Variablen und Parameter des umschließenden Blocks zuzugreifen, die letzte oder wirksam sind endgültig. Eine Variable oder ein Parameter, dessen Wert nach der Initialisierung nie geändert wird, ist effektiv endgültig.

In Ihrem Code Variable z ist effektiv endgültig aber wenn man den Wert von z Variable in der „dostuff“ Methode ändern erhalten Sie einen Compiler-Fehler.

Verwandte Themen