【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、自定义异常通常会继承Exception或者RuntimeExcepion
2、继承自Exception的异常默认是受查异常
3、继承自RuntimeException的异常默认是非受查异常。

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

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悲伤猪小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值