Java 抛出的异常类型
Java Type of Exception to Throw
我想了解为什么要抛出某些异常。我选择扔哪个有什么关系?
例如
//simple division method - a/b
public static double divide(double a, double b){
if(b == 0)
throw new IllegalArgumentException("b = 0");
return a/b;
}
对
//simple division method - a/b
public static double divide(double a, double b){
if(b == 0)
throw new IllegalArithmeticException("b = 0");
return a/b;
}
(如果代码中有错误,我深表歉意 - 我很快就把它放在一起了。我实际上对方法本身并不感兴趣。)
我选择哪个例外重要吗?它似乎可以是任何东西——即使我使用了 arrayIndexOutOfBoundsException,它仍然会停止程序并打印我想要它打印的内容。
感谢您的帮助。
嗯,从公司的角度来看,抛出什么异常并不重要。因为从技术上讲,您为用户创建程序来处理它,如果用户输入不需要的输入,那么 he/she 将能够得到 he/she 所犯的错误。
它作为用户纠正错误的注释。
值得讨论已检查异常和未检查异常之间的区别是什么,以明确抛出异常的关键点。
假设您正在尝试读取一个文件,但由于某种原因找不到该文件。 Java 有一个方便的 FileNotFoundException
,您可以使用它来明确通知找不到文件。它也是扩展(通过其层次结构)Exception
的异常之一,这意味着如果一个方法声明抛出此异常,则它 必须 通过捕获它来处理或宣布将其扔到别处。
然后是 ArithmeticException
,这是一个运行时异常(它扩展了 RuntimeException
)- 没有方法需要声明它被抛出,并且您不需要显式捕获它,因为这个 class 异常表明代码中有错误。它可能会出现,实际上,如果有任何东西试图捕获运行时异常,它看起来有点可疑。
在您的问题的上下文中,您基本上是通过预先警告用户有效输入来踩踏 ArithmeticException
的自然抛出。做这样的事情可能是可以接受的,但对于这种情况,你实际上不需要自己扔任何东西。 如果有人决定将 b = 0
传递给方法,他们会得到 ArithmeticException
.
存在基于例外情况的现有约定 - 尽可能具体地说明问题,并在适当时提供恢复方法 - 因此在这种情况下,如果您 有 抛出一个特定的异常,我建议 IllegalArgumentException
,因为参数 b = 0
在除法或做模运算时是不可接受的。但是,我还建议改为在 outside 方法中捕获它,因为输入确实值得怀疑,并且在进入此方法之前最好对其进行清理。
我想了解为什么要抛出某些异常。我选择扔哪个有什么关系?
例如
//simple division method - a/b
public static double divide(double a, double b){
if(b == 0)
throw new IllegalArgumentException("b = 0");
return a/b;
}
对
//simple division method - a/b
public static double divide(double a, double b){
if(b == 0)
throw new IllegalArithmeticException("b = 0");
return a/b;
}
(如果代码中有错误,我深表歉意 - 我很快就把它放在一起了。我实际上对方法本身并不感兴趣。)
我选择哪个例外重要吗?它似乎可以是任何东西——即使我使用了 arrayIndexOutOfBoundsException,它仍然会停止程序并打印我想要它打印的内容。
感谢您的帮助。
嗯,从公司的角度来看,抛出什么异常并不重要。因为从技术上讲,您为用户创建程序来处理它,如果用户输入不需要的输入,那么 he/she 将能够得到 he/she 所犯的错误。 它作为用户纠正错误的注释。
值得讨论已检查异常和未检查异常之间的区别是什么,以明确抛出异常的关键点。
假设您正在尝试读取一个文件,但由于某种原因找不到该文件。 Java 有一个方便的 FileNotFoundException
,您可以使用它来明确通知找不到文件。它也是扩展(通过其层次结构)Exception
的异常之一,这意味着如果一个方法声明抛出此异常,则它 必须 通过捕获它来处理或宣布将其扔到别处。
然后是 ArithmeticException
,这是一个运行时异常(它扩展了 RuntimeException
)- 没有方法需要声明它被抛出,并且您不需要显式捕获它,因为这个 class 异常表明代码中有错误。它可能会出现,实际上,如果有任何东西试图捕获运行时异常,它看起来有点可疑。
在您的问题的上下文中,您基本上是通过预先警告用户有效输入来踩踏 ArithmeticException
的自然抛出。做这样的事情可能是可以接受的,但对于这种情况,你实际上不需要自己扔任何东西。 如果有人决定将 b = 0
传递给方法,他们会得到 ArithmeticException
.
存在基于例外情况的现有约定 - 尽可能具体地说明问题,并在适当时提供恢复方法 - 因此在这种情况下,如果您 有 抛出一个特定的异常,我建议 IllegalArgumentException
,因为参数 b = 0
在除法或做模运算时是不可接受的。但是,我还建议改为在 outside 方法中捕获它,因为输入确实值得怀疑,并且在进入此方法之前最好对其进行清理。