我们不能定义包含变量里面的类的变量吗?

时间:2013-07-24 19:09:46

标签: java

代码如下:

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

}

看看Final final = new Final(count);我从这一行得到的错误。 (not a statement ; excepted)。我们不能定义包含变量里面的变量的变量吗?

4 个答案:

答案 0 :(得分:6)

finalkeyword,这意味着您不能将其用作JLS §3.9的变量名称。

所以你需要做的就是更改名称:

Final myFinal = new Final(count);

答案 1 :(得分:6)

final是一个关键字。

java会将其解释为:

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

这缺少变量名称并且无效。

来自JLS

  

FieldDeclaration:
      FieldModifiers [opt] 类型VariableDeclarators;

我们将final作为FieldModifier。我们现在需要一个类型和一个声明器。这与您给出的内容不一致,后者被解析为Type FieldModifiers。解析不会产生有效的表达式。

同样根据JLS第3.9节final是一个关键字,可能不是标识符,即使它是明确的。

答案 2 :(得分:4)

finalkeyword,不能用作标识符。

JLS §3.9.

  

标识符不能与关键字(§3.9),布尔文字(§3.10.3)或空文字(§3.10.7)具有相同的拼写(Unicode字符序列),否则会发生编译时错误

答案 3 :(得分:0)

你的问题源于你的上一个方法是使用final作为你的变量名

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

现在这不是一个问题,除非它是小写,使得它成为关键字final这是问题,因为final使得一次变量不可变。避免这种情况的最好方法是避免关键字或使它们全部大写,以告诉编译器这不是关键字。