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

Java 仅通过调用类方法就可以调用参数化构造函数吗?,java,constructor,Java,Constructor,据我所知,在创建对象时会调用构造函数。即使没有创建对象,我也不知道如何调用构造函数。例如,考虑我的代码: public class MyAdapter { private static final String APPID = "Foobar"; private static final String ENCPWD = "r4nd0mF0064r=="; private MyDelegate delegate = null; public MyAdapter(MyDelegate deleg

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

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;
}
}
现在,当我从另一个包调用class方法时,比如

boolean auth = MyAdapter.authenticatePrimeMember(someID, LongBeard) 
它运行得很好!这不应该发生,因为我没有创建任何对象,因此无法初始化
delegate
。有人能解释一下发生了什么事吗


更新:一个可能的错误经过编译器并被部署!哎呀。

因为
authenticatePrimeMember()
不是静态方法(而且
delegate
不是静态变量),所以在调用之前必须创建一个名为
MyAdapter
MyAdapter
对象,否则程序甚至无法编译。再次检查代码。

由于
authenticatePrimeMember()
不是静态方法(并且
delegate
不是静态变量),因此必须在调用之前创建名为
MyAdapter
MyAdapter
对象,否则程序甚至无法编译。再次检查代码。

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

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

或者您有一个调用静态方法的静态方法,或者一个引用对象的静态方法,这样您就可以调用非静态方法

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

除非上面有帮助,或者您已经创建了类的对象,否则您必须仔细检查代码


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

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

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

或者您有一个调用静态方法的静态方法,或者一个引用对象的静态方法,这样您就可以调用非静态方法

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

除非上面有帮助,或者您已经创建了类的对象,否则您必须仔细检查代码



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

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

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

我的意思是,如果
auth
为false,我就无法登录我的应用程序。问题是为什么编译器没有抱怨调用了非
静态
方法。这里似乎有点问题-authenticatePrimeMember不是静态的,所以您应该无法调用MyAdapter.AuthenticatePrimeMember(someID,somePass)完全正确。这应该是一个编译错误。除非MyAdapter实际上是一个实例化变量,否则你能发布实例化变量的详细信息吗?证明它。显示一个最小的运行示例,因为我非常确定这甚至不会编译。ideone.com可能对这样的问题有用。复制并粘贴足够的代码到(1)显示问题;(2)编译。然后在问题的文本中添加一个链接。我的意思是,如果
auth
为false,我将无法登录到我的应用程序。问题是为什么编译器没有抱怨调用了非
static
方法。这里似乎有点问题-authenticatePrimeMember不是静态的,因此您应该无法调用
MyAdapter.AuthenticatePrimeMember(someID,somePass)
完全正确。这应该是一个编译错误。除非MyAdapter实际上是一个实例化变量,否则你能发布实例化变量的详细信息吗?证明它。显示一个最小的运行示例,因为我非常确定这甚至不会编译。ideone.com可能对这样的问题有用。复制并粘贴足够的代码到(1)显示问题;(2)编译。然后在问题的文本中添加一个链接。不,我没有。我正在使用它作为适配器来委派调用,我刚刚调用了它的方法。@Prince:可能是这样,或者你发布的代码与你正在运行的代码不同。@Prince:请显示调用代码,这样我们就可以避免猜测答案(比如这个)@Jeroen:我不认为这是猜测。根据给出的代码,这是唯一可能的解释。@Keppil至少还有一种可能的解释:另一个包中有另一个
MyAdapter
类。另一个
MyAdapter
类有一个静态方法
公共静态布尔authenticatePrimeMember(String userID,String userPwd)
。我推测还有其他可能的解释。不,我没有。我正在使用它作为适配器来委派调用,我刚刚调用了它的方法。@Prince:或者是这样,或者你发布的代码与你正在运行的代码不同。@Prince:请显示调用代码,这样我们就可以避免错误