2017-01-09 9 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 

私たちは何が欠けていますか?あなたは、Java 8でコンパイルされている場合は、それが効果的に最終的なものであるため

+5

それだ[クラスのメンバ](https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html) 。 – Maroun

+3

あなたはおそらくJava 8でコンパイルします。ここでは、ルールはわずかに変更されます。変数は "効果的に"最終的なものでなければなりません。 –

答えて

関連する問題