我有一个方法:
void foo() {
int y = 5 + x;
int x = 2;
}
它会编译吗?
我认为应该。他们说Java
支持前向引用,即我可以在声明之前使用变量。我是对的吗?
答案 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本身不是前向引用。编译器如何知道未分配变量的值?
Forward Refencing In Java
基本上,如页面所示,如果您确实需要前向引用,则可能会创建一个丑陋的黑客。我不会这样做,但是总是将变量的值存储在例如类中,然后使用getter
方法来获取变量的值。这比使用他们在该页面上建议的丑陋黑客更合适。
因此,Java可以是前向引用,但语言本身不是。