0

我有一个CommonDaoImpl实现接口的类CommonDao。现在我正在尝试通过这样的接口引用访问getRegisterData()ofCommonDaoImplCommonDao

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

但它不起作用并且出现 NullPointerException

所以我稍微更改了我的代码并使用实现的类 CommonDao impl 的构造函数初始化接口引用,如下所示

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

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

但我不明白为什么会这样。

4

4 回答 4

3

在第一种情况下

CommonDao commonDao

它是您的类的成员字段,未初始化,具有默认值,因此在结果中null调用方法nullNullPointerException

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

CommonDao commonDao=new CommonDaoImpl();
于 2012-07-02T14:30:28.247 回答
1

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

于 2012-07-02T14:31:50.347 回答
0

第一个 commonDao 是一个实现类的引用

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

普通道 普通道

commonDao 不引用实现接口的初始化对象,所以当你调用 commonDao.insertRegisterData(objCommonBean); comonDao 为 Null,因为当前没有为其分配内存地址,并且它抛出 NullException(参见图表)

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

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

在此处输入图像描述

于 2012-11-17T22:55:11.810 回答
0

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

于 2012-07-02T14:39:15.573 回答