我可以用另一个决赛定义最终变量吗?

时间:2014-04-30 01:42:55

标签: java final

这更像是一个假设的问题,但如果我有一些最终的A和另一个最终的B都是整数,我不能这样做:

private final int A = B/2, B = (some kind of other derived number);

我只是想知道为什么。任何帮助都是极好的。 NetBeans在这方面出现了错误,我只是想知道它为什么会出现问题。

PS-弹出的错误表示“非法前向参考”。

5 个答案:

答案 0 :(得分:3)

在声明变量之前,您正在访问变量B。这就是"illegal forward reference".

的原因

B

之前定义变量A
private final int B = (some kind of other derived number), A = B/2;

答案 1 :(得分:3)

假装你是编译器:

private final int好的。用户先生想要一个" const" INT

A变量名为A

= ...这里有值

B/2 HUH?地狱是什么?没有人告诉我任何关于B. STUFF你的用户。我离开这里......

答案 2 :(得分:1)

现有答案没有回答基本问题:

  

为什么我可以使用稍后在源文件中定义的方法,但对变量执行相同操作会导致转发引用错误消息?

答案可以在JLS中找到,更具体地说是JLS $12.4.1

  

静态初始值设定项和类变量初始值设定项以文本顺序执行,并且可能不会引用在声明在使用后以文本方式出现的类中声明的类变量,即使这些类变量在范围内(§8.3.2.3)。此限制旨在在编译时检测大多数循环或其他格式错误的初始化。

答案 3 :(得分:0)

这个问题在这里得到了回答。基本上它意味着您正在尝试使用未启动的变量。

首先初始化B,然后使用它初始化A

private final int B = ?, A = B/2;

illegal forward reference in java

答案 4 :(得分:0)

您的代码没有失败,因为A和B是最终的。它失败了,因为B尚未声明/初始化。如果你先声明它,你就可以正常使用它们。

例如,

private final int C = 5;
private final int B = C/3;
private final int A = B/2;

这很好,因为B首先被声明:)

“final”只表示您无法更改变量。所以像这样的不会工作

private final static int C = 5;
private final static int B = C/3;
private final static int A = B/2;

public static void main (String[] args) {
    A = 5;
}

因为现在我们正在尝试修改A,这是“最终的”