【JavaSE】异常处理

news2025/7/11 1:52:32

文章目录

  • 什么是异常
  • 异常的分类
  • 异常的处理流程
    • throw异常的抛出
    • throws 和 try-catch捕获异常
    • finally
  • 自定义异常类

什么是异常

在生活中我们头疼脑热都是身体出现的异常,在代码中也是一样的,尽管程序员在写代码时已经非常追求完美,但是总会有一些不尽人意的错误出现,我们将这种程序在执行过程中出现的不正常行为称为异常
例如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过举例我们发现,在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中关于异常的一些知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36909.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【真北读书】弗兰克意义三途径,让你人生的意义不漂移

维克多弗兰克,意义疗法创始人,出生于奥地利维也纳一个贫困的犹太人家庭。弗兰克15岁时质疑化学老师说的生命只是化学燃料,开始思考生命的意义,曾学习弗洛伊德、阿德勒、海德格尔和尼采,在被囚禁之前,已形成…

终于有人把大数据的相关知识讲全了(大数据基础框架、数据库、大数据分析分布式技术),从入门到进阶全部涵盖了!

前言 经常有初学者在博客和微信问我,自己想往大数据方向发展,该学哪些技术,学习路线是什么样的,觉得大数据很火,就业很好,薪资很高。如果自己很迷茫,为了这些原因想往大数据方向发展&#xff0…

用VB设计年级人员管理系统

目 录 摘 要 I Abstract II 第一章 绪论 1 1.1 课题研究背景 1 1.2 课题研究目的和任务 1 1.3 课题研究的意义 2 1.4 论文的主要内容和章节安排 2 第二章 运行环境开发工具 3 2.1 运行环境 3 2.2 开发工具简介 3 2.2.1 VB6.0基础 3 2.2.2 SQL Server2000数据库基础 3 第三章 需…

【HDU No. 2874】 城市之间的联系 Connections between cities

【HDU No. 2874】 城市之间的联系 Connections between cities 杭电OJ 题目地址 【题意】 由于大部分道路在战争期间已被完全摧毁,所以两个城市之间可能没有路径,也没有环。 已知道路状况,想知道任意两个城市之间是否存在路径。若答案是肯…

11.一键分析你的上网行为(web页面可视化)

## 一键分析你的上网行为, 看看你平时上网都在干嘛? ## Chrome浏览器历史记录文件可视化### 简介**想看看你最近一年都在干嘛?看看你平时上网是在摸鱼还是认真工作?想写年度汇报总结,但是苦于没有数据?现在,它来了。*…

国外顶尖程序员手写,402页汉译版微服务与事件驱动架构开发手册

为什么用事件驱动型微服务? Marshall McLuhan认为,影响人类并给社会带来根本性变革的不是媒介的内容,而是与媒介的互动过程。在我们的集体参与下,报纸、广播、电视、互联网、即时通信和社交媒体改变了人类的互动方式以及社会结构…

JDK17新特性

一.JEP 409: Sealed Classes 1.1简介 官网链接sealed class 从如下官网的简介与描述可以看出,这个新特性的目的是为了限制类与接口的 被继承与实现,比如说我有个 A类,那么我现在限定只有 B,C,D三个类可以继承 那么就需…

DRM架构介绍(一)

1、 DRM简介(Direct Rendering Manager)传统linux显示设备驱动开发时,通常使用FB驱动架构,随着显卡性能升级:显示覆盖(菜单层级)、GPU加速、硬件光标,传统FB架构无法很好支持&#x…

activiti-bpmn-converter

activiti-bpmn-converter目录概述需求:设计思路实现思路分析1.BpmnXMLConstants2.BpmnXMLConverter3.StartEventXMLConverter4.EndEventXMLConverter参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full bu…

C++调用OpenCV实现图像平滑处理

