Java检查了异常

时间:2015-01-11 13:24:54

标签: java exception checked throws

我正在尝试理解Java中的已检查异常,并进行以下查询。

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

  1. 使用throws关键字或
  2. 声明
  3. 被各自的方法抓住。
  4. 如果以上是正确的,这是否意味着我需要了解内置于Java的每个单独检查的异常,以便我知道我的方法是否有可能抛出该异常?或者我应该尝试编译我的代码,然后根据编译时错误修改我的代码?

5 个答案:

答案 0 :(得分:0)

  

如果以上是正确的,这是否意味着我需要理解Java [...]中内置的每个单一检查异常?

是的,您的陈述是正确的,但没有人希望您在编程时知道所有可能的已检查异常。如果您有一个编译器或更好的IDE,那么您就不必这么做了。

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

enter image description here

答案 1 :(得分:0)

  

这是否意味着我需要了解内置于Java

中的每个单一检查异常

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

然后,IDE几乎不断地编译代码,所以当出现问题时,你会在它附近出现一个红色下划线,并且工具提示泡沫会告诉你错误的原因 - 例如"缺少投掷"。

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

  

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

所以不,你不需要了解所有例外情况。

此外,所有已检查的例外都会延长Exception,因此,如果您有权访问源,则可以查看它们的基础。未经检查的异常会延长RuntimeException

经验法则:如果它是I / O的东西,通常会检查它。这是您将遇到的最常见的例外类型。

答案 2 :(得分:0)

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

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

为了让生活变得轻松,可以使用像eclipse这样的IDE

希望这有帮助!

祝你好运!

答案 3 :(得分:0)

  

如果以上是正确的

是......

  

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

使用IDE!你不需要密切了解所有这些。

做什么想要检查的是层次结构(即检查javadoc!那应该是Pavlovian反射);因为异常是类,所以它们相互继承,例如,FileSystemException是java.nio.file的portmanteau异常,用于表示与文件系统相关的问题,并且它继承IOException。如果你想特别对待它,请在IOException之前抓住它。

作为一般规则,首先捕获更具体的例外

另外,请勿抓住Exception。决不。问题是RuntimeException未经检查的例外的基本例外,它继承Exception,这意味着如果你抓住Exception,你将捕获所有未经检查的异常。你想重新抛出未经检查的那些:

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

答案 4 :(得分:0)

是的,你需要知道每个异常..如果你知道那个异常的超类比你不需要知道它的子类...因为eg.FileReader抛出一个名为FileNotFoundException的异常因为FileNotFoundException是一个IOException的子类,我们可以在throws列表中指定IOException,并使上面的程序编译器没有错误。