1、 异常概述与异常体系结构

在程序执行过程中,发生不正常的情况称之为异常

1. error

不编写针对性的代码处理
stackoverflowerror 栈溢出
outofmemeoryerror 堆溢出

2. exception

编程错误或者偶然的外在因素导致的错误,可以使用代码处理

1、错误例子

1、空指针异常

2、试图访问不存在的文件

3、网络连续中断

4、数组角标越界

2、分类

1、编译时异常

2、运行时异常

3、异常体系结构

Throwable
Error
Exception
编译时异常
IoException
FileNotFoundException
ClassNotFoundException
运行时异常
RuntimeException
NullPointerException
ArrayIndexOutOfBoundsException
ClassCastException
NumberFormatException
InputMismatchException
ArithmeticException

2、 常见异常

3、 处理机制一:try catch finally

格式:

  1. try {
  2. //可能出现异常的代码块
  3. } catch (Exception e) {
  4. //异常的处理方式
  5. System.out.println(e.getMessage());
  6. e.printStackTrace();
  7. } finally {
  8. //一定会执行的代码
  9. }

常用的异常处理方式

e.getMessage()
e.printStackTrace();

注意点:

  1. 在try catch中声明的变量出了结构就没办法使用,作用域问题
  2. 使用try catch finally 处理编译时异常,是的程序在编译时不在报错,但是运行时依然可能报错、相当于时把异常延迟到运行时
  3. 像数据库连接、输入输出流、网络编程socket等 jvm无法自动回收,需要我们手动关闭,这个时候就需要放在finally里面关闭

    4、 处理机制二:throws

    格式:throws + 异常类型
    写在方法的声明处,指明此方法执行时可能会抛出异常,一旦方法执行,出现异常,方法仍然会抛出异常 此对象满足异常类型时 ,就抛出异常,异常后的代码就不再执行了

    try catch finally 是真正的将异常处理掉了 throws 只是将异常抛给了方法调用者,并没有真正的将异常处理掉

1、重写方法的规则之一:

  1. 子类重写的方法抛出异常类型要小与父类的异常类型

    2、try catch finally 和 throws 如何选用

  2. 如果父类被重写的方法没有使用throws 抛出异常,那么子类重写的方法不能使用throws 抛异常,意味着如果子类重写方法如果有异常要抛出,必须使用try catch finally

  3. 执行的方法中先后调用其他方法,这几个方法是递进调用关系,建议将这几个方法 使用throws 处理 执行的方法使用 try catch finally 处理

    5、 手动抛出异常:throw

    格式:throw new Exception(“”);
    throw 抛出异常,用在方法内
    thorws 异常的处理用在方法后

    6、 自定义异常类

  4. 如果自定义异常类

    1. 继承现有的异常类结构 Excepation RuntimeException
    2. 定义全局常量 serialVersionUID
      1. static final long serialVersionUID = -33993124229948L;
    3. 提供重载的构造器