0
点赞
收藏
分享

微信扫一扫

MySQL与Redis如何保证数据的一致性

 目录

1、异常的概念和体系结构

1.1、异常的概念

1.2、 异常的体系结构

1.3 异常的分类 

2、异常的处理

2.1、防御式编程

2.2、异常的抛出

2.3、异常的捕获

2.3.1、异常声明throws

2.3.2、try-catch捕获并处理

3、自定义异常类


 

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博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/134482974?spm=1001.2014.3001.5502

【JavaSE】基础笔记 - 图书管理系统(保姆教程,含源码)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/134467911?spm=1001.2014.3001.5502

【JavaSE】基础笔记 - 类和对象(下)-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zzzzzhxxx/article/details/134248822?spm=1001.2014.3001.5502 

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

如果觉得作者写的不错,求给博主一个大大的点赞支持一下,你们的支持是我更新的最大动力!

 

举报

相关推荐

0 条评论