我想知道是否有人可以告诉我如何从课堂上获取实例。
这是我的代码到目前为止,我从另一篇文章中看到了这个,但我一直得到NullPointerException
这是我的主要课程。
public class Main {
private String name;
private static Main instance;
public static void main(String[] args) {
Test.sayMyName();
}
public Main(){
instance = this;
}
public static Main getInstance(){
return instance;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
这是我的另一堂课。
public class Test {
public static void sayMyName(){
Main.getInstance().setName("Hi im John");
System.out.println(Main.getInstance().getName());
}
}
我在"Main.getInstance().setName("Hi im John");"
答案 0 :(得分:3)
将以下内容更改为延迟初始化
public Main(){
//instance = this;
}
public static Main getInstance(){
if(instance == null){
instance = new Main();
}
return instance;
}
答案 1 :(得分:2)
请注意,您只在构造函数中设置实例的值,该值从未被调用。 Java有一个很好的技巧,允许你每个类(静态)运行一次代码块。还有其他方法可以做到这一点(阅读this),但这与我认为的一样好。
public class Main{
// member variables
...
// functions like Main(), getInstance(), etc here
...
// static initialization
static{
Main.instance = new Main();
}
}
此外,如果您要强制Main
的用户只能 使用该实例,您可以创建构造函数private
。这样他们只能访问getInstance
。
答案 2 :(得分:0)
静态成员instance只在Main类的构造函数中设置。您的代码中没有任何地方可以调用该构造函数。
答案 3 :(得分:0)
试试这个:
public class Main {
private String name;
private static Main instance;
public static void main(String[] args) {
Test.sayMyName();
}
public Main(){
}
public static Main getInstance(){
if (instance == null) {
instance = new Main();
} ;
return instance;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}