[英]using keyword throws to declare throwing of Runtime Exceptions
对我来说,这些代码
static int faktorial (int n) throws ArithmeticException {
if ((n < 0) || (n > 31)) {
throw new ArithmeticException();
}
if (n > 1) {
return n * faktorial(n - 1);
}
else {
return 1;
}
}
没有相同的代码
throws ArithmeticException
当我使用以下代码时,请执行相同的操作:
public static void main(String[] args) {
try {
int n;
Scanner sc = new Scanner(System.in);
System.out.print("Insert integer number: ");
n = sc.nextInt();
System.out.println(n + "! = " + faktorial(n));
}
catch (InputMismatchException e) {
System.out.println("Not an integer number!");
e. printStackTrace();
}
catch (RuntimeException e) {
System.out.println("Number is too big!");
e. printStackTrace();
}
}
如果有人使用,可能有人形容我
throws ArithmeticException
在我的代码中有一些优点。
我还要了解一些使用关键字throws
好例子。 非常感谢你!
由于ArithmeticException
是一个未经检查的异常 ,因此在throws
规范中列出它对编译器没有任何影响。
尽管如此,我认为保留throws
规范以用于文档目的是一个好主意。
也就是说,当使用无效参数调用函数时, ArithmeticException
可能不是正确的异常。 使用IllegalArgumentException
会更合适。
上面的方法签名使用表达式throws ArithmeticException
来告诉用户该函数该方法可能抛出此异常,并且他们应该知道并捕获它(如果他们想要 - “只需”因为未检查此异常 - 并计划一个变通方法在这种情况下)。
除非ArithmeticException不是在这种情况下使用的正确例外(您可以在技术上使用它们中的任何一个)。 抛出的一个更好的例外是IllegalArgumentException
因为它暗示传入的参数是不正确的。
除了所说的内容之外,我发现有一个好处可以帮助我编写代码。
Eclipse可以使用该信息(该方法使用throws RuntimeException
声明)和(按需)添加适当的 catch子句。
让我们看看这个:
public static void main(String[] args) {
test();
}
private static void test() {
foo();
bar();
baz();
}
public static void foo() {
}
public static void bar() throws NullPointerException {
}
public static void baz() throws IllegalArgumentException {
}
在方法test
添加try/ catch block
将导致:
private static void test() {
try {
foo();
bar();
baz();
} catch (NullPointerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
那很好,不是吗? 但是,它仅适用于第一级方法调用,因此它不会因多次捕获运行时异常而污染更高级别的抽象:
public static void main(String[] args) {
try {
test();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static void test() {
foo();
bar();
baz();
}
那也很好。
无论如何,看到javadoc中的抛出可能更重要:)
void Test.baz() throws IllegalArgumentException
由于Java没有提供简单的True / False标志来确定是否检查了给定的异常,因此您需要了解您(作为程序员)必须处理的异常类型(捕获或重新抛出)和您可以选择不处理(有效忽略)。
特别是,取消选中整个RunTimeException
类, ArithmeticException
是其子类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.