2017-05-04 75 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()); 
     }  

    } 

} 

錯誤:我在第二個代碼中收到空指針異常。但是,當我嘗試只分配在構造函數中傳遞的對象,它工作正常。點類java空指針異常

+0

你可以包含你的代碼實例'Cell'嗎? – Chris

回答

1

在你的第一個例子(工作)你分配現有的對象(由Point參數x傳遞)到ob領域。

在你的第二個例子,你想訪問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 

這裏您嘗試設置的ob一員,這是Point實例的值。但是,您尚未實例化該變量,這意味着它實際上是null

因此,要麼先實例化它,要麼嘗試訪問您作爲參數傳遞的x實例的x變量。