在我的案例中合理的代码解决方案

时间:2013-05-16 10:15:18

标签: java

在这里学习Java的老兄。 我在学校做了一个任务,我们用一些简单的GUI制作了一个小星球大战游戏。在我的SaveToFile()方法和ReadFromFile()方法中,我的方法会抛出异常。 这没关系,一切正常。

但在作业中它说: “有些方法可能会抛出异常。这些方法需要合理处理。” 我不明白这意味着什么。它显然与试图避免代码重复有关。有人有任何提示吗?是否可以重用错误的方法?

这是我的代码:

private void readFromFile()
{
    try{
        gui.makeInVisible();
        FileInputStream fis = new FileInputStream("Savegame.obj");
        ObjectInputStream ois = new ObjectInputStream(fis);

        Battleground battleground = (Battleground) ois.readObject();
        GUI gui = new GUI(battleground);
        BattleController bc = new BattleController(gui, battleground);
        ois.close();
    }
    catch (IOException e) {
        gui.updateActionField("Something went wrong... Did you delete the file Savegame.obj while playing?");
        e.printStackTrace();
    }
    catch (ClassNotFoundException f) {
        System.out.println("Woops. This game looks broken! Did you delete the whole battleground class?");
    }
}
private void saveToFile() {
    try{
        // Serialize data object to a file
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Savegame.obj"));
        out.writeObject(battleground);
        Serialize data object to a byte array
        ByteArrayOutputStream bos = new ByteArrayOutputStream() ;
        out = new ObjectOutputStream(bos) ;
        out.close();

        // Get the bytes of the serialized object
        byte[] buf = bos.toByteArray();
    } catch (IOException e) {
        gui.updateActionField("Something went wrong with saving the file. And we really don´t know what I am afraid!");
    }
}

感谢。

5 个答案:

答案 0 :(得分:3)

我认为你已经为学校作业做了一些“合理的例外处理”,但是你仍然应该在你关闭输出流的地方添加一个finally块。如果现在发生异常,则流将永远不会关闭。

答案 1 :(得分:2)

SaveToFileReadFromFile可能会抛出Exception,例如,如果找不到文件,则分配要求的是您不要让这些异常传播并破坏您的程序他们将会发生这种情况。

从技术角度来看,这意味着你应该做这样的事情(假设这是你的ReadFromFile,我在没有经过测试的情况下编写它只是为了解释这一点):

try {
    String sCurrentLine;
    BufferedReader br = new BufferedReader(new FileReader(pathToFile));
    while ((sCurrentLine = br.readLine()) != null) {
    System.out.println(sCurrentLine);
    }
} catch (IOException e) {
    // here you should handle the IOException, maybe you want
    // to notify the user, or probably exit the program with 
    // a log in the console or whatever else
} 

一般来说,让Exception传播不是一个好主意,你应该在你的代码中处理它们时应该处理它们;在不知道您的代码的情况下,我的假设是您应该立即在从文件中读取的方法中立即执行此操作并立即通知用户。

正如@cHao在评论中所建议的那样,给ReadFromFile通知用户的责任并不是一个合适的解决方案,这取决于您构建代码的方式,您可能希望让Exception传播更进一步,直到你达到一个课程,通过对应用程序的更广泛理解,可以选择做什么。

答案 2 :(得分:1)

如果在代码中使用异常,则必须在使用函数的位置处理它们。每次处理或处理异常时,您都可以记录异常,打印出来等等......但处理本身对每种情况都非常具体。

没有'所有例外的魔法代码'。在每种情况下恢复并采取相应行动都是你的工作。

网上有很多关于正确异常处理的教程,例如:http://www.tutorialspoint.com/java/java_exceptions.htm

并且不要在没有处理它们的情况下调用可以启动异常的函数,因为这会导致程序崩溃。

答案 3 :(得分:0)

您可以查看java http://docs.oracle.com/javase/tutorial/essential/exceptions/

中的异常处理

您可能会理解应该处理哪种异常,哪种异常,以及处理异常/错误的不同方法。

可能在您的情况下,您必须捕获异常并抛出自定义异常,或者可能只显示更合理的注释/日志。

答案 4 :(得分:0)

您应该捕获从文件输入/输出抛出的任何异常,并执行任何清理代码,例如关闭连接。它也可以向用户显示错误消息。

这就是我所说的“合理”