异常

异常

目录

  1. 什么是异常
  2. 异常体系结构
  3. Java异常处理机制
  4. 异常处理
  5. 自定义异常

什么是异常

实际中遇到的情况不可能是完美的。如用户输入不符合预期. 打开某个文件该文件格式不对或者不存在. 读出数据库的数据可能是空. 程序跑着跑着,但是内存或者硬盘满了。
可以分为三类

  • 检查性异常
    用户的错误或者问题引起的异常,如要打开一个文件,但是这个文件被用户删了
  • 运行时异常
    编译的时候看不到,只有运行时可见,可能时被程序员避免的异常。
  • 错误Error
    脱离程序员控制的问题,如jvm栈溢出了

异常体系结构

java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。

补图

在java PI中非为两类Error和Exception
1. Error
Error对象由Java虚拟机生成并抛出,大多数错误与代码编写者执行的操作无关.
OutOfMemoryErrot,内存不足,jvm会选择线程终止,程序就挂掉了(严重)。
NoClassDefFoundError类定义错误,LinkageError链接错误
2. Exception
RuntimeException运行时异常
ArrayIndexOutOfBoundsException(数组下边越界)
NullPointerException(空指针异常)
ArithmeticException(算术异常)
MissingResourceException(丢失资源)
ClassNotFoundException(找不到类)等异常,这些是不检查异常,通常是程序逻辑错误引起的.
3. Error和Exception区别
Error通常是灾难性的致命错误,是程序无法处理的。在出现这些错误时JVM会终止程序
Exception通常时可处理的,需要在程序中尽可能去处理。

JAVA异常处理机制

  • 抛出异常
  • 捕获异常
    try, catch, finally, throw, throws
    try, catch, finally --- 三件套
    catch可以有多个,后面写捕获最大的异常项Exception, Throwable
    finally可以不写,但写了不论是否发生异常finally都会被执行,通常用来做善后。
    IDEA ctrl+alt+t自动生成try catch块
int a = 1;
int b = 0;
try{
      if(b = 0){
            //手动抛出异常
            throw new ArithmeticException();
      }
      System.out.println(a/b);
}catch(Exception e){
      //手动结束程序
      System.exit(0);
      e.printStackTrace();
}finally{
}

自定义异常

java中内置大部分异常,用户自定义的异常只需要继承Exception即可

//异常类
public class MyException extends Exception{
      private int detail;
//看父类exception构造器里传递的信息,是报错信息
      public MyException(int a){
            this.detail = a;
      }
      //重写toString方法,方便后面打印异常e
      public String toString(){
            return "MyException{ detail = "+detail+"}";
      }
}
//测试类
static void test(int a)throws{
      if (a>10){
            throw neew MyException(a);//抛出
      }
      Systemout.println("OK")
}
public static void main(String[] args){
      try{
            test(1);
      }catch(MyExeption e){
            //增加处理异常的代码块
            System.out.println("MyException=>"+e);
      }
}

实际应用中的总结

  • 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  • 多重catch后加一个catch(Exception)来处理可能被遗漏的异常
  • 不确定的代码加上try-catch 处理潜在异常
  • 尽量去处理异常,切忌只简单打印printStackTrace()
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加finally语句块去释放占用的资源
    代码有没处理的异常,IDEA中会红色波浪线标注出来,此时按住alt+enter键可以提示怎么处理
posted @ 2021-01-21 17:30  晒网达人  阅读(121)  评论(0)    收藏  举报