-3
## Class B ##
    public class ClassB{

    public ClassB() {
    }

    public String getAddress() {
        return "Address";
    }
      }

## Class A ##
    public class ClassA{
    private ClassB classb;

    public ClassA() {
    }

    public void setClassb(ClassB classb) {
    this.classb = classb;
}
    public void getAddress() {
         System.out.println(classb.getAddress());
    }
      }

## Main Class ##
        public class MainClass{

    public static void main(String[] args){
        ClassA classa = new ClassA();
        classa.getAddress();
    }}


----------

当我运行这个程序时,它返回空指针异常。有人可以解释一下 Nullpointer Exception 的原因吗?谢谢你。我尝试过使用 setter 方法,但仍然抛出 nullpointer 异常

4

6 回答 6

1

classBClassA 中的实例未启动。

创建 ClassA 实例时必须实例化 ClassB

public class ClassA{
private ClassB classb;

public ClassA() {
    classb = new ClassB()
}

public void getAddress() {
     System.out.println(classb.getAddress());
}
}
于 2013-06-20T07:12:12.367 回答
1

classb在你的 中声明ClassA,但它没有初始化,所以当你尝试时classb.getAddress(),你会得到一个NullPointerException. 你可以在你的构造函数中初始化它ClassA

 public ClassA() 
 {
    classb = new ClassB();
 }
于 2013-06-20T07:12:28.447 回答
1

classb只是一个引用变量,它将指向一个对象。要从 ClassB 完成任何事情,您首先需要创建类的对象,如下所示

解决方案1:

//initialize at the time of declaration
private ClassB classb = new ClassB();

解决方案 2:

//provide a setter method: 
private ClassB classb;
public void setClassb(ClassB classb)
{
     this.classb= classb;
}

编辑

在你的主要课程中

而不是这些陈述:

    ClassA classa = new ClassA();
    classa.getAddress();

尝试使用这些语句:

    ClassA classa = new ClassA();
    classa.setClassb(new ClassB());//new statement to be inserted!
    classa.getAddress();
于 2013-06-20T07:13:27.210 回答
1

通过以下方式解决此问题:

    public class ClassA{
    private ClassB classb = new ClassB(); //initialize

    public ClassA() {
    }

    public void getAddress() {
         System.out.println(classb.getAddress());
    }
   }
于 2013-06-20T07:14:47.270 回答
0

正如其他人所说,这是由于您的classb成员classa未初始化。要纠正这个问题,您可以在初始化 ClassA 对象时对其进行初始化,或者由于您从 ClassB 的 getAddress() 方法返回一个静态值,因此将 ClassB 的 getAddress() 方法设为静态,不要费心初始化 ClassB 对象,并从 ClassA 的 getAddress() 方法中静态引用 ClassB 的 getAddress() 方法。

例子:

// Class B
public class ClassB
{
    public ClassB()
    {
    }

    public static String getAddress()
    {
        return "Address";
    }
}


// Class A
public class ClassA
{
    public ClassA()
    {
    }

    public void getAddress()
    {
        System.out.println(ClassB.getAddress());
    }
}


// Main Class
public class MainClass
{
    public static void main(String[] args)
    {
        ClassA classa = new ClassA();
        classa.getAddress();
    }
}
于 2013-06-20T07:19:35.617 回答
0

在 ClassA 中 ClassB 未初始化

private ClassB classb = new ClassB();

看看http://www.artima.com/designtechniques/initializationP.html

于 2013-06-20T07:31:26.193 回答