Java中的例外情况

时间:2012-08-16 20:07:17

标签: java exception web-applications

目前我正在使用Playframework2开发网站。我只是编程的初学者。我读了一些关于异常的书,但现在在现实世界中,异常处理真的很奇怪。

说实话,我并不关心抛出什么异常,我以同样的方式处理所有异常。 return badrequest();。我只使用例外记录。

try{
...
}
catch(Exeption e){
//log
return badrequest();
}

但这是一个很大的样板,写起来真的很烦人,因为每个方法都抛出相同的异常。

您可以提供给我的任何提示,提示或资源?

编辑:

一个例子是我的“全局”配置文件。因为每当我想为这个问题写一个单例时我就需要连接到数据库。

private Datastore connect() throws UnknownHostException, MongoException,
            DbAuthException {

        Mongo m = new Mongo(dbUrl, dbPort);
        Datastore ds = new Morphia().createDatastore(m, dbName);
        boolean con = ds.getDB().authenticate(username, password.toCharArray());
        if (!con)
            throw new DbAuthException();
        return ds;
    }

每次我想连接到db时,这也会导致try和catch。我的问题是我认为我不能很好地处理它们。

代码示例:

public static Result addComment(String title) {
        try {

            Datastore ds = DatabaseConnect.getInstance().getDatastore();
            Form<Comment> filledForm = commentForm.bindFromRequest();
            Comment userComment = filledForm.get();
            userComment.setUsername(Util.getUsernameFromSession(ctx()));
            User.increasePointsBy(ctx(), 1);
            UserGuides.addComment(title, userComment);
        } catch (Exception e) {
            return badRequest();
        }
        return redirect(routes.Guides.blank());
    }

在这种情况下,我懒得写同样的尝试并反复捕捉,这是重复的代码。

也许有一本书解释了如何设计一个带有异常处理的大型应用程序?

2 个答案:

答案 0 :(得分:4)

当您调用方法时,您不一定必须在那里捕获异常。您可以让调用者处理它们(如果它是一个已检查的异常,则声明一个throws子句)。实际上,将它们传递给调用者而无需任何额外工作的能力是例外的显着特征。

我的团队采用了以下编码标准:当我们想要从失败中恢复时,我们会抛出已检查的异常,并为其他任何事情取消选中异常。对于调用堆栈中如此高的方法中的未经检查的异常,只有一个catch块,所有请求都通过它(例如在ServletFilter中)。此catch块记录异常,并将用户转发到“抱歉,这不应该发生”页面。

答案 1 :(得分:3)

您是否查看过您的代码以了解为什么要抛出所有这些异常?有例外是有理由告诉你出了问题。如果您编写了太多“样板”try-catch代码并且您不在千行申请中,则必须进行重构。

try-catch当你有一个复杂的块并且变得非常单调和样板(Marc Gravell even said he usually uses try-finally)时会很烦人但是作为一个新的程序员,检查你编写的代码会很有帮助并弄清楚如何处理或避免这些例外。

正如akf所提到的,忽略异常也可能对调试造成危害。如果你错过导致它的异常,那么追踪灾难性出错的地方将会更加困难。