【问题标题】:Forward referencing in JavaJava中的前向引用
【发布时间】:2016-10-22 11:39:07
【问题描述】:

我有一个方法:

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

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

【问题讨论】:

标签: java


【解决方案1】:

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

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

编译:

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

但是这样编译:

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

【讨论】:

    【解决方案2】:

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

    此代码将起作用:

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

    这是由于前向引用仅适用于类内的字段这一事实造成的。

    【讨论】:

    • 感谢您的解释
    【解决方案3】:

    嗯...你为什么不试试呢?这样,您无需询问即可得到答案。 Java Compiler Online

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 1970-01-01
      • 2010-10-16
      • 2017-01-20
      • 2020-02-02
      • 1970-01-01
      相关资源
      最近更新 更多