对调用包含'try-catch'块的方法感到困惑

时间:2017-04-20 05:42:28

标签: java try-catch calling-convention

如果你编写一个包含try-catch块的非main方法,以及稍后在另一个方法中,你想调用那个方法,那么程序是什么?我无法理解。

我自己的情况如下:

对于一个简单的Java'迷宫游戏',我写了一个名为'saveGame(String mazeGameSave)的静态void方法抛出IO Exception'。这个方法包含一个'try'块,我在其中编写了将'board'(作为一个二维数组)打印到一个新文件所需的所有代码,然后是一个简短的'catch'块,我刚打印出一个错误消息(您可以在下面看到同一个消息)。

显然,我想在另一个用于处理其他方法的静态void方法中调用此方法,这是由用户输入指定的,我完全按照下面的说明执行此操作,其中String“action”是包含此块的静态void方法的参数。

if (action.charAt(0) == ('S' | 's') 
        && action.charAt(1) == ('a' | 'A') 
        && action.charAt(2) == ('v' | 'V') 
        && action.charAt(3) == ('e' | 'E') 
        && action.charAt(4) == ' ') {
    String [] parts = action.split(" ");
    String saveCommand = parts[0];
    String fileName = parts[1];
    try {
        saveGame(fileName); 
    } catch (IOException e) {
        System.err.printf("Error: Could not save the current game configuration to \'%s\'. \n", fileName);
    }
}

根据我的评论者的建议,这里是saveGame()代码:

   public static void saveGame (String mazeGameSave) throws IOException {
   File save = new File(mazeGameSave);
     try {
      PrintWriter output = new PrintWriter("mazeGameSave");
      output.printf(lives + " " + steps + " " + gold + " " + boardRows + "\n");
     for (int j = 0; j < boardRows; j ++) {
     for (int k = 0; k < columns; k ++) {
      output.print(board[j][k]);
      }
      output.print("\n");
      }
      output.close();
       output.printf("Successfully saved the current game configuration to \'%s\'.", mazeGameSave);
         }
       catch (IOException e) {
        System.err.printf("Error: Could not save the current game configuration to \'%s\'.", mazeGameSave);
       return;
        }}

所以这个关键的愚蠢方面是我在performAction(action)方法中写出了与我在原始saveGame(...)方法中完全相同的'catch'块。这不起作用......那我该怎么做???

1 个答案:

答案 0 :(得分:0)

从saveGame()中删除throws IOException clausule。

您已经在catch (IOException e){}区块中捕获了IOException。

抛出 clausule意味着该方法可以在执行期间抛出异常,因此当您在另一个方法中调用该方法时,您需要通过try catch块包围该调用。