繁体   English   中英

Java 检查异常

[英]Java checked exceptions

我试图了解 Java 中的已检查异常并有以下查询。

以下是否正确:如果一个方法有可能抛出任何类型的已检查异常,则该异常必须是

  1. 使用throws关键字声明,或
  2. 通过相应的方法捕获。

如果以上是正确的,这是否意味着我需要了解 Java 内置的每个已检查异常,以便我知道我的方法是否有可能抛出该异常? 或者我应该尝试编译我的代码,然后根据编译时错误修改我的代码?

如果上述内容是正确的,这是否意味着我需要了解 Java [...] 中内置的每个已检查异常?

是的,您的陈述是正确的,但是没有人希望您在编程时了解所有潜在的已检查异常。 如果您手头有编译器,或者更好的 IDE,则不必这样做。

您要么按照问题中的建议在编译器输出和代码之间来回切换,要么安装 Eclipse 等 IDE,如果您违反规则,它会直接通知您:

在此处输入图片说明

这是否意味着我需要了解 Java 内置的每个已检查异常

我假设您正在使用某些 IDE(例如 Eclipse) - 如果没有,您应该尽快获得一个。

然后,IDE 几乎会持续编译代码,因此当出现问题时,您会在它附近看到一个红色下划线,以及一个工具提示气泡,告诉您哪里出了问题 - 例如“缺少投掷”。

因此,您的第二个假设基本上是正确的,它只是发生在幕后:

或者我应该尝试编译我的代码,然后根据编译时错误修改我的代码?

所以不,你不需要学习所有的例外。

此外,所有已检查的 Exception 都扩展Exception ,因此如果您有权访问源,则可以检查它们基于什么。 非检查异常扩展了RuntimeException

经验法则:如果它与 I/O 相关,通常会检查它。 这是您将遇到的最常见的异常类型。

whenever you use a method (whether your own or In-built) if you closely follow its method signature, if the method throws some exception you need to throw/handle it explicitly in your code

通过这种方式,您无需记住所有异常,并且您将知道要在何处处理哪些异常。

为了让生活更轻松,请使用一些 IDE,例如 Eclipse

希望这可以帮助!

祝你好运!

如果以上正确

这是...

[...] 这是否意味着我需要了解 Java 内置的每个已检查异常,以便我知道我的方法是否有可能生成该异常? 或者我应该尝试编译我的代码,然后根据编译时错误修改我的代码?

使用IDE! 你不需要非常了解所有这些。

什么想不过来检查是层级(即检查的javadoc这应该是一个巴甫洛夫反射!); 由于异常是类,它们相互继承,例如, FileSystemException是 java.nio.file 的一个 portmanteau 异常,用于发出文件系统相关问题的信号,它继承了IOException 如果要特别对待它,请在IOException之前捕获它。

作为一般规则,首先捕获更具体的异常

另外,不要捕获Exception 绝不。 问题在于RuntimeException未检查异常的基本异常,它继承了Exception ,这意味着如果您捕获Exception您将捕获所有未检查异常。 你想重新抛出未经检查的:

try {
    something();
} catch (RuntimeException unchecked) {
    throw unchecked;
} catch (Exception e) {
    // deal with e
}

是的,您需要知道每个异常……但是,如果您知道该异常的超类,那么您不需要知道它的子类……例如,FileReader 抛出一个名为 FileNotFoundException 的异常,因为 FileNotFoundException 是 IOException 的子类,我们可以只在 throws 列表中指定 IOException 并使上述程序编译器无错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM