在Java中进行前向引用

时间:2016-10-22 11:39:07

标签: java

我有一个方法:

void foo() {
  int y = 5 + x;
  int x = 2;
}

它会编译吗? 我认为应该。他们说Java支持前向引用,即我可以在声明之前使用变量。我是对的吗?

3 个答案:

答案 0 :(得分:3)

您不需要其他人来判断它是否编译。只需运行编译器你自己

另一个编辑:转发声明仅适用于方法,但不适用于字段

编译:

PageNavigationService

但这会编译:

public class Test {
  int y = 5 + x;
  int x=  2;
}

答案 1 :(得分:1)

它不会编译,因为在内部方法中你试图使用变量x,它不存在。内部方法代码逐行执行。

此代码可以使用:

public class Test
{
    void example()
    {
        int y = 5 + x;
    }

    int x = 5;
}

这是因为前向引用仅适用于类中的字段。

答案 2 :(得分:0)

嗯......你为什么不试试呢?这样,你会毫不犹豫地得到答案。 Java Compiler Online

然而,要回答您的问题,必须在使用之前分配变量。 Java本身不是前向引用。编译器如何知道未分配变量的值?

Forward Refencing In Java 基本上,如页面所示,如果您确实需要前向引用,则可能会创建一个丑陋的黑客。我不会这样做,但是总是将变量的值存储在例如类中,然后使用getter方法来获取变量的值。这比使用他们在该页面上建议的丑陋黑客更合适。

因此,Java可以是前向引用,但语言本身不是。