JAVA认识异常

devtools/2025/2/22 23:37:38/

目录

1. 异常的概念与体系结构

1.1 异常的概念

1. 算术异常

2. 数组越界异常

3. 空指针异常

1.2 异常的分类

1. 编译时异常

2. 运行时异常

2.1 异常的处理

 防御式编程

2.2 异常的捕获

2.3.1 异常声明throws

2.3.2 try-catch捕获并处理

2.3.3 finally

总结


1. 异常的概念与体系结构

1.1 异常的概念

Java中,将程序执行过程中发生的不正常行为称为异常

1. 算术异常

System.out.println(10 / 0);
// 执行结果
Exception in thread "main" java.lang.ArithmeticException: / by zero

2. 数组越界异常

int[] arr = {1, 2, 3};
System.out.println(arr[100]);
// 执行结果
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 100

3. 空指针异常

int[] arr = null;
System.out.println(arr.length);
// 执行结果
Exception in thread "main" java.lang.NullPointerException

1.2 异常的分类

1. 编译时异常

public class Person {
private String name;
private String gender;
int age;
// 想要让该类支持深拷贝,覆写Object类的clone方法即可
@Override
public Person clone() {
return (Person)super.clone();
}
}
编译时报错:
Error:(17, 35) java: 未报告的异常错误java.lang.CloneNotSupportedException; 必须对其进行捕获或声明以便抛出

2. 运行时异常

RunTimeException 以及其子类对应的异常,都称为运行时异常 。比如: NullPointerException
ArrayIndexOutOfBoundsException ArithmeticException

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 异常的捕获

2.3.1 异常声明throws

处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助 throws 将异常抛
给方法的调用者来处理。即 当前方法不处理异常,提醒方法的调用者处理异常
语法格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类型1,异常类型2...{
}

2.3.2 try-catch捕获并处理

语法格式:
try{
// 将可能出现异常的代码放在这里
}catch(要捕获的异常类型 e){
// 如果try中的代码抛出异常了,此处catch捕获时异常类型与try中抛出的异常类型一致时,或者是try中抛出异常的基类
时,就会被捕获到
// 对异常就可以正常处理,处理完成后,跳出try-catch结构,继续执行后序代码
}[catch(异常类型 e){
// 对异常进行处理
}finally{
// 此处代码一定会被执行到
}]
// 后序代码
// 当异常被捕获到时,异常就被处理了,这里的后序代码一定会执行
// 如果捕获了,由于捕获时类型不对,那就没有捕获到,这里的代码就不会被执行
注意:
1. []中表示可选项,可以添加,也可以不用添加
2. try中的代码可能会抛出异常,也可能不会

2.3.3 finally

语法格式:
try{
// 可能会发生异常的代码
}catch(异常类型 e){
// 对捕获到的异常进行处理
}finally{
// 此处的语句无论是否发生异常,都会被执行到
}
// 如果没有抛出异常,或者异常被捕获处理了,这里的代码也会执行
注意: finally 中的代码一定会执行的,一般在 finally 中进行一些资源清理的扫尾工作

总结

以上是一些常见的异常信息,针对不同的异常要根据其特点选择怎么样去修改,会事半功


希望这篇博客能帮助正在学习的读者,提供一点思路和方法


http://www.ppmy.cn/devtools/120020.html

相关文章

【3D分割】Segment Anything in 3D with Radiance Fields

论文链接:Segment Anything in 3D with Radiance Fields 代码链接:GitHub - Jumpat/SegmentAnythingin3D: Segment Anything in 3D with NeRFs (NeurIPS 2023) 作者:Jiazhong Cen, Jiemin Fang, Zanwei Zhou, Chen Yang, Lingxi Xie, Xiaop…

计算机毕业设计Python+Spark知识图谱微博舆情预测 微博推荐系统 微博可视化 微博数据分析 微博大数据 微博爬虫 Hadoop 大数据毕业设计

《PythonSpark知识图谱微博舆情预测》开题报告 一、课题背景与意义 随着互联网技术的飞速发展,社交媒体平台如微博已成为人们表达观点、交流信息的重要渠道。微博每天产生海量的数据,这些数据中蕴含着丰富的社会情绪、事件动态等信息,对于政…

QT-GUI(1)- QPushButton-QLabel-QTreeWidget-QTableWidget

1.用VS2019编辑一个gui程序,QIcon 图标展示 示例: 方法1:硬代码写 1.创建新项目 2. 不在.qrc文件中添加.png文件 3.代码中写全路径: QTreeWidgetItem* lineItem new QTreeWidgetItem(stationItem);lineItem->setText(0, l…

Redis 性能优化的高频面试题及答案

目录 高频面试题及答案1. 如何选择合适的数据结构以优化 Redis 性能?2. 如何配置 Redis 以优化内存使用?3. 如何使用管道(Pipeline)技术优化 Redis 性能?4. 如何通过数据持久化优化 Redis 性能?5. 如何使用 Redis 的集群模式优化性能?6. 如何通过合理的键命名策略优化 R…

数据库课程设计案例:在线教育管理系统

一、项目背景 随着在线教育的兴起,传统的教学管理模式面临着新的挑战。在线教育管理系统旨在为学生、教师和管理员提供一个高效、便捷的学习与管理平台,以提升学习效果和管理效率。 二、系统功能需求 用户管理 用户注册与登录角色管理(学生…

Spring Boot 进阶-第一个程序HelloWorld

从我们学习编程语言开始,每次入门一个语言都是从Hello World开始,当然这里我们也不例外。首先从一个简单的HelloWorld程序开始。 既然是要学着做Java Web开发,那么首先需要了解的就是如何去编写一个RESTFul风格的接口,这里我们就需要引入一个pom的依赖。 <dependency&g…

mysql笔记10(高级部分--跟数据库管理有关)

文章目录 一、视图(view)1. 作用2. CRUD--跟表操作几乎相同① 创建② 显示视图③ 查看视图相关详细信息④ 删除视图⑤ 更新视图 3. 视图算法① 创建视图时指定视图算法② 后期navicat里修改视图算法③ 注 二、事务(transaction)1. 事务的提出2. 举例理解① commit -- 一起执行②…

浅谈C++之线程管理

一、基本介绍 C11 提供了强大的多线程支持&#xff0c;涵盖了线程的创建、同步、共享数据管理等&#xff0c;极大简化了多线程编程的复杂性。 线程&#xff1a;一个程序执行流的最小单位。每个线程都有自己的程序计数器、栈、寄存器等。多线程&#xff1a;程序可以同时执行多个…