这篇博客决定写一些异常相关的理论问题和个人理解。
什么叫异常?
学到异常我们肯定要问自己这个问题,异常就是程序中不正常的现象。异常包括error和exception两种。第一种error是程序员不能处理的异常。第二种是可以通过程序员处理代码解决的异常。它包括编译异常和运行异常。编译异常是指在编译过程中,会出现提示的异常。运行异常是指在运行时出现的异常,并将异常信息反馈控制台。
那么异常有哪些处理方式呢?
- 自己处理(负责)。try_catch捕获异常后,根据程序设定的可能出现异常的位置,执行相应代码。
- 抛出异常(不负责)。Throw,抛出异常给调用的人处理。
在异常处理时的注意事项?
1.运行时异常被抛出可以不处理,因为JVM会处理
2.如果父类抛出了异常,子类在覆盖父类方法的过程中,只能进行3种选择:(1)不抛出任何异常(2)抛出和父类一样的异常(3)抛出父类异常的子类异常
Throw和throws的区别:
1.虽然二者均为异常处理的关键字,但是throws用于声明异常,throw用于抛出异常。
2.try中包括的是可能出现异常的代码,异常可能是0个到n个,但是能被catch捕获到的异常只有一个。Throw可能抛出多少个异常,Throws就必须定义多少个异常。
Try-catch-finally运行流程:
try表示为可能出现异常的区域,如果出现异常就进入catch相应的异常处理的内容,反之不进入,但是如果有finally的话,不管是不是存在异常,一定运行finally部分内容。需要注意的是,虽然一个try中可以定义多个catch,每个catch中也都是各自不同的异常对象,但是,如果catch中的异常对象具有继承关系,子类异常对象参数必须在父类异常对象参数上面(避免出现向上转型错误的问题)。
Try-catch-finally使用方式?
一个异常获取必须包含一个try(可以不包括catch或者不包括finally,但是二者必须选择一个和try使用),但是try关键字不能单个使用,一个try可以连接多个catch,但是最多只连接一个finally。
Throwable类中常用的方法?
1.String getMessage(),返回异常信息
2.void printStackTrace(),将异常信息红色字体打印在控制台(包括包名类名、异常名称和异常原因)
3.String toString(),使用简短的字符串描述错误
如何自定义异常类?
- 首先创建一个类,并让它继承Exception或者Exception子类,若想创建运行时异常可以继承RuntimeException。
- 然后定义两个构造器,一个无参,一个有参,用super分别调用其父类有参和无参的构造器,有参构造器的参数列表使用用于输出错误信息的String变量message。
Try-catch和return配合该怎么运行?
- try-catch块在return之后,则出现编译异常。
- 如果return在try-catch中,程序会按顺序执行,就算执行到return也不会停止,会执行完finally里面的最后一句语句,然后返回执行return语句。(return在try-catch中它不会执行finally括号以外的任何语句)