异常概述
异常继承结构
异常继承结构图
RuntimeException(运行时异常)为自己编译可能出错:空指针异常,数组下标越界
其余的(XXException)为外界条件出错:文件找不到、类可能被删除
异常的发生
自定义异常
自定义异常灵感来源于源码:
NullPointerException继承了RunTimeException,一个无参构造,一个有参构造
自定义异常
自定义异常练习
代码
/* 程序主入口 */ public class Exception01 { public static void main(String[] args) throws IllegalNameException, IllegalAgeException { Scanner scanner = new Scanner(System.in); System.out.println("欢迎本系统,请注册:"); System.out.print("请输入用户名:"); String name = scanner.next(); System.out.print("请输入年龄:"); int age = scanner.nextInt(); //注册 UserService userService = new UserService(); userService.register(name,age);//这里的代码可能出现异常, register方法throws了,交给了调用者main解决 } } //用户业务类 class UserService{ public void register(String name,int age) throws IllegalNameException, IllegalAgeException { System.out.println("正在注册请稍后..."); UserDao userDao = new UserDao(); userDao.save(name,age); //这里的代码可能出现异常, save方法throws了,交给了调用者register解决 System.out.println("注册成功"+ name); } } //操作数据库的类 class UserDao{ public void save(String name,int age) throws IllegalNameException, IllegalAgeException { System.out.println("用户["+name+"]"+"的信息正在保存"); if(name.length()<6 || name.length()>12){ throw new IllegalNameException(name); } if(age<18){ throw new IllegalAgeException(age); } } }
异常的处理
代码:
try一般常用于main方法主界面,因为如果主界面在throw异常,就交给了jvm处理,程序就终止了。
异常的常用方法
getMessage():
printStackTrace():打印栈追踪信息
save→resister→main:最后调的save,存储在栈顶
52行出了问题导致43行再导致20行出了问题。
打印的是红色字体
finally语句块
方法覆盖于异常
Exception比上边两个异常范围更大,所以不能抛出,编译错误。