一、概念【理解即可】1. 异常程序运行过程中出现的非正常情况。2. 异常的处理当异常出现时执行一段预先准备好的代码。3. 异常处理的必要性减少用户的损失、同时减小给用户带来麻烦也可以对用户做一些提示信息。二、异常的分类【面试重点】1. ThrowableJava语言中所有错误或是异常的父类位于java.lang包中◦ 核心方法方法声明 功能说明String getMessage() 获取字符串类型异常信息用于给用户展示提示信息void printStackTrace() 打印输出方法调用过程中产生的详细异常信息供程序员调试程序2. 子类Error代表错误◦ 说明仅靠程序本身无法恢复的严重错误例如JVM内存不足、方法调用栈溢出等。◦ 示例java.lang.StackOverflowError递归导致的栈溢出3. 子类Exception代表异常◦ RuntimeException运行时异常/未检查异常与RuntimeException有直接或间接继承关系的异常类◦ 特点编译器不会检测此类异常运行时才报错。◦ 处理可处理可不处理严谨代码建议处理此类异常可以避免。◦ 常见示例1. java.lang.ArrayIndexOutOfBoundsException下标越界2. java.lang.NullPointerException空指针异常3. java.lang.ClassCastException类型转换异常4. java.lang.NumberFormatException数字格式转换异常◦ 非RuntimeException非运行时异常/已检查异常与RuntimeException无任何继承关系的异常类◦ 特点编译器检测此类异常编译时报错。◦ 处理此类异常必须处理。◦ 示例Class.forName(day1.TestStudent);三、异常的产生1. 自动产生异常◦ 产生原因程序运行过程中遇到错误代码自动产生异常。◦ 结果程序一旦遇到异常会被终止无法继续执行异常之后的代码。2. 手动产生异常【开发重点】◦ 关键字throw◦ 语法throw new 异常类类名(异常信息);◦ 位置必须定义在方法内部◦ 结果相当于return终止当前程序程序会因异常而被终止。四、异常的传递【理解即可】• Java中的异常沿着方法的调用链进行反方向传递最终传递给JVM导致程序被终止。五、异常的处理【开发重点】1. 消极处理异常声明异常• 关键字throws• 位置在方法声明的位置进行消极处理• 语法修饰符 返回值类型 方法名(形参列表) throws 异常类名1,异常类名2,异常类名3{}• 结果仅推卸责任程序仍会因异常而被终止。• 作用让非运行时异常在编译阶段通过。• 注意消极处理异常时可以利用父类类型处理其子类型的异常。2. 积极处理异常捕获异常• 语法try{// 可能出现异常的语句}catch(异常类名 e){// 异常出现时需要执行的语句}• 注意事项1. try后面可以定义多个catch结构一旦try出现异常会从上往下依次匹配第一个符合的catch。2. catch可以利用父类类型处理本类型所有子类型的异常多态的应用。3. 定义子类的catch需要写在其父类类型的catch结构前面。4. catch中只能捕获try可能出现的非运行时异常但catch中可以处理任意运行时异常不管try中是否有可能出现此类异常。3. finally的应用• 语法try{// 可能出现异常的语句}catch(异常类名 e){// 异常出现时执行的语句}finally{// 不管有没有异常都必须执行的语句}• 应用场景开发中不建议将return语句定义在finally中通常finally用于关闭资源如文件流、数据库连接。• 常见结构◦ try{}catch(){}◦ try{}catch(){}catch(){}◦ try{}catch(){}finally{}◦ try{}catch(){}catch(){}finally{}◦ try{}finally{}仅为了执行必须语句• 注意try后面可以跟多个catch但最多只能有一个finallytry后面至少有一个catch或是finally。六、自定义异常1. 定义规则◦ 类继承Exception或是其子类 → 抛出的异常为非运行时异常◦ 类继承RuntimeException或是其子类 → 抛出的异常为运行时异常2. 必须提供的构造方法◦ 无参构造方法◦ 带String类型参数的构造方法借助super()为父类Throwable的异常信息属性赋值public class 类名 extends Exception/RuntimeException{public 类名(){}public 类名(String message){super(message);}}七、方法覆盖异常相关【面试开发重点】方法重写的异常相关规则1. 子类的方法名、形参列表、返回值类型和父类相同。2. 子类的方法的访问修饰符和父类相同或是更宽松如父类protected子类可以是protected或public。3. 子类不能抛出比父类更多、更宽泛的异常可以抛出更少、更窄的异常或不抛出异常。
Java14 异常知识点
一、概念【理解即可】1. 异常程序运行过程中出现的非正常情况。2. 异常的处理当异常出现时执行一段预先准备好的代码。3. 异常处理的必要性减少用户的损失、同时减小给用户带来麻烦也可以对用户做一些提示信息。二、异常的分类【面试重点】1. ThrowableJava语言中所有错误或是异常的父类位于java.lang包中◦ 核心方法方法声明 功能说明String getMessage() 获取字符串类型异常信息用于给用户展示提示信息void printStackTrace() 打印输出方法调用过程中产生的详细异常信息供程序员调试程序2. 子类Error代表错误◦ 说明仅靠程序本身无法恢复的严重错误例如JVM内存不足、方法调用栈溢出等。◦ 示例java.lang.StackOverflowError递归导致的栈溢出3. 子类Exception代表异常◦ RuntimeException运行时异常/未检查异常与RuntimeException有直接或间接继承关系的异常类◦ 特点编译器不会检测此类异常运行时才报错。◦ 处理可处理可不处理严谨代码建议处理此类异常可以避免。◦ 常见示例1. java.lang.ArrayIndexOutOfBoundsException下标越界2. java.lang.NullPointerException空指针异常3. java.lang.ClassCastException类型转换异常4. java.lang.NumberFormatException数字格式转换异常◦ 非RuntimeException非运行时异常/已检查异常与RuntimeException无任何继承关系的异常类◦ 特点编译器检测此类异常编译时报错。◦ 处理此类异常必须处理。◦ 示例Class.forName(day1.TestStudent);三、异常的产生1. 自动产生异常◦ 产生原因程序运行过程中遇到错误代码自动产生异常。◦ 结果程序一旦遇到异常会被终止无法继续执行异常之后的代码。2. 手动产生异常【开发重点】◦ 关键字throw◦ 语法throw new 异常类类名(异常信息);◦ 位置必须定义在方法内部◦ 结果相当于return终止当前程序程序会因异常而被终止。四、异常的传递【理解即可】• Java中的异常沿着方法的调用链进行反方向传递最终传递给JVM导致程序被终止。五、异常的处理【开发重点】1. 消极处理异常声明异常• 关键字throws• 位置在方法声明的位置进行消极处理• 语法修饰符 返回值类型 方法名(形参列表) throws 异常类名1,异常类名2,异常类名3{}• 结果仅推卸责任程序仍会因异常而被终止。• 作用让非运行时异常在编译阶段通过。• 注意消极处理异常时可以利用父类类型处理其子类型的异常。2. 积极处理异常捕获异常• 语法try{// 可能出现异常的语句}catch(异常类名 e){// 异常出现时需要执行的语句}• 注意事项1. try后面可以定义多个catch结构一旦try出现异常会从上往下依次匹配第一个符合的catch。2. catch可以利用父类类型处理本类型所有子类型的异常多态的应用。3. 定义子类的catch需要写在其父类类型的catch结构前面。4. catch中只能捕获try可能出现的非运行时异常但catch中可以处理任意运行时异常不管try中是否有可能出现此类异常。3. finally的应用• 语法try{// 可能出现异常的语句}catch(异常类名 e){// 异常出现时执行的语句}finally{// 不管有没有异常都必须执行的语句}• 应用场景开发中不建议将return语句定义在finally中通常finally用于关闭资源如文件流、数据库连接。• 常见结构◦ try{}catch(){}◦ try{}catch(){}catch(){}◦ try{}catch(){}finally{}◦ try{}catch(){}catch(){}finally{}◦ try{}finally{}仅为了执行必须语句• 注意try后面可以跟多个catch但最多只能有一个finallytry后面至少有一个catch或是finally。六、自定义异常1. 定义规则◦ 类继承Exception或是其子类 → 抛出的异常为非运行时异常◦ 类继承RuntimeException或是其子类 → 抛出的异常为运行时异常2. 必须提供的构造方法◦ 无参构造方法◦ 带String类型参数的构造方法借助super()为父类Throwable的异常信息属性赋值public class 类名 extends Exception/RuntimeException{public 类名(){}public 类名(String message){super(message);}}七、方法覆盖异常相关【面试开发重点】方法重写的异常相关规则1. 子类的方法名、形参列表、返回值类型和父类相同。2. 子类的方法的访问修饰符和父类相同或是更宽松如父类protected子类可以是protected或public。3. 子类不能抛出比父类更多、更宽泛的异常可以抛出更少、更窄的异常或不抛出异常。