1 前言 图像的平滑处理,也叫做模糊处理,是在尽量保留原始图像信息的情况下,抑制或去除图像内的噪声、降低细节层次信息等一系列过程。是一种操作简单但使用频率很高的图像处理方法。由于实际的图像索引方式,与我们常用的x和y轴的…

2022年 SecXOps 安全智能分析技术白皮书 学习笔记 免费下载地址

核心能力 为了加快安全分析能力更全面、更深入的自动化 ,SecXOps 的目标在于创建一个集成的用于 Security 的 XOps 实践,提升安全分析的场景覆盖率和运营效率。SecXOps 技术并不 015 SecXOps 技术体系 是 Ops 技术在安全领域的简单加和,SecXO…

postman拦截浏览器请求

postman可以去浏览器请求进行拦截,并将请求存放至集合。 原理 postman内部有捕获http请求流量的代理; postman app 监听这客户端程序或者设备发出的调用请求;postman 代理端会捕获到请求并把它转发到服务器;服务器将响应返回给p…

双非大学改考408,软件工程专业考研报考人数较少!

南昌航空大学是一所双非大学,位于江西省南昌市。南昌航空大学计算机学科评估没有,软件工程学科评估C,计算机实力在双非大学中也并不算强。南昌航空大学今年计算机考研大变化,软件学院的所有专业(包括:软件工…

虚拟化性能优化系列-numatune

numatune是什么 numatune是libvirt的一个参数&#xff0c;可以用在numa架构的host上&#xff0c;以控制子机的内存访问策略。 使用方法如下&#xff0c;参考libvirt文档 <domain> ... <numatune> <memory mode"strict" nodeset"1-4,^3"/&…

多线程(1)

多线程 前言 &#xff1a; 上文主要了解到了进程&#xff0c; 那么为啥需要引入进程呢&#xff1f;   或者说为啥要有进程呢&#xff1f; 其实这里最主要的目的是为了解决 并发编程 这样的问题。 了解 &#xff1a;   这里 cpu 进入了多核心的时代&#xff0c;想要进一步提…

解决:给 VSCode 手动添加(解压压缩包)相关插件的问题

1、一般的添加方式为&#xff1a; 在 VSCode 里面扩展程序里面直接搜索添加即可&#xff1b; 2、如何手动添加一个 VSCode 相关插件&#xff1f; 其一、首先把相关文件解压&#xff0c;解压成一个文件夹&#xff1b; 其二、找到 VSCode 的 extensions 的地址并把 A 所述文件…

【Java 设计模式】创建者模式 之抽象工厂模式

抽象工厂模式1 概念2 角色3 甜品店案例3.1 类图3.2 实现4 优缺点1 概念 产品族&#xff1a;华为既有华为手机&#xff0c;也有华为电脑、华为平板&#xff0c;华为手机、华为电脑和华为平板属于一个产品族&#xff0c;因为他们都是华为品牌。产品等级&#xff1a;有华为手机&am…

骁龙咣咣咣三脚,再次改写格局

鱼羊 萧箫 发自 凹非寺量子位 | 公众号 QbitAI盆友们&#xff0c;骁龙&#xff0c;已经不再是以前那个骁龙了。就在大家吃瓜安卓新旗舰芯片谁家首发之际&#xff0c;骁龙峰会的绝对主角&#xff0c;却只差没把“时代变了”写在脸上&#xff1a;先是第一天直接挤爆AI牙膏管&…

创建Struts2项目并实现一个例子

文章目录一、创建Struts2项目二、struts2的一个例子一、创建Struts2项目 本人所用idea应用程序。以下全部内容&#xff0c;都是以idea为例 创建项目前&#xff0c;你需要下载Struts2所需要的jar包&#xff0c;你可以直接去官网下载&#xff0c;也可以点击https://pan.baidu.c…

LeetCode - 1419 数青蛙

题目来源 1419. 数青蛙 - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 "croak" &#xff09;的组合。由于同一时间可以有多只青蛙呱呱作响&#xff0c;所以 croakOfFrog…