Java无效命令行参数异常

Java无效命令行参数异常,java,exception,command-line-arguments,Java,Exception,Command Line Arguments,Java API中是否有针对无效命令行参数的适当异常类,或者我是否必须创建自己的异常类?我尝试过搜索一个,但在API中找不到 这是用于分配的,因此我无法使用第三方库进行命令行解析。命令行参数以字符串[]的形式出现。如果您希望输入以某种形式或顺序进行,您可以抛出自己创建的异常来处理它(尽管抛出异常会终止程序;如果需要,您需要优雅地处理它)。大多数情况下,当收到的参数无效时,掷硬币是一个常见的成语 public类IllegalArgumentException扩展运行时异常 扔 指示方法已通过非法或

Java API中是否有针对无效命令行参数的适当异常类,或者我是否必须创建自己的异常类?我尝试过搜索一个,但在API中找不到


这是用于分配的,因此我无法使用第三方库进行命令行解析。

命令行参数以
字符串[]
的形式出现。如果您希望输入以某种形式或顺序进行,您可以抛出自己创建的异常来处理它(尽管抛出异常会终止程序;如果需要,您需要优雅地处理它)。

大多数情况下,当收到的参数无效时,掷硬币是一个常见的成语

public类IllegalArgumentException扩展运行时异常

扔 指示方法已通过非法或不适当的 争论


处理程序无法理解的未知命令行参数或组合的最佳方法是显示错误消息并提供usages输出

就个人而言,根据命令行的复杂性,我将创建一个名为“usage”(通常是静态)的方法,该方法可以向其传递可选的错误消息

在解析传递到程序中的命令行参数时,我将调用此方法,然后通过标志或直接退出,或者让
usage
methodcall退出


但我只是考虑了使用这个,但是我认为运行时异常(未检查异常)应该反映程序员出错的问题,而检查异常将被用于程序员控制之外的事情。或者这只是在设计API时才重要吗?我倾向于在程序无法在运行时恢复的情况下使用未经检查的异常。传递给方法的无效参数就是这种情况,这是程序员的错误。例如,当您尝试实例化初始容量为负的

ArrayList
时,它将抛出
IllegalArgumentException
。为什么?因为它不应该接受,而且它不能以负的容量工作;这是程序员的错误。这里有一个讨论此问题的链接。另外,如果您使用检查异常,则调用您的方法的每个方法都需要捕获此异常。这有点奇怪,因为基本上您承认代码中可能存在错误,使其将无效值/参数传递给另一个方法。当这种情况发生时,除了修复导致这种情况的错误外,您无能为力。当程序被赋予无效的命令行参数时,这不是程序员错误,而是用户错误。@Michael:我同意,但这些无效参数永远不会到达不支持它们的方法,它们应该经过预验证。如果它们确实到达,则可以抛出
IllegalArgumentException
。现在,如果您想终止程序并向用户显示他传递了无效的参数,那么您可以直接向
System.err
写入参数无效的原因。例如,
javac
就是这样做的。如果您调用它,比如说,
javac-abcd
,它将以消息
javac:invalid标志:-abcd
终止;没有理由在这种情况下抛出异常,imho。