Java基础——异常处理

异常处理:
java.lang.Throwable
  Error:错误,程序终止运行
  Exception:异常,在编写程序时,考虑到对这些异常的处理
    1.编译时异常:(javac.exe命令时,抛出的异常)
    2.运行时异常:(java.exe命令时,抛出的异常)

常见的运行时异常:
  1.数组下标越界
  2.空指针

处理Exception异常:抓抛模型
  1.抛:当我们执行代码时,一旦出现异常,就在异常代码处生成一个对应的异常类型的对象,并将此对象抛出(自动抛出/手动抛出
    一旦将此异常对象抛出,程序终止执行
    此异常类的对象抛给方法的调用者
  2.抓:抓住上一步抛出异常类的对象,如何抓,即异常处理方式。
  异常处理方式一:try-catch-finally (右键 soundwith)

try{
    //可能出现异常的代码
}catch(Exception1 e1){
    //处理的方式1
}catch(Exception2 e2){
    //处理方式2
}finally{
    //一定要执行的代码
}

注:1.try内声明的变量,类似于局部变量,出了try{}语句,就不能被调用
  2.finally语句是可选的
  3.catch语句内部是对异常对象的处理
    getMessage();
    printStackTrace();
  4.有多个catch语句,try中抛出的异常类对象从上往下去匹配catch中的异常类的类型,一旦满足,就执行该catch中的语句,执行完后就跳出,其余catch语句不再执行
  5.异常处理之后,其后代码继续执行
  6.catch中的异常类型如果是“并列”关系,孰上孰下无所谓
    但是若catch中的异常类型是“包含”关系,必须将父类的放在上面进行处理,否则报错
  7.finally中存放的是一定会被执行的代码,不管try catch中是否仍有异常未被处理,以及是否有return返回值
  8.try-catch是可以嵌套
3.对于运行时异常,可以不进行显式的处理
但是对于编译时异常,必须进行显式的处理


  异常处理方式二:在方法的声明处,显式的抛出该异常对象的类型

public void method() throws FileNotFoundException, IOException{
    FileInputStream fis = new FileInputStream(new File("hello.txt"));
    int b;
    while((b = fis.read()) != -1){
    System.out.print((char)b);
    }
    fis.close();
}

  当在此方法的内部出现异常的时候,会抛出一个异常类的对象,抛给方法的调用者
  异常的对象可以逐层的向上抛,直至main中,当然,在抛的过程中,可以用try-catch-finally进行处理

Java的异常处理:抓抛模型
  1.抓:异常的处理,有两种方式(1.try-catch-finally, 2.throws+异常的类型
  2.抛:一旦执行过程中,出现异常,会抛出一个异常类的对象。(自动抛出 vs 手动抛出(throw + 异常类的对象)
  手动抛出异常:throw RuntimeException("运行时间过长");(异常类,既可以是现成的异常类,也可以是自己创建的异常类)
  若是RuntimeException,可以不显式的处理
  若是Exception,必须要显式的处理
  自定义的异常类
    1.自定义的异常类继承现有的异常类
    2.提供一个序列号,提供几个重载的构造器
  注:子类重写的父类的方法,其throws的异常类型只能小于或等于被重写的父类的方法的异常类型

posted @ 2017-11-07 21:38  SkyeAngel  阅读(238)  评论(0编辑  收藏  举报