为什么有些例外位于各自的包中(例如位于IOException
的{{1}}),但有些例外位于java.io
中(例如java.lang
中的ArrayIndexOutOfBounds
)。这是因为一个被检查而另一个是未经检查的异常吗?
答案 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)
首先:ArrayIndexOutOfBoundsException
在java.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
置于其他类似的运行时异常中。因此,作为一般规则,如果为程序定义自定义异常,则应该将它们放在包中,或者放在使用它们的代码附近。