处理用户输入的Java异常

处理用户输入的Java异常,java,validation,exception,input,Java,Validation,Exception,Input,通过异常响应逻辑上不正确的用户输入是否正确 以下是一个例子: 我们有很多公司,每个公司都有很多员工。每个公司都有一个id,每个员工都有一个id。如果用户希望从特定公司删除员工,但他指定的公司不存在,可以抛出类似CompanyNotextIssException的异常吗 如果我返回true或false,我将无法在GUI中向用户回复为什么员工未被删除的消息—如果他不存在或公司不存在 抛出异常是完全可以接受的。GUI代码中对业务端的调用应该有一个try/catch块,这样,如果业务逻辑引发异常,您就可

通过异常响应逻辑上不正确的用户输入是否正确

以下是一个例子:

我们有很多公司,每个公司都有很多员工。每个公司都有一个id,每个员工都有一个id。如果用户希望从特定公司删除员工,但他指定的公司不存在,可以抛出类似CompanyNotextIssException的异常吗


如果我返回true或false,我将无法在GUI中向用户回复为什么员工未被删除的消息—如果他不存在或公司不存在

抛出异常是完全可以接受的。GUI代码中对业务端的调用应该有一个try/catch块,这样,如果业务逻辑引发异常,您就可以显示错误消息

e、 g


根据@Vidya在下面所说的,我想澄清一下,我认为应该进行客户端验证,以便将此异常作为最后手段抛出。出于性能和可用性的考虑,编码人员应该尽其所能在错误到达服务器端代码之前检测错误。

抛出异常是完全可以接受的。GUI代码中对业务端的调用应该有一个try/catch块,这样,如果业务逻辑引发异常,您就可以显示错误消息

e、 g


根据@Vidya在下面所说的,我想澄清一下,我认为应该进行客户端验证,以便将此异常作为最后手段抛出。出于性能和可用性方面的原因,编码人员应该尽其所能在错误到达服务器端代码之前检测错误。

有什么方法可以防止错误状态,而不是引发异常?换句话说,有没有办法让他们只能选择有效的公司和该公司的有效员工?作为一个用户,我更喜欢只选择有效的条目,而不必破译我的错误。即使是从一个好的错误对话框。但这是您防止或处理错误状态的设计决策


抛出异常是可以的,只要您通知用户出了什么问题,并且没有意外退出。在我的一个遗留GUI项目中,所有与UI相关的异常都有关于这个问题的很好的描述,所以我只需要将它们设置为JMessagePane(?忘记确切的类)。在另一种情况下,用户界面问题将被报告,程序(因此程序会话)将终止,用户需要从头开始。

是否有办法防止错误状态,而不是引发异常?换句话说,有没有办法让他们只能选择有效的公司和该公司的有效员工?作为一个用户,我更喜欢只选择有效的条目,而不必破译我的错误。即使是从一个好的错误对话框。但这是您防止或处理错误状态的设计决策


抛出异常是可以的,只要您通知用户出了什么问题,并且没有意外退出。在我的一个遗留GUI项目中,所有与UI相关的异常都有关于这个问题的很好的描述,所以我只需要将它们设置为JMessagePane(?忘记确切的类)。在另一种情况下,UI问题将被报告,程序(因此程序会话)将终止,用户需要从头开始。

在不实际处理异常的情况下抛出异常是不合适的(除非您不打算使用它,但其他人会在这种情况下记录该异常,以便他们知道如何捕获它)。现在,在你的情况下,当一家公司不存在的时候扔掉它是好的,然后抓住它可以很容易让你知道到底发生了什么,你可以“优雅地失败”

然后你抓住它

try {
//do your work here
}
catch(CompanyNotExistsException e){/*Fail le graceful*/}
catch(Exception){/*For good measure*/}

在没有对异常做任何实际操作的情况下抛出异常是不合适的(除非您不打算使用它,但其他人会这样做,在这种情况下,您会记录它,以便他们知道如何捕获它)。现在,在你的情况下,当一家公司不存在的时候扔掉它是好的,然后抓住它可以很容易让你知道到底发生了什么,你可以“优雅地失败”

然后你抓住它

try {
//do your work here
}
catch(CompanyNotExistsException e){/*Fail le graceful*/}
catch(Exception){/*For good measure*/}

这是软件界争论不休的话题。有些人像@thatidotguy,他们认为例外情况在这种情况下是完全合适的。还有一些像我一样的人认为例外情况应该只用于某些实际出错的特殊情况;我觉得您的场景是一个备用流程,可以用条件语句轻松解决

但我也不相信这一点。如果您选择异常路径,请记住两件事:

  • 确保它是一个已检查的异常,如@thatIDitoGuy所暗示的
  • 请确保您的异常不会重复Java提供的现有异常来说明相同的内容。例如,如果客户机提供了一个字符串,您需要一个数字,那么不要编造您自己的“InvalidFormatException”之类的东西。使用Java内置的
    IllegalArgumentException

希望这能有所帮助。

这是软件界争论的话题。有些人像@thatidotguy,他们认为例外情况在这种情况下是完全合适的。还有一些像我一样的人认为例外情况应该只用于某些实际出错的特殊情况;我觉得您的场景是一个备用流程,可以用条件语句轻松解决

但我也不相信这一点。如果您选择异常路径,请记住两件事:

  • 确保它是一个已检查的异常,如@thatIDitoGuy所暗示的
  • 请确保您的异常不会重复Java提供的现有异常来说明相同的内容。例如,如果客户机提供了一个字符串,您需要一个数字,那么不要编造您自己的“InvalidFormatException”之类的东西。使用Java内置的
    IllegalArgumentException
希望这能有所帮助。

try {
//do your work here
}
catch(CompanyNotExistsException e){/*Fail le graceful*/}
catch(Exception){/*For good measure*/}
if company exists then
   if employee  exists then 
     delete  
     message:= deleted
   else
     message:= employee doesn't exist
else
     message:= company doesn't exist