任何检查过的异常都必须声明或捕获,因此编译器知道某些代码可以抛出哪些检查过的异常。
MySpecialException
那你就只能
有
为了抓住这个,如果它能宣布
throws Exception
那你就得抓住
Exception
但是,使用泛型
抛出异常
catch(Exception e)
很少是个好主意,因此无论如何,您应该使用更具体的异常。
另一方面,由于编译器知道哪些选中的异常可以在try块中抛出,因此它可以告诉您有关
从未
将被执行。不过,对于未检查的异常,情况并非如此。
catch(IOException)
catch(Exception)
IOException
总是
例外情况
能够
也意味着
RuntimeException
catch(异常)
如果有的话,我也会抓住的。
根据使用位置的不同,其处理方式也有所不同:
-
抛出异常
throw new Exception(...)
告诉编译器
选中的
必须处理异常
-
catch(异常)
告诉编译器
任何
异常,即检查
或
unchecked应该被处理,因为unchecked部分编译器不能抱怨。
抛出异常
不同于,例如。
throws IOException
出于同样的原因:
-
-
抛出异常
然后它将处理该方法,就好像它只抛出选中的异常一样(即,您必须捕获它们),但是由于
包含
运行期异常