获取类的实例

时间:2013-11-14 13:33:25

标签: java class instance

我想知道是否有人可以告诉我如何从课堂上获取实例。
这是我的代码到目前为止,我从另一篇文章中看到了这个,但我一直得到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");"

收到错误

4 个答案:

答案 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;
   }
   }