@TOC
异常机制
异常简介:
发送异常是指当系统发生错误时,系统自动new一个异常的实例对象出来,并抛出异常,强制系统执行结束。而异常就是Throwable的类对象。- 异常体系:
Throwable详解:
- Throwable具体分为两个子类一个是Error,一个是Exception,
- Error一般是发生在系统内部,虚拟机发生错误时抛出的异常,如栈内存溢出,堆内存溢出。
Exception就是我们通俗意义上所说的异常。它分为两类,运行时异常和非运行时异常。运行时异常也成为非受检异常。而非运行时异常成为受检异常。可以理解为运行时异常是那些在运行时才会 发生错误的异常因此编译时期不受检查。而非运行时异常在编译期,编译器为了防止在运行时发生错误,必须在编译器将其抛出或捕获。- 总结来说受检异常和免检异常发生错误都只在运行时期,不过系统可以帮助用户提示一些异常会发生错误,因此在编译器就要处理好。
- 受检异常的父类是Exception,免检异常的父类是RuntimeException。而RuntimeException的父类是Exception。
总结:异常就是Exception类,而除它的子类除了RuntimeException类是运行时异常类,其他子类都是编译时异常类。
常见的异常有:
java.lang.RuntimeException:
<1>ClassCastException
<2>ArraylndexOutOfBoundsException
<3>NullPointerException
<4>ArithmeticException
<5>NumberFormatException
<6>InputMismatchException
java.io.IOExeption:
<1>FileNotFoundException
<2>EOFException
java.lang.ClassNotFoundException
java.lang.InterruptedException
java.io.FileNotFoundException
java.sql.SQLException
异常处理机制
try-catch-finally简介:
- 异常的处理方式之一:就是捕获,使用try-catch-finally。
- 将会发生异常的代码写在try代码块中,将捕获到的异常的处理方式写在catch代码块中,将无论是否会发生异常都要执行的语句写在finally代码块中。
- 在catch代码块中一般: ①可以用e.getMessage()方法打印异常信息。 ②也可以用e.printStackTrace()方法打印异常信息和异常出现的程序位置。
- 当我们使用带资源的try语句时,使用finally也许会造成一个异常被覆盖的问题,即try语句块中会抛出某个异常,执行finally语句块中跑出了同样的异常,这样的话就会导致原有的异常会丢失,转而抛出的finally语句中的异常。这时我们可以使用带资源的try语句来处理。(
前提是这个资源实现了AutoCloseable接口的类) ①格式如下:括号中可以写多行语句,会自动关闭括号中的资源
try(Resource res = ...) {
//TODO:res run
}
throws简介:
- 异常的处理方式另外一个方式:就是再次抛出。
- 当我们在执行某个代码块时发生了异常(由系统自动生成),这时我们可以捕获,也可以再次使用throws再次抛出,由调用这个代码所在的方法的调用者去处理。
而throws也就表示这个方法会抛出异常,提示使用者在调用该方法时要处理可能抛出的异常。
throw简介:
- 异常一般是由系统自动生成的,
但我们也可以自己手动生成异常,就是使用 throw。
用户自定义异常类
简介:
- 除了使用系统规定的异常外,我们也可以自己自定义异常。比如系统没有判断输入的数不能为负数的异常类,这时如果我们需要这种异常时,可以自己创建一个异常类。
创建的形式与创建普通类一样,不过异常类要继承Exception类或者继承RuntimeException类。- 如果继承RuntimeException类则代表此异常类是免检异常。
- 如果继承Exception类则代表此异常类是受检异常。
- 除此之外我们还可以按照具体实现构造器方法。
异常方法
Throwable 类的异常方法:
-
public String getMessage():返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。
-
public Throwable getCause():返回一个Throwable 对象代表异常原因。
-
public String toString():使用getMessage()的结果返回类的串级名字。
-
public void printStackTrace():打印toString()结果和栈层次到System.err,即错误输出流。
-
public StackTraceElement [] getStackTrace():返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。
-
public Throwable fillInStackTrace():用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。