Rom*_*man 2 java null return try-catch nullpointerexception
我有一个非常简单的方法:
public int getScore() {
    return game.gameWindow.userBestScore;
}
Run Code Online (Sandbox Code Playgroud)
问题是它可能发生该game对象或gameWindow不存在.我不想得到Null Pointer Exception.怎么能以正确的方式捕获它?我可以这样做吗:
   public int getScore() {
         try{
             return game.gameWindow.userBestScore;
          } catch(NullPointerException e){
              return -1;
          }
   }
Run Code Online (Sandbox Code Playgroud)
    Viv*_*ath 12
别抓了NullPointerException.
A NullPointerException表示您的代码不遵守某些合同.如果有可能game可以null,那么你需要做一个明确的测试:
if(game != null) {
   ...
}
else {
   ...
}
Run Code Online (Sandbox Code Playgroud)
如果game不应为null,则可以使用确保代码的正确性assert.
assert game != null;
...
Run Code Online (Sandbox Code Playgroud)
更令人担忧的是,这game似乎是你班上的私人成员.在这种情况下game应该不应该null(尽管有可能发生这种情况).你在构造函数中正确初始化它吗?我要说的是,你要做的第一件事就是确保game正确地进行初始化.否则你的代码最终会被不必要的 - 检查所null困扰.例如,如果gameWindow在Game课堂上没有正确初始化怎么办?你需要另外一个 - 检查null:
if(game !== null && game.gameWindow != null) {
   ...
}
else {
   ...
}
Run Code Online (Sandbox Code Playgroud)
因此,您应首先确保正确初始化对象的私有成员.如果是这样,而且事实证明,有一个有效的用例的game存在null,那么你就需要一个明确的null-检查.测试null比捕捉更好总是更好NullPointerException.除了不应该使用异常来控制业务逻辑流的事实之外,如果NullPointerException在链的某个位置生成了有效的(由于编程错误),该怎么办?现在你的catch意志将被捕获,你不会知道它; 这可能导致一些非常讨厌和难以发现的错误.