【Java SE 】特殊报错机制 ---> 异常 !

 🔥博客主页🔥:【 坊钰_CSDN博客 】

欢迎各位点赞👍评论✍收藏⭐

目录

1.  异常概念

1.1 算术异常

1.2. 空指针异常

 1.3 数组越界异常

2. 异常的分类

2.1 编译时产生的异常

2.2 运行时产生的异常

3. 如何处理异常

3.1 异常的抛出

3.2 异常的声明

 3.3 异常的捕获

4. 自定义异常

5. 小结


1.  异常概念

Java 中,简单来说,异常就是程序运行中发生的不正常行为,那么常见的异常有三种

1.1 算术异常

public class Test1 {public static void main(String[] args) {int tem = 10 / 0;System.out.println(tem);//报出下列异常//Exception in thread "main" java.lang.ArithmeticException: / by zero}
}
  • 原因是:0 不能被作为除数 

1.2. 空指针异常

public class Test1 {public static void main(String[] args) {String str = null;System.out.println(str.length());//报出下列异常//Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.length()" because "str" is null}
}
  • 原因是:空指针是不能用来引用的

 1.3 数组越界异常

public class Test1 {public static void main(String[] args) {int[] arr = new int[5];System.out.println(arr[10]);//报出下列异常//Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 10 out of bounds for length 5}
}
  • 原因是:数组访问越界

2. 异常的分类

 在程序运行的过程中,根据发生的时机不同,异常可以分为两大类

2.1 编译时产生的异常

在程序编译时产生的异常,叫编译异常,也叫受查异常

class Student{public String name;public int age;@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();}
}
public class Test1 {public static void main(String[] args){Student student = new Student();Student student1 = (Student) student.clone();//报出下列异常//java: 未报告的异常错误java.lang.CloneNotSupportedException; 必须对其进行捕获或声明以便抛出}
}

2.2 运行时产生的异常

运行异常(RunTimeException),顾名思义,是在运行时产生的异常,也叫非受查异常

上述常见的三种例子,都是运行时的异常:算术异常、数组越界异常、空指针异常

3. 如何处理异常

在 Java 中,我们处理异常时,常用的 5 个关键字 throw、try、catch、finally、throws

3.1 异常的抛出

在我们编写程序时,如果遇到错误时,可以将错误的信息抛出

我们用 throw 关键字来抛出一个指定的异常

throw new XXXXXException("原因");

例如:空指针异常抛出

public class Test1 {public static void fun(int[] arr) {if(arr == null) {throw new NullPointerException("为空指针,不能用来引用");}}public static void main(String[] args) {fun(null);}//报出我们抛出的异常//Exception in thread "main" java.lang.NullPointerException: 为空指针,不能用来引用
}
  • throw 必须在方法的内部
  • 抛出的对象必须是 Exception 或 Exception 的子类
  • 如果抛出的为运行时异常,则我们不用处理
  • 如果抛出的为编译时异常,则我们必须处理
  • 抛出异常后,后面的代码不在运行

3.2 异常的声明

当方法中抛出编译异常时,我们不想处理该异常时,就可以借助 throws 关键字来声明该异常

当我们抛出编译时异常时,会报错

public class Test1 {public static void fun(int[] arr){if(arr == null) {//该异常为编译时异常throw new CloneNotSupportedException("为空指针,不能用来引用");}}
}

所以,用 throws 声明异常即可

public class Test1 {public static void fun(int[] arr) throws CloneNotSupportedException {if(arr == null) {//该异常为编译时异常throw new CloneNotSupportedException("为空指针,不能用来引用");}}
}

 3.3 异常的捕获

throws 声明异常只是声明,并没有真正的处理异常,最后还是由使用者处理,而真正处理异常,我们要用到 try-catch 去进行捕获

try {//可能出现异常的代码
} catch(捕获的异常类型 e) {//对异常进行处理
} catch(捕获的异常类型 e) {//对异常进行处理
} finally {//该代码为一定执行的代码//不管什么情况下,一定一定会执行
}
public class Test1 {public static void main(String[] args) {int[] arr = {1,2,3,4,5};try{System.out.println(arr[10]);} catch (ArrayIndexOutOfBoundsException e) {throw new ArrayIndexOutOfBoundsException("数组越界");} finally {System.out.println("finally 代码一定会执行!!!");}}
}

4. 自定义异常

