异常分类
编译期异常
运行期异常
JVM自动处理异常
1. throw
2. throws
3. try…catch
对异常语句进行捕获,对出现的异常进行指定方式的处理(try-catch不能单独使用)
try:代码块存放可能产生异常的代码。
catch:进行异常的捕获并进行处理
4. try…catch对于多个异常的多种处理
1.一个异常一次处理(多try多catch)
try {
method();//FileNotFoundException是IOException子类,儿子
} catch(FileNotFoundException e) {
//e = 异常对象;
e.printStackTrace();
}
try {
method2();//ClassNotFoundException
} catch(ClassNotFoundException e) {
e.printStackTrace();
}
try {
method3();//IOException
} catch(IOException e) {
e.printStackTrace();
}
2.多个异常分别处理(单try…多catch)
当try里面的代码出现异常时,会逐个找可以捕获该异常的异常类
try {
method();//FileNotFoundException是IOException子类,儿子
method2();//ClassNotFoundException
method3();//IOException
} catch(FileNotFoundException e) {
//e = 异常对象;
e.printStackTrace();
} catch(ClassNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
3.多个异常一次捕获,多次处理(细化,推荐使用)(jdk1.7)
try {
method();
method2();
method3();
} catch( ClassNotFoundException | IOException e) {
e.printStackTrace();//一次处理
}
注意:上面写法要求多个异常类型只能是平级关系,不能是子父类,否则父类接收子类异常
改进:(FileNotFoundException是IOException的子类)
try {
method();
method2();
method3();
} catch( ClassNotFoundException | FileNotFoundException e) {
e.printStackTrace();//一次处理
} catch(IOException e){
e.printStackTrace();
}
4.多个异常一次捕获,一次处理(笼统)(jdk1.7)
try {
method();
method2();
method3();
} catch(Exception e) {
e.printStackTrace();
}
5.finally
跟try或者try…catch组合用的,不能单独使用,这里面的代码永远都会执行,除非你在它之前退出Java虚拟机
try {
read("a.txt");
} catch (FileNotFoundException e) {
//抓取到的是编译期异常 抛出去的是运行期
throw new RuntimeException(e);
} finally {
System.out.println("不管程序怎样,这里都将会被执行。");
}
6.异常注意事项
7.自定义异常
8.常见异常
NullPointerException :空指针异常
ArrayIndexOutOfBoundsException :数组越界异常
FileNotFoundException:文件路径不存在异常