可以通过调用类方法来调用参数化构造函数吗?

时间:2013-12-30 21:32:30

标签: java constructor

据我所知,在创建对象时会调用构造函数。即使没有创建对象,我对如何调用构造函数感到困惑。对于例如考虑我的代码:

public class MyAdapter {

private static final String APPID = "Foobar";
private static final String ENCPWD = "r4nd0mF0064r==";
private MyDelegate delegate = null;

public MyAdapter(MyDelegate delegate) {
    init(delegate);
}

private void init(MyDelegate delegate) {
    try {

        URL url = new URL("Some url");
        QName qname = new QName("http://blahblahblahfoo.com/", "My Service");
        Service service = Service.create(url, qname);
        delegate = service.getPort(MyDelegate.class);

    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public MyDelegate getDelegate() {
    return delegate;
}

public boolean authenticatePrimeMember(String userID, String userPwd) {

    MyDelegate delegate = getDelegate();

    // Other unimportant code using APPID and ENCPWD

    return false;
}
}

现在我从另一个包中调用类方法,比如

boolean auth = MyAdapter.authenticatePrimeMember(someID, LongBeard) 

它完美运行!这不应该发生,因为我没有创建任何对象,因此delegate无法初始化。有人可以解释一下发生了什么吗?

更新:可能的错误已经过了编译器并已部署!老天。

3 个答案:

答案 0 :(得分:4)

由于authenticatePrimeMember()不是静态方法(且delegate不是静态变量),因此您必须在调用之前创建一个名为MyAdapter的{​​{1}}对象,或程序甚至不会编译。再次检查你的代码。

答案 1 :(得分:0)

您可以按类名调用方法,然后使用点运算符(例如class.method)。这可以解释没有实例化对象。但这只能用于类的静态方法,因为静态方法只能在同一个类中调用静态方法。

要访问类中的普通(非静态)方法和属性,静态方法应该引用类的对象。

所以或者你有一个调用静态方法的静态方法,或者一个引用一个对象的静态方法,所以你可以调用非静态方法。

这意味着您必须拥有一个用于调用方法的MyAdapter对象,或者authenticatePrimeMember()是静态的。

除非上述帮助或您创建了该类的对象,否则您必须仔细检查您的代码。

编辑:太糟糕了,你没有标记答案或解决,我现在输入所有这些:(

答案 2 :(得分:0)

这是一个eclipse工作区错误。编译器未检测到错误,部署了应用程序!我不知道这是否是由于遗留应用程序的大小需要10-15分钟才能部署。