第七章:异常
1、定义:指在程序运行过程中发生的不正常的事件,它会中断正在运行的程序
2、异常处理机制
程序中预先设置好对付异常的处理方法–>程序运行–>异常–>对异常进行处理–>处理完毕,程序继续执行
3、异常的处理方式
if-else:不好,代码臃肿(一般不使用)
try(执行可能产生异常的代码)、catch(捕获异常)、finally(最终必须要执行的,除非碰到System.exit(1)退出jvm虚拟机)、throw(手动抛出异常)、throws(声明方法可能要抛出的异常)
(1)try-catch-finally:存在return的try-catch-finally先执行finllay再执行return退出方法
(2)try-finally
(3)try-catch:快捷键Ctrl+Alt+T
(4)多重catch块:只执行第一个与异常类型匹配的catch语句;排列catch语句先子类后父类Exception
(5)throws:如果一个方法体中抛出了异常,需要通知调用者处理异常,多个异常逗号隔开;调用者有两种处理方式1>调用者处理异常2>调用者继续声明异常
public static void divid()throws Exception{} //当Exception与其子类共存时,执行Exception异常;声明Exception异常最后不处理会报错,声明其子类异常则不会报错;
public static void main(String[] args) {
try {
divid();
} catch (Exception e) {
e.printStackTrace();
}
}
(6)throw:1>当前方法中出现了异常,但处理异常的责任不应该是当前方法管,这时将异常抛出
2>当程序遇到了一个满足语法要求,但不符合业务逻辑的情况,这时候主动throw一个异常出来
public class Throw {
public static void main(String[] args) {
Person person=new Person();
try {
person.setSex(“make”);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class Person{
private String sex;
public void setSex(String sex)throws Exception{
if(“男”.equals(sex)||“女”.equals(sex)){
this.sex=sex;
}else {
throw new Exception(“性别必须是"男"或者"女”!");
}
}
}
4、Throwable类:是所有异常类的父类,其下有两个子类
(1)Error:一般是虚拟机溢出,属于系统级别错误,假如出现这种错误,应尽力使程序安全退出
(2)Exception
1>运行时异常:用户输入无法左右,不要求必须捕获或者声明抛出;
其下分很多子类,例:ArithmeticException算数异常、InputMismatchException匹配异常、NullPointerException空指针引用异常、IndexOutOfBoundsException下标越界异常、ClassCastException对象强制转换异常、NumberFormatException数字格式异常、SecurityException安全异常、IllegalArgumentException传递非法参数异常
2>check异常:必须捕获或者声明抛出
3>方法:void printStrackTrace():输出异常的堆栈信息
String getMassage():返回异常信息的描述字符串,是printStrackTrace()输出信息的一部分