 当然,有些时候,Java 中的自带的异常并不能满足我们的需求,我们需要自定义一个异常来供自己使用

自定义异常的方式:

  • 自定义一个类,然后继承与 Exception 或 RunTimeException 
  • 实现一个带 String 参数的构造方法,用来说明异常的原因

 我们以用户输入 “账号” 和 ”密码“ 来举例,来自定义两个异常

  • EnterAccountException         账号错误异常
  • EnterPasswordException      密码错误异常
//密码错误异常
public class EnterPasswordException extends Exception{//无参构造方法EnterPasswordException() {}//String 参数构造方法EnterPasswordException(String mig) {super(mig);}
}
//账号错误异常
public class EnterAccountException extends Exception{//无参构造方法EnterAccountException() {}//String 参数构造方法EnterAccountException(String mig) {super(mig);}
}

登录代码

public class Login{private String account = "123456";private String passord = "888888";public void loginInfo(String userAccount,String userPassword) throws EnterAccountException,EnterPasswordException{if(!userAccount.equals(account)) {throw new EnterAccountException("账号输入错误!");}if(!userPassword.equals(passord)) {throw new EnterPasswordException("密码输入错误!");}System.out.println("输入正确,登录成功!");}
}

5. 小结

以上就是对异常机制的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持 !

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

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

相关文章

使用kettle同步数据流程

使用kettle同步数据流程 一.Kettle软件安装(解压即可使用) 1.windows安装解压 pdi-ce-8.2.0.0-342.zip,点Spoon.bat启动kettle 2.Linux安装 把data-integration目录所有文件上传到服务器 二.安装数据库驱动把需要的…

两级运放的电路版图设计

电路版图文件PDK,88出,点击此处获取,24h秒发 PDF文件免费,已绑定 《集成电路版图设计课程》 课程设计(大作业)报告 2023 - 2024 学年第 1 学期 题 目 CMOS运算放大器的电路设计 专 业 …

Windows不支持配置NFS?还有什么注意事项?

我们前面介绍了如果配置Windows Server的NFS共享(Windows Server2012 R2搭建NFS服务器),也介绍了Linux如何配置NFS共享(CentOS 7搭建NFS服务器)。但是,我最近发现一个问题,那就是桌面版的Window…

解锁测试能力密码:直击三问,成就卓越测试

在测试人眼中真的是“万物皆可测”,不管是物体(铅笔,桌子)、终端(手机,电脑)、软件代码、硬件设备等等。那是因为在底层逻辑中,我们搞清楚了其核心本质,总结起来有三个方…

AutoCAD2021

链接: https://pan.baidu.com/s/1GG93ZFRfV_30xTWtDiv3Ew 提取码: dx8i 简介:一键安装,已经破解。支持W7-w10-w11系统64位

伍光和《自然地理学》电子书(含考研真题、课后习题、章节题库、模拟试题)

《自然地理学》(第4版)由伍光和、王乃昂、胡双熙、田连恕、张建明合著,于2018年11月出版。作为普通高等教育“十一五”国家级规划教材,本书不仅适用于高校地球科学各专业的基础课程,还可供环境、生态等有关科研、教学人…

奥数与C++小学四年级(第十七题 弹跳板)

参考程序代码&#xff1a; #include <iostream> bool visited[101] {false}; // 标记1-100是否被访问过int main() {int step 1; // 初始步数int i 2; // 步长visited[1] true; // 标记位置1已访问while (true) {step i; // 跳到下一个位置if (step >…

206面试题(28~46)

206道Java面试题&#xff08;28~46&#xff09; 28.Array和ArrayList有什么区别&#xff1f; 一、基本性质 Array(数组) Array是一种固定大小的数据结构。 用于存储多个相同类型的元素。 创建时需要指定数组的大小&#xff0c;且长度定义完后不能改变。 ArrayList(动态数组)…

“大跳水”的全新奥迪A3,精准狙击年轻人的心

文/王俣祺 导语&#xff1a;随着传统豪华品牌在国内市场的全面崩盘&#xff0c;奥迪再一次坐不住了。这次&#xff0c;奥迪“割肉”的目标瞄准了被称为“年轻人第一台豪车”的奥迪A3&#xff0c;这款车问世以来&#xff0c;就凭借出色的性能与品质收获了一大批年轻粉丝。如今&a…

网站建设公司怎么选?网站制作公司怎么选才不会出错?

寻找适合靠谱的网站设计公司&#xff0c;不要盲目选广告推最多的几家&#xff0c;毕竟要实现自身品牌营销&#xff0c;还是需要多方面考量。以下几个方面可以作为选择的参考&#xff1a; 1. 专业能力如何&#xff1f; 一个公司的专业能力&#xff0c;决定了最后网站设计的成果…

【IEEE出版 | EI稳定检索】2024智能机器人与自动控制国际学术会议 (IRAC 2024,11月29-12月1日)

2024智能机器人与自动控制国际学术会议 &#xff08;IRAC 2024&#xff09; 2024 International Conference on Intelligent Robotics and Automatic Control 官方信息 会议官网&#xff1a;www.icirac.org 2024 International Conference on Intelligent Robotics and Autom…

【力扣热题100】[Java版] 刷题笔记-104. 二叉树的最大深度

题目&#xff1a;104. 二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 解题思路 有关二叉树的题&#xff0c;最先想到的就是利用递归方法遍历。 解题过程 分别计算左右子树的最大…

【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案

&#x1f984;个人主页: 起名字真南 &#x1f984;个人专栏:【数据结构初阶】 【C语言】 【C】 【OJ题解】 目录 1. 引言2. 题目分析示例&#xff1a; 3. 解题思路4. C代码实现5. 代码详解6. 时间和空间复杂度分析7. 边界情况分析8. 总结 1. 引言 在开发中&#xff0c;有时我们…

Rust闭包(能够捕获周围作用域变量的匿名函数,广泛应用于迭代、过滤和映射)闭包变量三种捕获方式:通过引用(不可变引用)、通过可变引用和通过值(取得所有权)

文章目录 Rust 闭包详解闭包的定义与语法基本语法 闭包的特性- 环境捕获&#xff08;三种捕获方式&#xff1a;通过引用、通过可变引用和通过值&#xff08;取得所有权&#xff09;&#xff09;示例代码 - 内存安全与生命周期示例代码1 示例代码2&#xff1a;闭包所有权转移示例…

【xxl-job总结】

文章目录 xxl-job介绍系统组成为什么不使用quartz过期处理策略避免任务重复执行源码分析 xxl-job介绍 XXL-JOB是一个轻量级分布式任务调度平台&#xff0c;它的核心设计目标是开发迅速、学习简单、轻量级、易扩展。 1.简单易用&#xff1a;XXL-JOB提供了友好的Web界面&#xf…

19. 架构重要需求

文章目录 第19章 架构重要需求19.1 从需求文档中收集架构重要需求&#xff08;ASRs&#xff09;不要抱太大希望从需求文档中找出架构重要需求 19.2 通过访谈利益相关者收集架构重要需求19.3 通过理解业务目标收集架构重要需求19.4 在效用树中捕获架构重要需求19.5 变化总会发生…

简易CPU设计入门:译码模块(一)

项目代码下载 还是请大家首先准备好本项目所用的源代码。如果已经下载了&#xff0c;那就不用重复下载了。如果还没有下载&#xff0c;那么&#xff0c;请大家点击下方链接&#xff0c;来了解下载本项目的CPU源代码的方法。 下载本项目代码 准备好了项目源代码以后&#xff…

Hunyuan-Large:腾讯发布业界参数规模最大的开源 MoE 模型,支持超长文本输入,超越主流开源模型

❤️ 如果你也关注大模型与 AI 的发展现状&#xff0c;且对大模型应用开发非常感兴趣&#xff0c;我会快速跟你分享最新的感兴趣的 AI 应用和热点信息&#xff0c;也会不定期分享自己的想法和开源实例&#xff0c;欢迎关注我哦&#xff01; &#x1f966; 微信公众号&#xff…

Linux基础

1. openssl passwd -1 密码 128位 openssl passwd -5 密码&#xff08;更安全&#xff09;256位 openssl是开源的加密工具包&#xff0c;有各种加密&#xff0c;解密等功能 2. 文件管理 创建空文件 touch newfile 删除文件 rm new file 新建日录 mkdir newdir 删除…

HuggingFace情感分析任务微调

官方教程地址&#xff1a;https://huggingface.co/learn/nlp-course/zh-CN/chapter3/1?fwpt 部分内容参考&#xff1a; 李福林, & 计算机技术. (2023). HuggingFace 自然语言处理详解: 基于 BERT 中文模型的任务实战. 清华大学出版社. HuggingFace将AI项目研发分为四个步骤…