## 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异常
答案 0 :(得分:1)
ClassA中的classB
实例未经过充实。
创建ClassA实例
时必须实例化ClassBpublic 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