Java 确定在检查条件中什么是已检查的,什么是未检查的异常?

Java 确定在检查条件中什么是已检查的,什么是未检查的异常?,java,exception,checked-exceptions,Java,Exception,Checked Exceptions,我正在学习Java联合考试,在考试条件下,我正在努力确定什么是已检查的,什么是未检查的。我知道如果我能根据我在这里读到的内容编写代码的话,我可以查找它或执行instanceof,但有没有一种简单的方法来确定它。我学了一些,但发现很难把它们全部记住。下面是一道基于这一知识的试题 public static String readData (Path filePath) throws IOException, IllegalArgumentException { //implement

我正在学习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);
 }
}

已检查异常是在编译时检查的异常。如果方法中的某些代码抛出选中的异常,则该方法必须处理该异常,或者必须使用throws关键字指定该异常。 一些异常,如FileNotFoundException(IOException的子类)是检查异常,应该在代码中处理

未选中的是编译时未选中的异常。 在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。在编写代码时,您不知道参数,这是不需要的。因此,这是一个未经检查的例外

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

未选中

ArrayIndexOutOfBoundsException

类卡斯特例外

非法辩论例外

非法国家例外

NullPointerException

数字格式异常

断言者

例外情况初始化错误

堆栈溢出错误


NoClassDefFoundError

我再次理解了选中和未选中的含义,但如何在不完全记住它们的情况下确定哪个是哪个?是否有一种方法可以从名称中计算出所检查的异常类型?因此,对于任何异常,如果发现它已检查或未检查,您可以将其保持为如果异常是由于任何用户输入或编译时未知的任何其他外部值而发生,则将其取消检查。其他的例外都是选中的例外对不起,你能详细说明一下吗?给出了示例NoSuchMethodException。感谢您的帮助。我现在觉得有点自信了。我要走了,把你的推理应用到我的考试题上。为什么IOException和Checked Exception放在一起?难道这不是用户输入的结果,因此在编译时不知道,因此应该取消选中吗?我认为没有办法把
RuntimeException
s背下来。但也有一些比其他更常用。标准的
运行时异常
通常非常广泛,甚至在不调用方法的情况下也可能发生(
NullPointerException
ArrayIndexOutOfBoundsException
算术异常
),选中的异常往往更“专业化”。也就是说,
IOException
在IO上下文中是合适的,但是只要传递给方法的参数无效,
IllegalArgumentException
就合适。