异常
-
什么是异常?
- 程序出现了错误.
-
Java中所有异常的超类是哪个类?
- Throwable
-
Java中的异常体系是什么?
- Throwable
- Error
- Exception
- RuntimeException(运行期异常)
- 非RuntimeException(编译期异常)
- Throwable
-
Error类是如何产生,我们应该如何处理?
- Error类产生一般与硬件有关(极少数情况下与代码有关),不处理,钞能力.
-
Exception类是如何产生的?我们应该如何处理?
- 一般情况下代码出现了错误会产生Exception.
- 修改代码.
- 一般情况下代码出现了错误会产生Exception.
-
JVM虚拟机对于异常的默认处理方案是什么?
- 将异常的信息/原因/在代码出现的行数打印到了控制台.
- 关闭了Java虚拟机(在出现了异常的代码后面的代码都不执行了.)
异常处理之try…catch
-
我们使用try…catch处理异常的格式是什么?
-
try{ //可能出现异常的代码; } catch(可能出现的异常类名 e){ //如果代码执行到这个地方,说明出现了异常,以及被捕获到了,处理异常的代码; }
-
-
try…catch的执行流程是什么?
- 执行try代码块中的代码
- 没有出现异常,则不会执行catch代码块,会继续向下执行.
- 如果出现了异常
- 捕获到了异常 -> 则执行对应的catch代码块中的代码执行,然后继续向下执行.
- 没有捕获到异常 -> 则按照Java虚拟机的默认处理方式进行处理.
- 执行try代码块中的代码
Throwable的成员方法
- getMessage()方法是做什么用的?
- 获取异常出现的原因 -> 有的有原因,有的没有原因.
- toString()方法是做什么用的?
- 获取出现的异常类是哪一个以及出现异常的原因.
- printStackTrace()方法是做什么用的?
- 获取出现的异常类是哪一个以及异常出现的原因以及出现异常的位置.
- 打印堆栈信息.
- 获取出现的异常类是哪一个以及异常出现的原因以及出现异常的位置.
编译时异常和运行时异常的区别
- 编译期异常和运行期异常如何进行区分?各自有什么特点?
- 运行期异常RuntimeException和它的子类都是运行期异常,其他的都是编译期异常.
- 运行期异常不需要显示处理,也就是说在编写代码的时候不需要去关心是否有运行期异常,如果出现了错误,回来修改代码即可.
- 编译期异常必须要显示处理,可以使用try…catch进行处理,也可以抛出.
异常处理之throws
- 通过throws处理异常的格式是什么?
- throws 异常类名
- throws处理异常应该在什么地方进行编写?
- 在方法的声明上抛出.
- throws真正处理异常了吗?
- 没有 -> 谁调用谁处理.
- 运行期异常和编译期异常通过throws进行处理有什么区别?
- 运行期异常无序throws处理,正常编写代码运行即可,如果出现了错误,回来修改代码.
- 编译期异常
- 背锅 -> 自己try…catch进行处理.
- 甩锅 -> throws抛出,自己不处理,谁调用谁处理.
自定义异常
- 自定义异常的格式是什么?需要继承哪个类?
- xxxException -> 要继承 自定义的这个类是运行期还是编译期异常.
- 如果说自定义异常是编译期异常那么继承Exception
- 如果说自定义异常是运行期异常那么继承RuntimeException
- 还要添加构造方法 -> 无参/有参.
- xxxException -> 要继承 自定义的这个类是运行期还是编译期异常.
- throws和throw的区别是什么?
- throws在方法声明上,后面跟异常类名,throw一般在方法体中,后面跟着异常的对象.
- throws表示将异常抛出,throw表示抛出异常,就需要在方法体中处理.
- throws抛出异常不代表一定出现了异常,当执行了throw的时候表示一定抛出了某种异常.