在java中抛出Null指针异常

时间:2013-06-20 07:11:22

标签: java

## 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异常。有人可以解释一下Nullpointer异常的原因吗?谢谢。我尝试过使用setter方法,但仍然抛出nullpointer异常

6 个答案:

答案 0 :(得分:1)

ClassA中的classB实例未经过充实。

创建ClassA实例

时必须实例化ClassB
public class ClassA{
private ClassB classb;

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

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

答案 1 :(得分:1)

classb已在您的ClassA中声明,但未初始化,因此当您尝试classb.getAddress()时,您会获得NullPointerException。您可以在ClassA

的构造函数中初始化它
 public ClassA() 
 {
    classb = new ClassB();
 }

答案 2 :(得分: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();

答案 3 :(得分:1)

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

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

    public ClassA() {
    }

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

答案 4 :(得分: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();
    }
}

答案 5 :(得分:0)

在ClassA中,ClassB未初始化

私有ClassB classb = new ClassB();

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