Java中的异常包位置

时间:2017-06-26 04:12:21

标签: java exception-handling

为什么有些例外位于各自的包中(例如位于IOException的{​​{1}}),但有些例外位于java.io中(例如java.lang中的ArrayIndexOutOfBounds )。这是因为一个被检查而另一个是未经检查的异常吗?

3 个答案:

答案 0 :(得分:1)

我真的不认为基于已检查和未检查的条件java异常位于相应的包中。如果我们考虑java.io包和java.lang包,    java.io包包含通过数据流,序列化和文件系统进行系统输入和输出的类。还处理由Java I / O API完成的文件。

java.lan包中包含用于Java编程语言设计的所有类,如String,Math。并为线程和进程提供基本的运行时支持。

每当输入或输出流被中断时抛出Java IOException。所以这与System输入和输出有关。所以这个IOException类必须在java.io包下。

在run.java.lan包支持中检查诸如ArrayIndexOutOfBoundEceptions之类的Java RuntimeExceptions以处理运行时线程。它包括支持线程和进程的运行时的类。

因此IOException,ArrayIndexOutOfBound是具有相关功能的类。因此必须在相关包下对这些类进行分类。

答案 1 :(得分:1)

首先:ArrayIndexOutOfBoundsExceptionjava.lang.Throwable。它位于包java.lang内。它是java.lang.Throwable的子类,但所有例外情况都是如此(包括IOException)。

ArrayIndexOutOfBoundsException位于java.lang内,因为所有"基本内容都与核心语言相关"在java.lang中,ArrayIndexOutOfBoundsException是"与核心语言相关的基本内容"。

IOException位于java.io内,因为所有与I / O相关的内容都在java.io中,而IOException是"与I / O相关的内容&# 34。

没有深刻或有趣的技术原因。

答案 2 :(得分:0)

作为一般规则,最好将已检查的异常放在抛出这些类型异常的代码附近。这解释了你的第一个观察。另一方面,异常ArrayIndexOutOfBounds未经检查的运行时异常。它与一种运行时错误相关联,程序通常不会从中恢复。因此,它将java.lang.throwable置于其他类似的运行时异常中。因此,作为一般规则,如果为程序定义自定义异常,则应该将它们放在包中,或者放在使用它们的代码附近。