我想了解在Java中检查异常,并有以下查询。Java检查异常
是下列正确的:如果一个方法抛出的任何类型的检查异常,潜在的那个例外必须是
- 使用
throws
关键字声明,或 - 由各自抓方法。
如果上述内容是正确的,这是否意味着我需要了解每一个内置到Java的检查异常,以便我知道我的方法是否有可能抛出异常?还是应该尝试编译我的代码,然后根据编译时错误修改我的代码?
我想了解在Java中检查异常,并有以下查询。Java检查异常
是下列正确的:如果一个方法抛出的任何类型的检查异常,潜在的那个例外必须是
throws
关键字声明,或如果上述内容是正确的,这是否意味着我需要了解每一个内置到Java的检查异常,以便我知道我的方法是否有可能抛出异常?还是应该尝试编译我的代码,然后根据编译时错误修改我的代码?
如果上述内容是正确的,这是否意味着我需要了解内置于Java [...]的每个检查过的异常?
是的,您的陈述是正确的,但没有人希望您在编程时了解所有可能的检查异常。如果你有一个编译器或者更好的IDE,那么你就不必如此。
要么你去来回编译器输出和代码之间,你在你的问题建议,或者如果你违反了规则,你安装一个IDE,比如Eclipse,让你直接通知:
,这是否意味着我需要了解是建立在对Java
我假设你使用的是一些IDE(Eclipse的如)每一个检查异常 - 如果没有,你应该得到Ø尽快。然后,IDE几乎不断地编译代码,所以当出现问题时,你会在它附近得到一个红色的下划线,并提示一个工具提示泡泡,告诉你什么是错误的 - 例如“丢失抛出”。
因此,你的第二个假设是基本正确的,它只是发生在幕后:
或者我应该只是尝试基于编译时错误编译我的代码,然后修改我的代码?
所以不,你不需要了解所有的例外。
此外,所有选中的例外延伸到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
}
是你需要知道每exception..however如果你知道超类异常的比你的U并不需要知道它的子类...用于如.FileReader抛出一个名为FileNotFoundException的异常由于FileNotFoundException是IOException的一个子类,因此我们可以在抛出列表中指定IOException并使上述程序无编译器错误。