• 【JavaEE重点知识归纳】第11节:认识异常


    目录

    一:异常的概念和体系结构

    1.概念

    2.体系结构

    3.异常分类

    二:异常的处理

    1.防御式编程

    2.异常的抛出

    3.异常的捕获

    4.异常的处理流程

    三:自定义异常


    一:异常的概念和体系结构

    1.概念

    (1)在Java中,在程序执行过程中发生的不正常的行为称为异常

    (2)常见的的异常

    2.体系结构

    3.异常分类

    (1)编译时异常(受查异常)

            编译时报错

    (2)运行时异常(非受查异常)

            比如:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException

    注意:编译时出现的语法错误不能称为异常

    二:异常的处理

    1.防御式编程:

    (1)LBYL:事前防御型(if)

    (2)EAFP:事后认错型(try、catch、finally)

    2.异常的抛出

    (1)在Java中,异常处理主要的5个关键字:throw、try、catch、final、throws

    (2)抛出异常:throw必须写在方法体里面,异常一旦抛出,后面的代码就不会执行

    throw  new xxxException("异常产生的原因");

    3.异常的捕获

    (1)异常声明throws:通过throws处理编译时异常

    【这个详细代码在后面自定义类型】


    (2)try-catch

    throws对异常并没有真正处理,而是将异常报告给抛出异常方法的调用者,由调用者处理。如果真正要对异常进行处理,就需要try-catch

    语法格式:

    try{

            //将可能出现异常的代码放在这里

    }catch(要捕获的类型 e ){

            //如果try中的代码抛出异常了,此处的catch捕获时异常类型与try中跑出的类型一致,或者是try中抛出的异常的父类时,就会被捕获到

            //对异常就可以正常处理,处理完毕后,跳出try-catch结构,继续执行后续代码

    }

    catch(要捕获的类型 e ){

            //try中可能抛出多个不同的异常对象,则必须使用多个catch来捕获

    }finally{

            //此处代码一定会执行

    }

    //后续代码

    //当异常被捕获到了,异常就被处理了,这里的后续代码一定会被执行到

    //如果捕获了,但是捕获类型不同,就为白捕获,这里的代码也不会执行到

    4.异常的处理流程

    (1)程序先执行try中的代码

    (2)如果try中的代码出现异常,就会结束try中的代码,看catch中的异常类型是否匹配

    (3)如果找到匹配的异常类型,就会执行catch中的代码

    (4)如果没有找到匹配的异常类型,就会向上传递到上层调用者

    (5)无论是否找到匹配的异常类型,finally中的代码都会被执行到(在该方法结束之前执行)

    (6)如果上层调用者没有处理的了异常,就会继续向上传递

    (7)一直到main方法也没有合适的代码处理异常,就会交给JVM来进行处理,此时程序就会异常终止

    三:自定义异常

    1.前提

            Java中虽然内置了丰富的异常类,但是并不能完全表示实际开发中遇到的一种异常,此时就需要维护复合实际情况的异常结构

    2.具体方式

    (1)自定义异常类,然后继承自Exception或RunTimeException

    (2)实现一个带有String类型参数的构造方法,参数含义:出现异常的的原因

    (3)

    1. public class PasswordException extends Exception{
    2. public PasswordException(String message){
    3. super(message);
    4. }
    5. }
    1. public class NameException extends Exception{
    2. public NameException(String message){
    3. super(message);
    4. }
    5. }
    1. public class Login {
    2. private String name="admin";
    3. private String password="1234";
    4. public static void loginInfo(String name,String password) throws NameException, PasswordException {
    5. if(!name.equals(name)){
    6. throw new NameException("用户名错误");
    7. }
    8. if(!password.equals(password)){
    9. throw new PasswordException("用户名错误");
    10. }
    11. System.out.println("登陆成功");
    12. }
    13. public static void main(String[] args) {
    14. try {
    15. loginInfo("amdin","1234");
    16. } catch (NameException e) {
    17. throw new RuntimeException(e);
    18. } catch (PasswordException e) {
    19. throw new RuntimeException(e);
    20. }
    21. }
    22. }
    3.注意事项

            继承自Exception的异常默认是受查异常;继承自RunTimeException的异常默认是非受查异常

  • 相关阅读:
    安装Anaconda之后cmd打不开
    TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接
    Python:基于dlib,numpy进行换脸实践
    集美大学 - 2840 - 实验10和11 - 编程题
    认识C语言函数
    「哈哥赠书活动 - 48期」-『商业分析思维与实践:用数据分析解决商业问题宣传文案』
    青少年python系列 40.面向对象-类
    com.alibaba.csp.sentinel.slots.block.flow.FlowException: null--记录一次报错
    Kafka总结文档
    LibOpenCM3(五) 基础功能: 系统时钟, GPIO, 定时器
  • 原文地址:https://blog.csdn.net/m0_74164458/article/details/133695222