0

CommonDaoImplインターフェイスを実装するクラスがありますCommonDao。今、私はこのようなインターフェイス参照を介してgetRegisterData()ofにアクセスしようとしていますCommonDaoImplCommonDao

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

2番目のケースでは、初期化しています

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

なぜ何が起こるのですか?NullPointerException? これは、CommonServiceImpl をインスタンス化すると、すべてのフィールドがデフォルト値を受け取るためです。commonDao は、デフォルト値が null のフィールドです。

于 2012-07-02T14:31:50.347 に答える
0

最初の commonDao は、実装されたクラスへの参照です

Sicne commonDao はインターフェースであり、メソッドを実装していません

CommonDao コモンダオ

commonDao は、インターフェイスを実装する初期化されたオブジェクトを参照しないため、commonDao.insertRegisterData(objCommonBean); を呼び出すと、現在、メモリアドレスが割り当てられておらず、NullException をスローするため、comonDao は Null です (図を参照)。

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 に答える