2017-05-04 13 views
-1
class Cell { 
    Point ob ; 
    int distance; 
    public Cell(Point x, int i) { 
     try { 
      ob = x;// works fine 
      distance = i; 
     } catch (Exception e) { 
      System.out.println(e.getStackTrace()); 

     } 
    } 

} 

class Cell { 
    Point ob ; 
    int distance; 
    public Cell(Point x, int i) { 
     try { 
      ob.x = x.x; // throws null pointer exception 
      ob.y = x.y; 
      distance = i; 
     } catch (Exception e) { 
      System.out.println(e.getStackTrace()); 
     }  

    } 

} 

エラー:2番目のコードでNULLポインタ例外が発生します。しかし、コンストラクターで渡されたオブジェクトを割り当てようとすると、正常に動作します。 (作品)あなたの最初の例ではポイントクラスJava nullポインタ例外

+0

'Cell'をインスタンス化するコードを含めることができますか? – Chris

答えて

1

あなたはobフィールドに(Pointパラメータxによって渡された)既存のオブジェクトを割り当てています。 2番目の例では

は、あなたがそれに値を割り当てるためにアクセスobのプロパティをしようとしている、しかしobはどこにでもに割り当てれることは決してありません - それは例外で、したがって、nullです。

1

として
ob.x = x.x; 

obオブジェクトのx変数を取得することは、まずポイントのインスタンスを作成してOBにそれを割り当てる必要があります。

ob = new Point(); 

あなたの問題を解決します。

1

インスタンス化する前にメンバを呼び出します。

ob = x;// works fine 

ここで変数を割り当てるだけですが、使用しようとしません。ここ

ob.x = x.x; // throws null pointer exception 

あなたはPointのインスタンスである、obのメンバの値を設定してみてください。しかし、まだ変数をインスタンス化していない、つまり実際にはnullという意味です。

したがって、最初にインスタンス化するか、引数として渡したxインスタンスの変数xにアクセスしてください。