我应该使用例外吗?

时间:2014-02-24 17:44:44

标签: java exception if-statement

我在这里做的是一个简单的登录。我不确定的是,我是否应该使用异常来表示登录失败(错误的昵称或错误的密码或两者)或只是一个简单的if \ else构造。

try
{
     catalogo.getUtenteAttivo();
      JOptionPane.showMessageDialog(login, "Login avvenuto con successo", "Avviso", JOptionPane.PLAIN_MESSAGE);
}
catch(InvalidLoginException exception)
{
    JOptionPane.showMessageDialog(login, "Login non riuscito", "Errore", JOptionPane.ERROR_MESSAGE);
}

代码是意大利语,但你可以大致了解我的目的。

5 个答案:

答案 0 :(得分:3)

我认为简单的if / else应该没问题。 Exception是针对某些通常错误的异常事件,它发生在代码的上下文中。登录失败更像是商业活动。这是预期的,您的代码将正常运行。

我会采用任何方法来检查用户的凭据是否返回正确的状态,而不是在登录失败时抛出异常。

但是,如果检查登录的进程本身失败,那么这是一个异常情况,而 应该抛出异常。

答案 1 :(得分:2)

传统观点是仅在特殊条件下使用例外(参见Effective Java,Joshua Bloch。

对于这种情况,我会使用常规控制流程,这是程序的常规执行的一部分。保存异常情况,例如无法连接数据库。

然而,在这里使用例外并不疯狂,只是不是我的选择。

答案 2 :(得分:1)

我认为异常在这里是合适的。从长远来看,getUtenteAttivo()可能会检查数据库,网络服务器等,并抛出某种异常。 (Java安全/密码库抛出各种异常)注意:在这种情况下,还要检查IOExceptions等...

通常情况下,出于性能原因可能会出现例外情况,但这不是问题。

抛出的另一个原因是确保客户端实际捕获它们并且不忘记检查true / false。在这种情况下,这很重要。

答案 3 :(得分:0)

对于这种平凡的情况,我会说这并不重要;-)但你必须意识到抛出一个异常是一项昂贵的操作,并且没有人应该使用异常来传递值。因此,如果检查密码是否匹配是微不足道的,您可能只想返回一个布尔值并在出现错误的时候保存异常,例如db或ldap服务器关闭。

答案 4 :(得分:0)

一种常见的模式是提供“尝试”和“执行”方法 - 在这种情况下,TryLogin方法将指示登录是否成功,以及Login如果登录成功将返回的方法,如果失败则抛出异常。如果两种方法都可用,那么准备好在登录失败的情况下做一些合理的代码不需要处理异常,但是如果登录失败则无法做任何有用的代码可以简单地让异常“冒泡” 。另一种在所有情况下都不可用但在这里可能适用的替代方法是让Login无条件地返回,但是有一个AssertLoggedIn方法可以被代码调用,而这些方法无法做任何有用的事情如果登录失败。在使用AssertLoggedIn进行登录尝试之后,连接类将有机会在登录失败时抛出异常,可能包括一些(希望是非安全敏感的)可能有助于诊断问题的信息。