一、概念
1.1 程序执行过程中发生的不正常行为称为异常。
二、异常的体系
2.1Throwable:派生出两个重要的子类,Error和Exception,其中 Error 一般发生则无力回天,Exception 可通过代码进行处理。
2.2Exception(异常相关的父类)分为:1.运行时异常也称为非受查异常(RuntimeException 及其子类),编译器放行,不强制处理,由程序员自行决定是否捕获。
- 编译时异常也称为受查异常(Exception(非 RuntimeException 的子类)),编译器强制你 try-catch 或 throws,否则报错。
注:语法没错,但编译器需要你写好善后代码。
三、处理异常的 5 个关键字
3.1 异常的抛出:throw
例:
thrownewXXXException();注:
- 必须写在方法体内。
- 异常一旦抛出,其后代码不再执行。
- 如果抛出编译时异常,用户必须处理,否则无法编译(程序不安全,两种方案 A:try-catch(自行处理) B:throws(交给上层调用者))。
3.2 异常的声明:throws
例:
修饰符 返回值 方法名(参数列表)throws异常1,异常2{}注:声明的异常必须是 Exception 或者 Exception 的子类。
3.3 异常的捕获:try-catch 捕获并处理异常
例:
try{// 代码}catch(要捕获的异常类型 e){e.printStackTrace();// 找出哪个地方异常}catch(要捕获的异常类型 e){// 对异常进行处理}注:
- 一次执行流程,永远只有一个异常被抛出和捕获
- 有父子关系情况下,一定是子类在前 catch,父类在后 catch,否则编译错误。
3.4 finally
- 其中代码一定会执行,一般进行一些结尾工作。
四、自定义异常类
自定义异常类,然后继承自 Exception 或者 RuntimeException
实现一个带有 String 类型参数的构造方法,参数含义:出现异常的原因