-1

我正在为 Java 助理考试而学习,并且在考试条件下正在努力确定哪些是已检查的,哪些是未检查的。我知道如果我可以根据我在这里阅读的内容编写代码,我可以查找它或执行 instanceof - 但是有没有一种简单的方法可以确定它。我捡了一些,但发现很难记住它们。下面是一个依赖于这些知识的问题的考试。

public static String readData (Path filePath)
  throws IOException, IllegalArgumentException {
     //implementation omitted
}

哪两个代码片段会编译?

public static void main(String[] args) {
 try {
      readData(Paths.get("test"));
 } catch (IllegalArgumentException ex) {
      System.err.println(ex);
 }
}

public static void main(String[] args)
  throws IOException{
 readData(Paths.get("test.txt"));
}

public static void main(String[] args)
  throws IllegalArgumentException{
 readData(Paths.get("test.txt"));
}

public static void main(String[] args) {
 readData(Paths.get("test.txt"));
}

public static void main(String[] args) {
try {
 readData(Paths.get("test"));
 } catch (IOException ex) {
      System.err.println(ex);
 }
}
4

1 回答 1

0

Checked Exceptions 是在编译时检查的异常。如果方法中的某些代码引发检查异常,则该方法必须要么处理异常,要么必须使用 throws 关键字指定异常。像 FileNotFoundException(IOException 的子类)这样的异常是检查异常,应该在代码中处理。

Unchecked 是在编译时未检查的异常。在 Java 中,Error 和 RuntimeException 类下的异常是未经检查的异常,throwable 下的所有其他内容都经过检查。

因此,对于您给出的问题,IOException 是已检查的异常,而 IllegalArgumentException 是未检查的异常。答案是:第二个选项和最后一个选项

Correct Answers: 
public static void main(String[] args)
  throws IOException{
 readData(Paths.get("test.txt"));
}

public static void main(String[] args) {
try {
 readData(Paths.get("test"));
 } catch (IOException ex) {
      System.err.println(ex);
 }
}

因此,对于任何发现它已选中或未选中的异常,您可以将其保留为如果由于任何用户输入或任何其他在编译时未知的外部值而发生异常将未选中。其他异常检查异常

例如,IllegalArgumentException,如果参数是非法的。您在编写代码时不知道参数,这不是预期的。所以,这是一个未经检查的异常。

您可以将上述规则应用于此列表中的所有 Exception

未选中

ArrayIndexOutOfBoundsException

ClassCastException

IllegalArgumentException

非法状态异常

空指针异常

NumberFormatException

断言错误

异常初始化错误

堆栈溢出错误

NoClassDefFoundError

于 2015-03-11T16:48:32.047 回答