异常

异常

1.异常的介绍和分类

1.概述:代码不正常,在java中其实是一个一个的类
2.之前见过的异常:
  NullPointerException
  ArrayIndexOutOfBoundsException
  ClassCastException
3.异常分类 

image-20220228183614579

2.异常的处理方式

1.throws

1.格式:参数后面,方法的大括号前面
      throws 异常对象

抛多个异常

1.格式:
  throws 异常对象,异常对象...
2.注意:
  a.如果方法中同时有多个异常,并且多个异常之间有子父类继承关系,先抛小的,再抛大的
  b.如果方法中的多个异常,我们不知道到底是不是子父类继承关系,我们可以直接抛Exception

2.try...catch

扑获异常

1.格式
  try{
     可能出现异常的代码
  }catch(异常对象 对象名字){
     处理异常的方案->打印异常信息->将异常信息扔到日志文件中
  }

2.注意:
  catch要准确,如果catch不到异常,相当于没有处理,没有处理,就会给jvm,jvm直接结束程序
1.格式:
  try{
    可能出现的异常代码
  }catch(异常对象 对象名){
    处理异常的方案->打印异常信息->将异常信息扔到日志文件中
  }catch(异常对象 对象名){
    处理异常的方案->打印异常信息->将异常信息扔到日志文件中
  }catch(异常对象 对象名){
    处理异常的方案->打印异常信息->将异常信息扔到日志文件中
  }catch(异常对象 对象名){
    处理异常的方案->打印异常信息->将异常信息扔到日志文件中
  }...
      
2.注意:
  a.如果捕获的多个异常之间,有子父类继承关系,先抓小的,再抓大的异常
  b.如果咱们捕获多个异常时,不知道多个异常之间是否有子父类继承关系,我们可以直接抓大的,或者直接抓Exception

3.finally关键字

1.概述:finally中的代码是一定会执行的
2.格式:
  try{
     可能出现异常的代码
  }catch(异常对象 对象名字){
     处理异常的方案->打印异常信息->将异常信息扔到日志文件中
  }finally{
     一定会执行的代码
  }
public class Demo08Exception {
    public static void main(String[] args) {
        int result = method();
        System.out.println(result);
    }

    public static int method() {
        try {
            String s = null;
            System.out.println(s.length());//空指针异常
            return 2;
        } catch (Exception e) {
            return 1;
        } finally {
            System.out.println("我一定要执行");
            //return 3;
        }

    }
}
  我一定要执行
  1
  
如果finally中加上return 3 执行结果为:
  我一定要执行
  3

使用场景

关闭资源用:
像IO流,Socket(网编),数据库连接对象,GC是回收不了的,所以当我们用这些gc回收不了的对象之后,需要手动关闭,所有这些对象使用成不成功都要手动关闭,所以手动关闭的代码就可以放到finally中

4.抛异常的注意事项

1.父类中的方法抛异常了,子类重写之后要不要抛?
  可抛可不抛
2.父类中的方法没有抛异常,子类重写之后要不要抛?
  不要抛

5.使用时机

1.如果处理异常之后,还想让后续的代码正常执行,我们使用try...catch
2.如果方法之间是递进关系(调用),我们可以先throws,但是到了最后需要用try...catch做一个统一的异常处理

快速处理异常方式:

1.如果遇到编译时期异常:直接alt+回车

2.如果遇到运行时期异常需要处理:选中->ctrl+alt+t

6.打印异常的三个方法

1.Throwable中的方法:
  public String getMessage():获取异常的描述信息,原因(提示给用户的时候,就提示错误信息)
  public String toString():获取异常的类型和异常描述信息(不用)
  public void printStackTrace():打印异常的跟踪栈信息并输出到控制台上(最详细的异常信息)
posted @ 2022-02-28 18:44  有空就一起吃饭吧  阅读(87)  评论(0编辑  收藏  举报