Java异常知识概括

130 阅读4分钟

@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 对象栈层次,添加到栈层次任何先前信息中。