java异常学习笔记
一.java异常简介
(1)检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
(2)运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
(3)错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
3.异常方法
(1)public String getMessage():返回关于发生的异常的详细信息。
(2)public Throwable getCause():返回一个Throwable 对象代表异常原因。
(3)public String toString():使用getMessage()的结果返回类的串级名字。
(4)public void printStackTrace():打印toString()结果和栈层次到System.err,即错误输出流。
(5)public StackTraceElement [] getStackTrace():返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。
(6)public Throwable fillInStackTrace():用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中
二、异常的使用及注意点
1、异常的处理方案
try...catch、try...catch...finally、try...finally
try{
可能会发生异常的代码块
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}catch(异常类型 异常名(变量)){
针对异常进行处理的代码
}finally{
一定会执行的代码
}
2.在catch捕获异常时,为什么不考虑使用Throwable类型,而只是使用Exception来进行接收?
Throwable表示的范围要比Exception大。实际上程序使用Throwable来进行处理,没有任何语法问题,但是却会存在逻辑问题。因为此时出现的(或者说用户能够处理的)只有Exception类型,而如果使用Throwable接收,还会表示可以处理Error的错误,而用户是处理不了Error错误的,所以在开发中用户可以处理的异常都要求以Exception类为主。
3.检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)区别?
(1)所有的检查性异常都继承自java.lang.Exception;所有的非检查性异常都继承自java.lang.RuntimeException。
(2)检查性异常和非检查性异常最主要的区别在于其处理异常的方式:检查性异常必须使用try catch或者throws等关键字进行处理,否则编译器会报错;非检查性异常一般是程序代码写的不够严谨而导致的问题,可以通过修改代码来规避。
(3)常见的运行时异常:空指针异常(NullPointerException)、除零异常(ArithmeticException)、数组越界异常(ArrayIndexOutOfBoundsException)等;
(4)常见的检查性异常:输入输出异常(IOException)、文件不存在异常(FileNotFoundException)、SQL语句异常(SQLException)等。
三.自定义异常
自定义的异常应该总是包含如下的构造函数:
(1)一个无参构造函数
(2)一个带有String参数的构造函数,并传递给父类的构造函数。
(3)一个带有String参数和Throwable参数,并都传递给父类构造函数
(4)一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
参考博客:https://blog.csdn.net/sugar_no1/article/details/88593255