常的分类:
- Throwable:异常基类
-
Error:错误
子类。。。 -
Exception:异常
- RuntimeException: 运行期异常
子类。。。 - 非RuntimeException: 编译器异常
- RuntimeException: 运行期异常
-
throw:抛出存在的异常
1.throw必须写在方法的内部,只能写一个异常
2.throw后边new的对象必须是Exception或者Exception的子类对象
3.throw抛出编译期的异常对象,我们就必须处理这个异常,要么try。。。catch,要么throws抛出给调用者
4.throw抛出运行期的异常对象,我们不处理这个异常,默认交给jvm处理 -
异常的处理
关键字:try、catch、finally、throw、throws
- throws:声明异常,交给jvm处理
作用:方法内部抛出异常的时候,我们就必须处理这个异常
使用格式:在方法声明时使用,可以同时声明对各异常,后面的代码不会执行 - try…catch…:人为处理异常
异常捕获,后面的代码会执行
代码:
注意:try{ 可能产生的异常 }catch(出现异常的名字 异常的变量名字){ 处理方式 }finally{ 无论是否出现异常都要执行 }
1.throws必须写在方法声明处
2.声明的异常必须是Exception或者其子类
3.方法内部如果抛出多个异常,throws也必须声明相同的异常
4.在操作异常的时候可以进行解决try。。。catch,也可以继续抛出throws
5.在多次异常一次捕获多次处理的时候,如果异常存在字父类关系,子类必须写在父类的上边
6.如果存在return的情况,返回的finally中的结果 -
子类不能比父类更坏
判断是否为空的的一个方法:
Objects中的静态方法
public static <T> T requireNonNull(T obj)
public static <T> T requireNonNull(T obj, String str)
Throwable中的方法
1,String getMessage() 返回异常信息简短字符串
2,void printStackTrace() 获取异常的名称信息以及异常出现的位置。
3,String toString() 返回异常信息的字符串
4,void printStackTrace(PrintStream s) 可以把异常内容保存到日志文件中,方便后期查看。
自定义异常
1,定义了一个方法,检测成绩的等级,合法的成绩:0-150之间。
-很明显java没有对应的异常类,所以我们需要自定义一个异常来处理自定义逻辑出现的问题
2,自定义异常类
- 继承Exception:自定义的异常就是一个编译器异常,如果方法内部抛了编译器异常,就得处理,要么throws,要么try…catch…
- 继承RuntimeException:运行期异常可以交由jvm处理