[英]Java checked exceptions
我试图了解 Java 中的已检查异常并有以下查询。
以下是否正确:如果一个方法有可能抛出任何类型的已检查异常,则该异常必须是
throws
关键字声明,或如果以上是正确的,这是否意味着我需要了解 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.