当前位置: 首页 > news >正文

JAVA认识异常

目录

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.mrgr.cn/news/40577.html

相关文章:

  • 数值计算的程序设计问题举例
  • 51单片机的智能家居【proteus仿真+程序+报告+原理图+演示视频】
  • 排水系统C++
  • 第5篇:勒索病毒自救指南----应急响应篇
  • 构建现代化社区医疗服务:SpringBoot平台
  • 【JavaEE】http/https 超级详解
  • 使用Materialize制作unity的贴图,Materialize的简单教程,Materialize学习日志
  • Raspberry Pi3B+之Rpanion(gst)和ffmpeg验证
  • 从零开始,5个步骤轻松掌握越来越火的JAX深度学习框架
  • Element-UI Plus 暗黑主题切换
  • 虚幻引擎-设置UI自适应屏幕大小
  • php生成透明图片和文字
  • Windows 环境下 MySQL5.5 安装与配置详解
  • 图神经网络DGL库之消息传递
  • Linux数据备份
  • idea 同一个项目不同模块如何设置不同的jdk版本
  • MySQL安装与环境配置(Windows系统 MySQL8.0.39)
  • 教程:在Linux上启动、运行、杀掉和管理项目程序
  • 从构建个性化学习系统维度提高认知转化率
  • 【JavaWeb】JavaWeb笔记 Servlet