*异常
现实生活中万物在发展和变化会出现各种各样不正常的现象。
1:例如:人的成长过程中会生病。
|——病
|——不可治愈(癌症晚期)
|——可治愈
|——小病自行解决(上火,牙痛)
|——去医院(感冒,发烧)
1.java的异常体系包含在java.lang这个包默认不需要导入。
2.java异常体系
|——Throwable (实现类描述java的错误和异常)
|——Error (错误)一般不通过代码去处理。
|——Exceprion (异常)
|——RuntimeException (运行时异常)
|——非运行时异常
1. toString() 输出该异常的类名。
2. getMessage() 输出异常的信息,需要通过构造方法传入异常信息(例如病态信息)。
3. printStackTrace() 打印栈信息。
异常自行处理
class Demo { public static void main(String[] args) { div(2, 0); System.out.println("over"); } public static void div(int x, int y) { try { System.out.println(x / y); // 可能出现异常的语句,放入try中。 } catch (ArithmeticException e) { // 进行异常匹配, //异常信息 System.out.println(e.toString()); System.out.println(e.getMessage()); e.printStackTrace(); System.out.println("除数不能为0"); } System.out.println("除法运算"); } }
总结
- 程序中有多个语句可能发生异常,可以都放在try语句中。并匹配对个catch语句处理。
- 如果异常被catch匹配上,接着执行try{}catch(){} 后的语句。没有匹配上程序停止。
- try中多个异常同时出现,只会处理第一条出现异常的一句,剩余的异常不再处理。
多个异常
多个catch语句之间的执行顺序。
是进行顺序执行,从上到下。
如果多个catch 内的异常有子父类关系。
子类异常在上,父类在最下。编译通过运行没有问题
父类异常在上,子类在下,编译不通过。(因为父类可以将子类的异常处理,子类的catch处理不到)。
多个异常要按照子类和父类顺序进行catch
抛出处理
throw和throws的区别
1.相同:都是用于做异常的抛出处理的。
2.不同点:
1.使用的位置: throws 使用在函数上,throw使用在函数内
2.后面接受的内容的个数不同:
1.throws 后跟的是异常类,可以跟多个,用逗号隔开。
2.throw 后跟异常对象。
总结
1.try语句不能单独存在,可以和catch、finally组成 try...catch...finally、try...catch、try...finally三种结构。
2.catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。
3.try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。
4.多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。(子类在上,父类在下)。
5.throw语句后不允许有紧跟其他语句,因为这些没有机会执行。
6.如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。