Java 异常处理

前言

1、异常

  • 异常:导致程序的正常流程被中断的事件,叫做异常。

2、异常处理

  • 异常处理常见手段:trycatchfinallythrows

    1
    2
    3
    4
    5
    6
    7
    try {
    ...
    } catch(Exception e) {
    ...
    } finally {
    // 都会执行的代码
    }
  • throws 出现在方法声明上,而 throw 通常都出现在方法体内。

  • throws 表示出现异常的一种可能性,并不一定会发生这些异常。throw 则是抛出了异常,执行 throw 则一定抛出了某个异常对象。

    1
    2
    3
    private static void method2() throws FileNotFoundException {
    ...
    }

3、异常分类

  • 异常分类:可查异常(CheckedException),运行时异常(RuntimeException)和错误(Error)3 种。其中,运行时异常和错误又叫非可查异常。

  • 可查异常:即必须进行处理的异常,要么 try catch 住,要么往外抛,谁调用,谁处理,如果不处理,编译器,就不让你通过。

  • 运行时异常:不是必须进行 try catch 的异常,在编写代码的时候,依然可以使用 try catch throws 进行处理,与可查异常不同之处在于,即便不进行 try catch,也不会有编译错误。

  • 错误:指的是系统级别的异常,通常是内存用光了,在默认设置下,一般 java 程序启动的时候,最大可以使用 16m 的内存,与运行时异常一样,错误也是不要求强制捕捉的。

  • Throwable 类ExceptionError 都继承了该类,所以在捕捉的时候,也可以使用 Throwable 进行捕捉。

异常 介绍
ArithmeticException 由于除数为 0 引起的异常
ArrayStoreException 由于数组存储空间不够引起的异常
ClassCastException 当把一个对象归为某个类,但实际上此对象并不是由这个类 创建的,也不是其子类创建的,则会引起异常
IllegalMonitorStateException 监控器状态出错引起的异常
NegativeArraySizeException 数组长度是负数,则产生异常
NullPointerException 程序试图访问一个空的数组中的元素或访问空的对象中的 方法或变量时产生异常
SecurityException 由于访问了不应访问的指针,使安全性出问题而引起异常
StringIndexOutOfBoundsException 访问字符串序号越界,引起异常
NumberFormatException 字符的 UTF 代码数据格式有错引起异常
IllegalThreadException 线程调用某个方法而所处状态不适当,引起异常
IOException 由于文件未找到、未打开或者 I/O 操作不能进行而引起异常
ClassNotFoundException 未找到指定名字的类或接口引起异常
CloneNotSupportedException 程序中的一个对象引用 Object 类的 clone 方法,但 此对象并没有连接 Cloneable 接口,从而引起异常
InterruptedException 当一个线程处于等待状态时,另一个线程中断此线程,从 而引起异常,有关线程的内容,将在下一章讲述
NoSuchMethodException 所调用的方法未找到,引起异常
FileNotFoundException 未找到指定文件引起异常
EOFException 未完成输入操作即遇文件结束引起异常
OutofMemoryException 用 new 语句创建对象时,如系统无法为其分配内存空 间则产生异常
IndexOutOfBoundsExcention 由于数组下标越界或字符串访问越界引起异常
Illega1AccessExcePtion 试图访问一个非 public 方法
ArrayIdexOutOfBoundsException 访问数组元素下标越界,引起异常

4、自定义异常

  • 自定义异常

  • AdviceNotFoundException.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    package com.food.support.exception;

    import java.io.Serializable;

    public class AdviceNotFoundException extends NotFoundException implements Serializable {
    public AdviceNotFoundException() {

    }

    public AdviceNotFoundException(int code, String message) {
    super(code, message);
    }

    public AdviceNotFoundException(String message) {
    super(message);
    }
    }
  • AdviceService.java

    1
    2
    3
    4
    5
    6
    7
    8
    package com.food.service;

    import com.food.support.exception.AdviceNotFoundException;

    public interface AdviceService {

    void deleteAdvice(int id) throws AdviceNotFoundException;
    }
  • AdviceServiceImpl.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    package com.food.service.impl;

    import com.food.dao.AdviceDao;
    import com.food.po.Advice;

    import com.food.service.AdviceService;
    import com.food.support.exception.AdviceNotFoundException;

    @Service
    public class AdviceServiceImpl implements AdviceService {

    @Override
    public void deleteAdvice(int id) throws AdviceNotFoundException {

    Advice advice = adviceDao.getById(id);
    if (ObjectUtils.isEmpty(advice)) {
    throw new AdviceNotFoundException(9006, "Advice not found!");
    }
    adviceDao.delete(id);
    }
    }
  • AdviceController.java

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.food.controller.manage;

    import com.food.po.Advice;

    import com.food.service.AdviceService;
    import com.food.support.exception.AdviceNotFoundException;

    @RestController
    @RequestMapping("/api/v1")
    public class AdviceController {

    @Autowired
    private AdviceService adviceService;

    @PostMapping("/advice/{id:\\d+}/delete")
    public Response deleteAdvice(@PathVariable("id") int id) {
    try {
    adviceService.deleteAdvice(id);
    return new Response<>();
    } catch (AdviceNotFoundException e) {
    return new Response(e.getCode(), e.getMessage());
    }
    }
    }
文章目录
  1. 1. 前言
  2. 2. 1、异常
  3. 3. 2、异常处理
  4. 4. 3、异常分类
  5. 5. 4、自定义异常
隐藏目录