我正在尝试理解Java中的已检查异常,并进行以下查询。
以下是否正确:如果某个方法有可能抛出任何类型的已检查异常,则该异常必须为
throws
关键字或如果以上是正确的,这是否意味着我需要了解内置于Java的每个单独检查的异常,以便我知道我的方法是否有可能抛出该异常?或者我应该尝试编译我的代码,然后根据编译时错误修改我的代码?
答案 0 :(得分:0)
如果以上是正确的,这是否意味着我需要理解Java [...]中内置的每个单一检查异常?
是的,您的陈述是正确的,但没有人希望您在编程时知道所有可能的已检查异常。如果您有一个编译器或更好的IDE,那么您就不必这么做了。
您可以按照问题中的建议在编译器输出和代码之间来回切换,或者安装Eclipse之类的IDE,如果违反规则,则会直接通知您:
答案 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,并使上面的程序编译器没有错误。