异常
- Error:代表的系统级别错误(属于严重问题)
- Exception:叫做异常,代表程序可能出现的问题。我们通常会用Exception以及他的子类来封装程序出现的问题
- 运行时异常:
RuntimeException
及其子类,编译阶段不会出现异常提醒。运行时出现的异常(如:数组索引越界异常) - 编译时异常:编译阶段就会出现异常提醒的(如:日期解析异常)
编译时异常和运行时异常的区别?
- 编译时异常:没有继承
RuntimeException
的异常,直接继承于Exception - 运行时异常:
RuntimeException
本身和子类。编译阶段没有错误提示,运行时出现的
异常的作用
- 异常是用来查询bug的关键参考信息
- 异常可以作为方法内部的一种特殊返回值,用于通知调用者底层的执行情况
异常的处理方式
1)JVM默认的处理方式
- 把异常的名称,异常原因及异常出现的位置等信息输出在了控制台
- 程序停止执行,异常下面的代码不会再执行了
2)自己处理
try{
可能出现异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }
如果try中可能会遇到多个问题,怎么执行?
写多个catch与之对应,父类异常需要写在下面(写在上面,那么他的子类在下面永远无法catch到)
如果try中遇到了问题,那么try下面的其他代码还会执行吗?
不会执行
异常方法
public String getMessage() 返回详细消息字符串
public String toString() 返回此可抛出的简短描述
**public void printStackTrace() 把异常的错误消息输出在控制台**
这里的**printStackTrace()
** 打印消息,不会停止程序
自定义异常
- 定义异常类
- 写继承关系(写出继承于哪个异常类)
- 空参构造
- 带参构造
先throws异常,才可以throw出异常
throw new AgeException(异常信息);
📘 throw new AgeException(异常信息);
在抛出方法的时候可以给出异常信息,会一并输出