目录

1、异常的概念和体系结构
1.1、异常的概念
例如:
(1)算术异常
System.out.println(10 / 0);
(2)数组越界异常
int[] arr = {1, 2, 3};
System.out.println(arr[100]);
(3)空指针异常
int[] arr = null;
System.out.println(arr.length);
1.2、 异常的体系结构

1.3 异常的分类
异常可能在编译时发生,也可能在程序运行时发生,根据发生的时机不同,可以将异常分为:
注意:编译时出现的语法性错误,不能称之为异常。例如将 System.out.println 拼写错了, 写成了system.out.println. 此时编译过程中就会出错, 这是 "编译期" 出错。而运行时指的是程序已经编译通过得到class 文件了, 再由 JVM 执行过程中出现的错误。
2、异常的处理
2.1、防御式编程
1. LBYL: Look Before You Leap. 在操作之前就做充分的检查。即:事前防御型
boolean ret = false;
        ret = 登陆游戏();
        if (!ret) {
            处理登陆游戏错误;
            return;
        }
        ret = 开始匹配();
        if (!ret) {
            处理匹配错误;
            return;
        }
        ret = 游戏确认();
        if (!ret) {
            处理游戏确认错误;
            return;
        }
        ret = 选择英雄();
        if (!ret) {
            处理选择英雄错误;
            return;
        }
        ret = 载入游戏画面();
        if (!ret) {
            处理载入游戏错误;
            return;
        }缺陷:正常流程和错误处理流程代码混在一起, 代码整体显的比较混乱。
2. EAFP: It's Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易". 也就是先操作, 遇到问题再处理. 即:事后认错型
        try {
            登陆游戏();
            开始匹配();
            游戏确认();
            选择英雄();
            载入游戏画面();
...
        } catch (登陆游戏异常) {
            处理登陆游戏异常;
        } catch (开始匹配异常) {
            处理开始匹配异常;
        } catch (游戏确认异常) {
            处理游戏确认异常;
        } catch (选择英雄异常) {
            处理选择英雄异常;
        } catch (载入游戏画面异常) {
            处理载入游戏画面异常;
        }优势:正常流程和错误流程是分离开的, 程序员更关注正常流程,代码更清晰,容易理解代码
2.2、异常的抛出
throw new XXXException("异常产生的原因");【注意事项】
2.3、异常的捕获
异常的捕获,也就是异常的具体处理方式。
主要有两种:异常声明throws 以及 try-catch捕获处理。
2.3.1、异常声明throws
语法格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类型1,异常类型2...{
}【注意事项】
2.3.2、try-catch捕获并处理
语法格式:
    public static void main(String[] args) {
        try {
            // 将可能出现异常的代码放在这里
        } catch (要捕获的异常类型 e) {
            // 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的基类时,就会被捕获到
            // 对异常就可以正常处理,处理完成后,跳出try-catch结构,继续执行后序代码
        } finally {
            // 此处代码一定会被执行到
        }
        // 后序代码
        // 当异常被捕获到时,异常就被处理了,这里的后序代码一定会执行
        // 如果捕获了,由于捕获时类型不对,那就没有捕获到,这里的代码就不会被执行
    }finally是什么?
【异常处理的流程总结】
3、自定义异常类
例如, 我们实现一个用户登陆功能。
//用于判断用户名的异常类
public class UserNameException extends RuntimeException{
    public UserNameException() {
        super();
    }
    public UserNameException(String s) {
        super(s);
    }
}
//用于判断密码的异常类
public class UserPasswordException extends RuntimeException {
    public UserPasswordException() {
        super();
    }
    public UserPasswordException(String s) {
        super(s);
    }
}class Login {
    public String userName = "admin";
    public String passWord = "123456";
    public void login(String userName, String passWord) {
        if(!this.userName.equals(userName)) {
            //System.out.println("用户名错误!");
            //使用自定义异常类来提示用户名错误
            throw new UserNameException("用户名错误!");
        }
        if(!this.passWord.equals(passWord)) {
            //System.out.println("密码错误!");
            //使用自定义异常类来提示密码错误
            throw new UserPasswordException("密码错误!");
        }
    }
}
public class Main {
    public static void main(String[] args) {
        try {
            Login l = new Login();
            l.login("admin", "123");
        } catch (UserNameException | UserPasswordException e) {
            e.printStackTrace();
        }
    }
}【运行结果】

【注意事项】
 
 
博主推荐:
 【计算机组成原理】知识点巩固 - 存储器概述-CSDN博客 https://blog.csdn.net/zzzzzhxxx/article/details/134482974?spm=1001.2014.3001.5502
https://blog.csdn.net/zzzzzhxxx/article/details/134482974?spm=1001.2014.3001.5502
【JavaSE】基础笔记 - 图书管理系统(保姆教程,含源码)-CSDN博客 https://blog.csdn.net/zzzzzhxxx/article/details/134467911?spm=1001.2014.3001.5502
https://blog.csdn.net/zzzzzhxxx/article/details/134467911?spm=1001.2014.3001.5502
【JavaSE】基础笔记 - 类和对象(下)-CSDN博客 https://blog.csdn.net/zzzzzhxxx/article/details/134248822?spm=1001.2014.3001.5502
https://blog.csdn.net/zzzzzhxxx/article/details/134248822?spm=1001.2014.3001.5502 
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!
如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!










