有很多例外,并且不容易记住。是否有任何规则可以知道哪种类型的异常将属于哪种类型(运行时与已检查),因此我们知道在哪种情况下我们需要捕获,在这种情况下我们只是抛出异常?谢谢!
答案 0 :(得分:0)
如果你想成为新事物只是抓住一切......(虽然只是为了懒惰但可怕的想法)否则看看javados它会告诉你每种方法扔的是什么。
try {
// this code
} catch (Exception e) {
e.printStackTrace();
}
是的,如果您在编译时遇到问题,则意味着它不会编译,因此不存在且无法运行。
答案 1 :(得分:0)
首先,没有例外是编译时异常。区别在于已检查异常与未经检查的异常。编译器通过表现为好像每个操作(方法,构造函数和初始化程序块)签名总是在其声明中隐式包含throws Error, RuntimeException
来进行区分。这样, handle-or-declare 规则,这意味着编译器强制您处理catch
子句中的异常或声明带有throws
声明的异常是已禁用Error
和RuntimeException
- 它们始终是隐式声明的。
所以我们总体上有以下类别:
编译器处理:
RuntimeException
和Error
Throwable
。分类
Error
- 我们通常不会抓住这些。RuntimeException
- 捕捉取决于根本原因。Exception
- 我们必须处理或声明它们(编译器强制执行)。 Error
很容易记住。如果VM或其中一个API认为它是导致问题的VM或API的缺陷,则它是Error
。 通常我们不会抓住Error
s ,虽然有一些突出的例子,例如:
OutOfMemoryError
,以便在向用户显示错误消息后让应用程序继续。即用户想要加载太大的图片。AssertionError
。 (他们实际上抓住Throwable
,但AssertionError
被特别处理,它是测试失败,而不是测试错误。)运行时异常是在程序正确编写时不会发生的异常,只要可能导致这些异常的条件不依赖于用户。例如,Integer.parseInt(String) throws NumberFormatException
。如果转换的字符串来自程序本身,它应该是正确的,我们不会关心异常。如果转换的字符串来自用户,我们通常宁愿catch NumberFormatException
而不是让用户通过错误的输入来使程序崩溃。
在故障情况有可能的情况下使用其他异常,但总是希望程序以某种方式处理它们。例如,如果您打开文件,则文件可能始终不存在,由于缺少权限或锁定而无法读取,或者存储已损坏。
答案 2 :(得分:-1)
不要捕获RuntimeExceptions和Errors,捕获其他异常或将throws
添加到方法声明