---------------------- android培训、java培训、期待与您交流! ----------------------
异常
1.什么是异常
异常是程序运行过程中抛出的一些错误, 一旦出现异常, 下面的代码将不再执行.
2.异常的分类
Exception和Error有一个共同的父类Throwable,代表在程序中可以被抛出的对象.
Error: 由虚拟机抛出的一些严重的错误, 程序中无法处理.
Exception除了RuntimeException: 编译时异常, 编译时必须捕捉或声明.
RuntimeException及其子类: 运行时异常, 编译时可以不处理.
3.抛出异常
使用throw关键字可以抛出一个异常对象
抛出一个异常可以通知当前方法的调用者
Throws和throw的区别:
Throws使用在函数上;后面跟异常类,可以跟多个,用逗号隔开;
Throw使用在函数内;后面跟的是异常对象;
一般情况下,函数内出现异常,函数上需要声明;
4.处理异常
在运行一段有可能出现异常的代码时, 我们可以对其进行处理, 处理方式有两种
声明: 在当前方法签名最后使用throws关键字声明有可能出现的异常, 方法中调用其他方法如果出现异常, 当前方法中断, 将异常抛出
捕捉: 将有可能出现异常的代码放在try代码块中, 后面跟上catch代码块, 捕捉有可能出现的异常, 如果try中代码出现异常, 就会执行catch代码;
Catch是用于处理异常,如果没有catch就代表异常没有被处理过,如果该异常是检查时异常,那么必须声明。
5.finally
finally用来和try配合使用, 只要执行了try中的代码, 就一定会执行finally, 除非使用System.exit(0)退出Java虚拟机
finally中也可以再使用try {} finally{} 代码块和循环嵌套模式, 用来执行多条必须执行的语句
try {
需要被检测的代码;
}
catch(异常类变量) {
处理异常的代码:(处理方式)
}
finally {
一定会执行的语句;
}
例:
class ExceptionDemo {
public static voidmain(String[] args) {
Demo d = new Demo();
try {
int x = d.div(4,0);
System.out.println("x="+x);
}catch(Exception e) {
System.out.println("除零了");
//异常名称,异常信息;
System.out.println(e);
//异常名称,异常信息,异常出现的位置
//Jvm默认的异常处理机制,就是在调用printStackTrace方法;
e.printStackTrace();
}
System.out.println("over");
}
}
class Demo {
int div(int a, int b) {
return a/b;
}
}
输出结果:
除零了
java.lang.ArithmeticException: / by zero
java.lang.ArithmeticException: / by zero
atDemo.div(ErrorDemo.java:19)
atErrorDemo.main(ErrorDemo.java:6)
over
6.重写方法时抛出异常问题
子类重写父类方法时, 不能抛出父类没有声明的异常
7.处理多个异常
可以使用throws关键字声明抛出多个异常, 多个异常之间用","分隔
可以将有可能出现异常的代码放在try中, 后面跟上多个与之相对应的catch, 捕捉不同的异常. 注意: 如果多个catch中异常出现继承关系,捕捉时父类异常不能写在子类异常的上面
8.自定义异常
如果希望抛出一个自己定义的异常对象, 那么可以声明一个类继承Exception或者RuntimeException
因为项目中会出现特有的问题,而这些问题并未被java所描述并封装对象,所以对于这些特有的问题可以按照java对问题封装的思想,将特有的问题,进行自定义的异常封装;
继承Exception的原因:
异常体系有一个特点:因为异常类和异常对戏那个都被抛出;
它们都具备可抛性,这个可抛性是Throwable这个体系中独有特点;
只有这个体系中的类和对象才可以被throws和throw操作;