Java检查异常
我试图理解Java中的检查异常,并进行以下查询 是否正确:如果方法有可能引发任何类型的已检查异常,则该异常必须是Java检查异常,java,exception,checked,throws,Java,Exception,Checked,Throws,我试图理解Java中的检查异常,并进行以下查询 是否正确:如果方法有可能引发任何类型的已检查异常,则该异常必须是 使用抛出关键字声明,或 通过各自的方法捕获 如果上面所说的是正确的,这是否意味着我需要了解Java中内置的每个检查异常,以便知道我的方法是否有可能抛出该异常?还是我应该尝试编译代码,然后根据编译时错误修改代码 如果上面所说的是正确的,这是否意味着我需要理解Java[…]中内置的每个检查异常 是的,您的语句是正确的,但是没有人希望您在编程时知道所有潜在的检查异常。如果你手头有一个编译器
抛出
关键字声明,或异常
,因此如果您有权访问源代码,则可以检查它们基于什么。非检查异常扩展RuntimeException
经验法则:如果是带有I/O的内容,通常会进行检查。这是您将遇到的最常见的异常类型。
每当您使用一个方法(无论是您自己的还是内置的)时,如果您密切跟踪它的方法签名,如果该方法抛出一些异常,您需要在代码中显式抛出/处理它
通过这种方式,您将不需要记住所有异常,并且您将知道在何处处理哪些异常
为了让生活变得简单,请使用eclipse之类的IDE
希望这有帮助
祝你好运
如果以上是正确的
它是
[…]这是否意味着我需要了解Java中内置的每个已检查异常,以便知道我的方法是否有可能生成该异常?还是我应该尝试编译代码,然后根据编译时错误修改代码
使用IDE!你不需要密切了解他们所有人
但是,您要检查的是层次结构(即,检查javadoc!这应该是巴甫洛夫反射);由于异常是类,它们彼此继承,例如,FileSystemException
是java.nio.file的一个portmanteau异常,表示与文件系统相关的问题,它继承了IOException
。如果您想特别对待它,请在IOException之前捕获它
一般来说,首先捕获更具体的异常
另外,不要捕获异常。从未。问题是RuntimeException
是未检查异常的基本异常,它继承了exception
,这意味着如果捕获exception
,则捕获所有未检查的异常。要重新显示未选中的项目:
try {
something();
} catch (RuntimeException unchecked) {
throw unchecked;
} catch (Exception e) {
// deal with e
}
是的,你需要知道每个异常。但是如果你知道该异常的超类,你就不需要知道它的子类。例如,FileReader抛出一个名为FileNotFoundException的异常,因为FileNotFoundException是IOException的子类,我们可以在抛出列表中指定IOException,并使上面的程序编译器无错误