据我所知,在创建对象时会调用构造函数。即使没有创建对象,我对如何调用构造函数感到困惑。对于例如考虑我的代码:
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
无法初始化。有人可以解释一下发生了什么吗?
更新:可能的错误已经过了编译器并已部署!老天。
答案 0 :(得分:4)
由于authenticatePrimeMember()
不是静态方法(且delegate
不是静态变量),因此您必须在调用之前创建一个名为MyAdapter
的{{1}}对象,或程序甚至不会编译。再次检查你的代码。
答案 1 :(得分:0)
您可以按类名调用方法,然后使用点运算符(例如class.method)。这可以解释没有实例化对象。但这只能用于类的静态方法,因为静态方法只能在同一个类中调用静态方法。
要访问类中的普通(非静态)方法和属性,静态方法应该引用类的对象。
所以或者你有一个调用静态方法的静态方法,或者一个引用一个对象的静态方法,所以你可以调用非静态方法。
这意味着您必须拥有一个用于调用方法的MyAdapter对象,或者authenticatePrimeMember()是静态的。
除非上述帮助或您创建了该类的对象,否则您必须仔细检查您的代码。
编辑:太糟糕了,你没有标记答案或解决,我现在输入所有这些:(答案 2 :(得分:0)
这是一个eclipse工作区错误。编译器未检测到错误,部署了应用程序!我不知道这是否是由于遗留应用程序的大小需要10-15分钟才能部署。