2013-02-07 1 views
2

자바에서 내부 클래스 사용에 의문이 있습니다. 여기 내 코드가있다."정적 최종"필드가 내부 클래스에 허용되는 이유는 무엇입니까?

코드 : 그것은 허용하지 않는다

public class Test{ 

     public class InnerClass{ 
      public static int num = 10; 
     }  

} 

. "필드 num은 정적으로 선언 할 수 없으며 정적 필드는 정적 또는 최상위 수준 유형에서만 선언 할 수 있습니다."라는 오류 메시지가 나타납니다.

public class Test{ 

     public class InnerClass{ 
      public static final int num = 10; 
     }  

} 

하지만 허용됩니다. InnerClass을 정적 및 최상위 요소로 선언하지는 않았지만 어떻게 작동합니까?

+1

오류가 답변을 알려주지 않습니까? 클래스가 정적 인 경우 또는 최상위 레벨 인 경우 허용됩니다. –

+4

@ KarthikT - 그건 같은 질문이 아닙니다. –

+0

이 질문은 왜 상수 ('static final') 필드가 허용되는지를 묻는 한 걸음 더 나아가고 있습니다. –

답변

6

링크 된 답변에서 인용하십시오. 그들은 컴파일 시간 상수 필드 (§15.28)하지 않는 한

8.1.2 Inner Classes and Enclosing Instances
...
내부 클래스는 를 정적 멤버를 선언하지 않을 수 있습니다.

final은 일단 초기화되면 상수가되며, = 10은 컴파일시 상수 값입니다. 따라서 허용됩니다.

관련 문제