2012-07-02 12 views
0

我有一个类CommonDaoImpl,它实现了一个接口CommonDao。我现在想通过接口来访问的CommonDaoImplgetRegisterData()CommonDao参考这样通过接口引用访问实现的类方法,无需构造函数初始化

public class CommonServiceImpl implements CommonService 
{ 
    CommonDao commonDao 
    public boolean insertRegisterData(CommonBean objCommonBean) { 
     return commonDao.getRegisterData(objCommonBean); 
    } 

但它不工作,thow一个NullPointerException异常

所以我稍微改变我的代码,并与构造函数初始化界面参考实现类CommonDao impl这样的

public class CommonServiceImpl implements CommonService 
{ 
    CommonDao commonDao=new CommonDaoImpl(); 

    public boolean getRegisterData(CommonBean objCommonBean) { 
     return commonDao.insertRegisterData(objCommonBean); 
    } 

但我不明白为什么会发生。

回答

3

在第一种情况下

CommonDao commonDao 

这是你的类,它是联合国initilized的成员字段,它有默认值nullnull结果调用方法为NullPointerException

而在第二种情况下,你正在初始化它

CommonDao commonDao=new CommonDaoImpl(); 
1

为什么会发生什么?空指针异常?它发生了,因为一旦你得到CommonServiceImpl实例化,所有的字段都会收到默认值。 commonDao是默认值为空的字段。

0

这是因为您需要一个CommonDao实例来调用insertRegisterData方法。语句commonDao=new CommonDaoImpl()创建一个实例,调用构造函数并将其指定给commonDao,因此不再是null

0

首先commonDao为参考实现类

Sicne commonDao是一个接口,它没有实现任何方法

CommonDao commonDao

commonDao没有引用实现inter的初始化对象面对面,所以当你调用commonDao.insertRegisterData(objCommonBean); comonDao是Null作为没有存储器地址被当前分配给它,它会引发一个NullException(见图)

CommonDao commonDao =新CommonDaoImpl(); < ---这里初始化

现在commonDao引用了实现接口的initalized对象。所以当你调用commonDao.insertRegisterData(objCommonBean),comonDao接口。 commonDao有一个分配给它的地址,它是一个初始类。所以现在有一个现有的对象可以引用该方法。

enter image description here

相关问题