1、可检测和不可检测
总体来说,可检测异常必须在方法中显示捕捉或者声明方法的throws语句。不可检测异常是未进行处理造成的,如除以0,空指针。可检测异常非常重要,因为你希望开发者知道怎样处理异常。例如IOException是普遍用到的可检测异常,而RuntimeException是不可检测异常。
2、异常处理的最好例子
如果异常要处理,需要捕捉,否则要抛出
3、为什么在try中声明的变量在catch或者finally中不能用
下面的代码中,s在try语句块中声明,不能用在catch语句中。
try {
File file = new File("path");
FileInputStream fis = new FileInputStream(file);
String s = "inside";
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println(s);
}
因为你不知道try语句块在哪儿抛出异常。有可能在变量声明前就已经抛出异常了。
4、为什么Double.parseDouble(null)和Integer.parseInt(null)抛出不同的异常
Integer.parseInt(null);
// throws java.lang.NumberFormatException: null
Double.parseDouble(null);
// throws java.lang.NullPointerException
这是JDK的问题,不值得多想
5、java中普遍用到的runtime exceptions
有IllegalArgumentException,ArrayIndexOutOfBoundsException;
6、在同一个catch语句中可以捕捉多个异常吗
可以,只要异常能够跟踪到层次中的同一层。
7、java中构造函数中可能抛出异常吗
可以,构造函数是一种特殊的方法。