JavaSE:异常(上)

234 阅读2分钟

001.什么是异常

  • 异常本质上是程序上的错误;
  • 错误在我们编写程序的过程中会经常发生,包括编译期间和运行期间的错误;

002.异常的分类:

Throwable的两个重要子类:Error(错误)和Exception(异常)

  • Error:是程序无法处理的错误,这些错误是不可查的;
  • Exception:是程序本身可以处理的异常;
    • 包括:检查性异常(checked exception)和非检查性异常(unchecked exception)
    • 非检查性异常:Java编译器不会检查这些异常,编译正常通过(发生在程序运行时)
      • 包含RuntimeException类及其子类异常;
      • 如:NullPointerException(空指针异常)、下标越界异常(IndexOutOfBoundsException)
    • 检查性异常:Java编译器提示必须处理的异常,否则编译不会通过(发生在编译时)
      • 如:IOException、SQLException

003.异常处理

异常处理机制为:抛出异常、捕获异常

5个关键字:try、catch、finally、throw、throws

//try-catch-finally
public void method(){
    try{
        //代码段1
        //产生异常的代码段2
    }catch(异常类型 ex){
        //对异常进行处理的代码段3
    }finally{
        //代码段4
    }
}

//try-catch捕获并处理异常(有异常:执行1-2-3)
public void method(){
    try{
        //代码段1
    }catch(异常类型 ex){
        //对异常进行处理的代码段2(针对代码段1处理)
    }
    //代码段3
}
//try-catch捕获并处理异常(无异常:执行1-3)
public void method(){
    try{
        //代码段1
    }catch(异常类型 ex){
        //对异常进行处理的代码段2
    }
    //代码段3
}

//try-finally
public void method(){
    try{
        //代码段1
    }finally{
        //代码段2
    }
    //代码段3
}
  • 注意点:
    • try发生异常,产生异常对象,但catch异常类型不匹配,则导致程序中断运行;
    • 多重catch块:
      • 一旦某个catch捕获到匹配的异常类型,将进入异常处理代码。一经处理结束,则整个try-catch语句结束;
      • 尽量将捕获的底层异常类的catch子句放在前面,而尽量将捕获相对高层的异常类的catch子句的后面;

004.例图

005.常见的异常类型

006.Throw和Throws

  • throws声明将要抛出何种类型的异常,而throw将产生的异常抛出;
//throws 在方法声明出用throws子句来声明抛出异常,让该方法的调用者来处理;
public void method() throws Exception1,Exception2,...,ExceptionN{
    //可能产生异常的代码
}

//throw抛出一个异常
throw new IOException();

007.自定义异常

008.异常链