2013-07-24 2 views
1

코드는 다음과 같습니다 다음 Final final = new Final(count);에서내부 변수가 포함 된 변수를 정의 할 수 없습니까?

public class Final { 

    int x; 

    Final(int i) 
    { 
     x = i; 
    } 

    protected void finalize() 
    { 
     System.out.println("Final of the class!" + this.x); 
    } 

    public void generate(int count) 
    { 
     Final final = new Final(count); 
    } 

} 

봐 내가이 줄에서 오류가 발생합니다. (not a statement ; excepted). 내부 변수를 포함하는 변수를 정의 할 수 없습니까?

+1

왜 'final'이라는 이름의 변수를 선언하고 있습니까? –

답변

6

final이 키워드입니다 :

그래서 당신이 할 필요가 이름을 변경할 수 있습니다.

[type] [modifier]=new [type]() 

이 변수 이름을 부족하고 잘못되었습니다

자바로 해석됩니다. 에서

JLS :

FieldDeclaration :
FieldModifiers [옵트] 유형 VariableDeclarators;

우리는 final을 FieldModifier로 지정합니다. 이제 유형과 선언자가 필요합니다. 이는 Type FieldModifiers으로 분석 된 귀하가 제공 한 것과 일치하지 않습니다. 구문 분석으로 인해 유효한 표현식이 생성되지 않습니다.

또한 JLS 섹션 3.9에 따라 final은 키워드이며 명확하지 않은 경우에도 식별자가 아닐 수 있습니다.

+0

좋아,하지만 finalize() 함수가 실행되지 않는다고 생각하십니까? 이유는 무엇일까요? – Yusuf

+0

@Yusuf 변수 이름을 먼저 수정 했습니까? 'finalize (')는 특별한 의미를 가지고있다. – hexafraction

+0

JLS §3.9에 따라 그 라인이 어떻게 해석 될지는 알 수 없다. – arshajii

6

finalkeyword으로, JLS §3.9에 해당하는 변수 이름으로 사용할 수 없습니다.

Final myFinal = new Final(count); 
4

finalkeyword이며 식별자로 사용할 수 없습니다.

JLS §3.9. :

식별자 키워드 (§3.9) 부울 리터럴 (§3.10.3) 또는 널 문자 (§3.10.7 같은 철자 (유니 코드 문자의 시퀀스)를 가질 수 없다) 또는 컴파일 타임 오류가 발생합니다.

0

귀하의 문제는

public void generate(int count) 
{ 
    Final final = new Final(count); 
} 

가 지금은 그것이 문제가 최종부터하는 키워드 마지막을 소문자 인 경우를 제외하고는 문제가되지 않습니다 당신의 변수 이름으로 마지막을 사용하는 마지막 방법에서 유래 한 번 만든 varible을 변하지 않게 만든다. 이것을 피하는 가장 좋은 방법은 키워드를 피하거나 모든 키워드를 대문자로 만들어서 키워드가 아님을 컴파일러에게 알려주는 것입니다.

관련 문제