1

代码如下:

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

4 回答 4

6

final是一个关键字,这意味着您不能根据JLS §3.9将其用作变量名。

因此,您需要做的就是更改名称:

Final myFinal = new Final(count);
于 2013-07-24T19:10:32.557 回答
6

final是一个关键字。

java会将其解释为:

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

这缺少变量名并且无效。

JLS

FieldDeclaration:
FieldModifiers [opt] Type VariableDeclarators ;

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

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

于 2013-07-24T19:11:10.197 回答
4

final关键字,不能用作标识符。

JLS §3.9。

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

于 2013-07-24T19:11:25.767 回答
0

您的问题源于您的最后一种方法是使用 final 作为变量名

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

现在这不是问题,除非它是小写使其成为关键字 final ,这是问题,因为 final 使变量一旦生成就无法更改。避免这种情况的最佳方法是避免使用关键字或将它们全部大写以告诉编译器这不是关键字。

于 2013-07-24T19:30:41.240 回答