当我不得不使用" throws"时,我并不完全明白。关键词。请考虑以下代码:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void otherMethod() throws InputMismatchException {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
System.out.println(num);
}
public static void main (String[] args) {
try {
otherMethod();
} catch(InputMismatchException e) {
System.out.println("Please input an integer");
}
}
}
如果输入的内容不是整数,则会导致InputMismatchException。此异常传递给main方法。但是,我发现"抛出InputMismatchException" otherMethod()的一部分根本不重要,没有它的main方法仍然可以正确处理异常。如果没有这部分,代码将如下所示:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Main {
public static void otherMethod() {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
System.out.println(num);
}
public static void main (String[] args) {
try {
otherMethod();
} catch(InputMismatchException e) {
System.out.println("Please input an integer");
}
}
}
我想知道何时以及为什么"抛出"使用关键字,以及实际执行的操作。
答案 0 :(得分:3)
InputMismatchException
从NoSuchElementException
延伸,从RuntimeException
延伸,并且:
RuntimeException及其子类是未经检查的异常。 未经检查的异常不需要在方法中声明 构造函数的throws子句,如果它们可以被执行抛出 方法或构造函数并在方法或方法之外传播 构造函数边界。
答案 1 :(得分:0)
当您知道可能抛出异常但您不想以任何方式处理异常时,可以使用throws关键字。
答案 2 :(得分:0)
Java检查了异常并取消选中了异常。如果可以从方法中抛出未经检查的异常,则不必声明它们。必须捕获并处理或明确声明由方法抛出已检查的异常。
已检查的例外情况应该是预期的,并且能够处理或从中恢复。未经检查或运行时异常表示您预计不会预期或无法恢复的特殊情况。
"如果可以合理地期望客户从异常中恢复, 使它成为检查异常。如果客户端无法做任何事情来恢复 从异常中,将其作为未经检查的例外。"
java文档将引导您完成Java中的类层次结构
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
从RuntimeException继承的任何异常都是未经检查的异常,但会检查直接从Exception继承的异常。还有Errors略有不同。
答案 3 :(得分:0)
Java中有两种异常:已检查异常和未经检查的异常。
经过检查的异常要求程序员在方法签名中显式捕获或声明throws
。同时,未经检查的异常不需要显式捕获。
未经检查的例外是RuntimeException
或Error
的子类的异常。已检查的异常是剩下的一切。
您的InputMismatchException
来自NoSuchElementException
,NoSuchElementException
来自RuntimeException
,因此您无需声明throws
或抓住它。