• 【JavaSE】异常处理


    什么是异常

    在生活中我们头疼脑热都是身体出现的异常,在代码中也是一样的,尽管程序员在写代码时已经非常追求完美,但是总会有一些不尽人意的错误出现,我们将这种程序在执行过程中出现的不正常行为称为异常
    例如:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    通过举例我们发现,在Java中不同类型的异常,都会被其对应的类来描述。

    异常的分类

    我们再来看一个例子:
    在这里插入图片描述
    如上图我们没有对异常进行处理,我们的代码就会报错了,有的兄弟就会有问题了,刚才的三个例子我们也没有对可能有的异常进行处理,为什么代码却没有报错呢?这是因为异常分为两类

    1、编译时异常,也称为受查异常,在编译时发生的异常
    2、运行时异常,也称非受查异常,在运行时发生的异常

    通过上面两个例子的对比我们就知道,受查异常出现时,必须进行异常处理,如果不处理,代码编译不过,而非受查异常则没有这么严格注意在编译时出现的语法错误不是异常,而是错误

    异常肯定时千奇百怪的,Java为了对不同异常或者错误进行很好的分类管理,在Java内部维护了一个异常的体系结构:

    在这里插入图片描述

    异常的处理流程

    要想处理异常我们就需要认识五个关键字throw try catch final throws

    throw异常的抛出

    我们看这样一个例子:
    在这里插入图片描述
    这就是throw的用法,还有一些注意事项:

    1、throw必须写在方法体内部
    2、抛出的对象必须时Exception或者他的子类
    3、如果抛出的是非受查异常,则可以直接交给jvm处理。
    4、如果抛出的受查异常,则必须处理,否则无法编译
    5、异常一旦抛出,后面的代码就不会执行了。

    throws 和 try-catch捕获异常

    在这里插入图片描述
    这里有些注意事项:

    1、throws必须跟在方法的参数列表之后
    2、声明的异常必须是Exception或者他的子类
    3、如果抛出多个异常,可以用,隔开。
    4、在抛出受查异常时,调用者必须对该异常进行处理,或者继续throws抛出。
    5、try块内抛出异常位置之后的代码不会执行
    6、如果抛出异常类型与catch不匹配,异常就不会被捕获,也不会处理,继续外抛知道被jvm处理。
    7、catch可以有多个,且子类异常在父类异常之前

    finally

    finally不管什么情况一定会被执行,一般我们在finally块里面写的都是无论是否发生异常都需要执行的代码,例如资源的回收,网络的连接,数据库的链接等。
    在这里插入图片描述

    自定义异常类

    尽管Java为我们提供了很多异常类,但是在我们的实际开发过程中肯定会有一些千奇百怪的问题出现,这时我们就需要自己自定义一个异常类,如何定义呢?下面让我来给大家写一个例子:

    package demo3;
    
    import java.util.Scanner;
    
    public class Test {
    
        public static void login() throws NameException,PassWordException{
            String name = "admin";
            String password = "1234";
    
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入用户名:");
            String name1 = scanner.nextLine();
            if(!name.equals(name1)) {
                throw new NameException("用户名错误");
            }
            System.out.println("请输入密码:");
            String password1 = scanner.nextLine();
            if(!password.equals(password1)) {
                throw new PassWordException("密码错误");
            }
        }
    
        public static void main(String[] args) {
            try {
                login();
            }catch (NameException ex) {
                ex.printStackTrace();
                System.out.println("用户名错误");
            }catch (PassWordException ex ) {
                ex.printStackTrace();
                System.out.println("密码错误");
            }
        }
    }
    
    public class NameException extends Exception{
        public NameException(String string) {
            super(string);
        }
    }
    
    
    public class PassWordException extends Exception{
        public PassWordException(String string) {
            super(string);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    上图我们就自己定义了两个异常类,一个是用户名异常,一个是密码异常,这样在我们登录时,输入错误的密码和用户名时会出现异常。
    在这里插入图片描述

    1、自定义异常通常会继承Exception或者RuntimeExcepion
    2、继承自Exception的异常默认是受查异常
    3、继承自RuntimeException的异常默认是非受查异常。

    以上就是Java中关于异常的一些知识。

  • 相关阅读:
    微服务保护-授权规则/规则持久化
    微软 New Bing AI 申请与使用保姆级教程(免魔法)
    0基础90分钟会用PS——GenJi笔记
    golang中的接口(数据类型)
    Ubuntu入门05——磁盘管理与备份压缩
    【前端】JavaScript数据类型
    数据库的基本操作(7)
    Redis-03持久化
    蓝牙核心规范(V5.4)11.6-LE Audio 笔记之初识音频位置和通道分配
    微信个人号如何实现自动回复呢?
  • 原文地址:https://blog.csdn.net/weixin_64182409/article/details/128018068