在定义变量之前无法引用变量 - Java

时间:2014-06-21 00:20:43

标签: java reference

public class Wrapper {

    public Wrapper(final String name, final String email) {

        _name= name;
        _email = email;
    }

    private static final Card testCard = new Card(_email, _name);

    private final static String _name;
    private final static String _email;
    }

我希望实例化此类提供名称和电子邮件。

我收到“在为(_email,_name)变量定义行之前无法引用变量:

    private static final Card testCard = new Card(_email, _name);

我可以通过将声明移到顶部来使其工作,但还有其他方法吗?

由于

2 个答案:

答案 0 :(得分:0)

您无法初始化static字段,因为变量_email_name尚未初始化。您应该在testCard之后初始化_email,并初始化_name

例如,您可以在构造函数

中执行此操作
public Wrapper(final String name, final String email) 
{
    _name= name;
    _email = email;
    testCard = new Card(_email, _name);
}

private static Card testCard;

或单独的方法

public static void initialize(String name, String email)
{
    _name= name;
    _email = email;
    testCard = new Card(_email, _name);
}

如果要在构造函数中初始化final,还应删除static修饰符。

答案 1 :(得分:0)

根据您的说明,我认为您不想使用static

  

我希望实例化此类提供名称和电子邮件。

这意味着您在创建类的实例时提供名称和电子邮件。但是使用static表示只有一个名称和一个电子邮件,该类的所有实例共享!除非您的Universe中的每个人都具有相同的名称和相同的电子邮件地址,否则这不是您想要的。所以在static_name_email上摆脱testCard

此外,在构造函数外部初始化testCard无法正常工作,因为程序将在new Card(_email, _name)_email初始化之前尝试执行_name。所以改为

private final Card testCard;

并在构造函数中:

testCard = new Card(_email, _name);
_email_name设置之后

如果你这样做,你应该能够将声明放在任何你想要的地方。 "在变量定义之前无法引用变量"或"非法前瞻性参考"根据{{​​3}},当你有全局(静态)变量时,问题才会出现。