Model类调用view.getHumanName()出现空指针异常的原因排查
空指针异常原因分析与解决办法
首先看你给出的Model构造方法代码,问题核心出在代码执行顺序上!
你提到已经在构造方法里加了this.view = view,但从你贴的代码片段来看,你是先调用了view.getHumanName(nameB),之后才给this.view赋值的对吧?Java里构造方法的代码是按从上到下的顺序执行的,当你执行nameA = view.getHumanName(nameB);这行时,view变量还处于未初始化的null状态,自然就触发空指针异常了。
举个直观的例子,你当前的构造方法逻辑大概是这样的:
public Model(Dice die){ nameB = "Toby"; nameA = view.getHumanName(nameB); // 这里view还是null! p1 = new Player(nameA); p2 = new Player(nameB); this.die = ... this.view = view; // 赋值在调用之后,太晚了! }
解决办法很简单:
- 把
this.view = view;这行代码移到构造方法的最开头,确保在调用view的任何方法之前,先完成view的赋值:
public Model(Dice die, View view){ // 注意:构造方法参数里必须传入view对象! this.view = view; // 先完成赋值,让view不再是null nameB = "Toby"; nameA = view.getHumanName(nameB); // 现在调用view的方法就不会报错了 p1 = new Player(nameA); p2 = new Player(nameB); this.die = ... }
另外还要额外确认一点:你在创建Model实例的时候,确实传入了一个非null的View对象,而不是传了null进去。如果调用Model构造时传的view本身就是null,那即使提前赋值也没用哦。
内容的提问来源于stack exchange,提问作者T.Jones8910
相关产品推荐
相关产品推荐

