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

Java 异常

文章目录

    • 1. 异常概述
    • 2. JVM 的默认处理方案
    • 3. 异常处理之 try...catch
    • 4. Throwable 的成员方法
    • 5. 编译异常和运行异常的区别
    • 6. 异常处理之 throws
    • 7. 自定义异常
    • 8. throws 和 throw 的区别

1. 异常概述

异常就是程序出现了不正常的情况。

在这里插入图片描述

① Error:严重问题,不需要处理;
② Exception:称为异常类,它表示程序本身就可以处理的问题;
③ RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码;
④ 非 RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了。

2. JVM 的默认处理方案

如果程序出现了问题,我们没有做任何处理,最终 JVM 会做默认的处理。
(1)把异常名称、异常原因以及异常出现的位置等信息输出在了控制台;
(2)程序从此处就停止执行。

3. 异常处理之 try…catch

如果程序出现了问题,我们需要自己来处理,有两种方案:
① try…catch…
② throws

//格式
try {//可能出现异常的代码
} catch (异常类名 变量名) {//异常的处理代码
}

执行流程:
(1)程序从 try 里面的代码开始执行;
(2)出现异常,会自动生成一个异常类对象,该异常对象将被提交给 Java 运行时系统;
(3)当 Java 运行时系统接收到异常对象时,会到 catch 中去找匹配的异常类,找到后进行异常的处理;
(4)执行完毕后,程序还可以继续往下执行。

try {int[] arr = {1, 2, 3};System.out.println(arr[3]);
} catch (ArrayIndexOutOfBoundsException e) {System.out.println("你访问的数组索引不存在!");
}

4. Throwable 的成员方法

Throwable 是所有异常的祖宗类。

Throwable 的成员方法如下:

在这里插入图片描述

try {int[] arr = {1, 2, 3};System.out.println(arr[3]);} catch (ArrayIndexOutOfBoundsException e) {System.out.println(e.toString());}

在这里插入图片描述
e.printStackTrace() 方法的输出信息是最全的,所以也是我们经常使用的!

5. 编译异常和运行异常的区别

Java 中的异常被分为两大类:编译时异常和运行时异常,也被称为受检异常和非受检异常,所有的 RuntimeException 类及其子类被称为运行时异常,其他的异常都是编译时异常。

编译时异常:必须显示处理,否则程序就会发生错误,无法通过编译;
运行时异常:无需显示处理,也可以和编译时异常一样处理。

6. 异常处理之 throws

虽然我们通过 try…catch…可以对异常进行处理,但是并不是所有的情况我们都有权限进行异常的处理。也就是说,有些时候可能出现的异常是我们处理不了的,这个时候该怎么办呢?
针对这种情况,Java 提供了 throws 的处理方案。

throws 异常类名;

注意这个格式是跟在方法的括号后面的!

public static void show() throws ArrayIndexOutOfBoundsException {int[] arr = {1, 2, 3};System.out.println(arr[3]);
}

① 编译时异常必须要进行处理,使用 try…catch… 或 throws,如果采用 throws 这种方案,它仅仅是抛出异常,并没有做实际的操作,将来谁调用谁就得单独去处理;
② 运行时异常可以不处理,出现问题后,需要我们回来修改代码。

7. 自定义异常

//格式
public class ScoreException extends Exception {public ScoreException() {}public ScoreException(String message) {super(message);}
}
//ScoreException.javapackage com.an;public class ScoreException extends Exception {public ScoreException() {}public ScoreException(String message) {super(message);}
}
//Teacher.javapackage com.an;public class Teacher {public void checkScore(int score) throws ScoreException {if (score < 0 || score > 100) {throw new ScoreException("你给的分数有误,分数应该在0~100之间!");} else {System.out.println("分数正常!");}}
}
//Test.java//Test.javapackage com.an;import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入分数:");int score = sc.nextInt();Teacher t = new Teacher();try {t.checkScore(score);} catch (ScoreException e) {e.printStackTrace();}}
}

在这里插入图片描述
在这里插入图片描述

8. throws 和 throw 的区别

throws:
① 用在方法声明后面,跟的是异常类名;
② 表示抛出异常,由该方法的调用者来处理;
③ 表示出现异常的一种可能性,并不一定会发生这些异常。

throw:
① 用在方法体内,跟的是异常对象名;
② 表示抛出异常,由方法体内的语句处理。

http://www.lryc.cn/news/25553.html

相关文章:

  • JavaSE学习笔记day17
  • 【项目】Vue3+TS 动态路由 面包屑 查询重置 列表
  • 前脚背完这些接口自动化测试面试题,后脚就进了字节测试岗
  • termux 安装centos
  • 从菜鸟程序员到高级架构师,竟然是因为这个字final
  • 【vulhub漏洞复现】CVE-2018-2894 Weblogic任意文件上传漏洞
  • 函数栈帧详解
  • Spring 事务(编程式事务、声明式事务@Transactional、事务隔离级别、事务传播机制)
  • 车载技术——Window Display之surface的绘制过程与原理
  • 2023年全国最新工会考试精选真题及答案10
  • pytorch-复现经典深度学习模型-LeNet5
  • 【C++】类和对象(上)
  • 工作中责任链模式用法及其使用场景?
  • 三八女神节有哪些数码好物?2023年三八女神节数码好物清单
  • FairGuard-Windows加固工具版本更新日志
  • 基于RT-Thread完整版搭建的极简Bootloader
  • 3.flinkDateStreamAPI介绍env与source
  • $ 2 :数据类型
  • 类和对象 - 上
  • 补档:红黑树代码实现+简略讲解
  • FirePower X2 14.0.1 for RAD Studio Alexandria
  • 二十九、MongoDB 恢复数据( mongorestore )
  • 【数据分析】缺失数据如何处理?pandas
  • 嵌入式开发--STM32H750VBT6开发中,新版本CubeMX的时钟问题,不能设置到最高速度480MHZ
  • 一文读懂PaddleSpeech中英混合语音识别技术
  • 问题三十四:傅立叶变换——高通滤波
  • flink 键控状态(keyed state)
  • 【ChatGPT】sqlachmey 多表连表查询语句
  • win11 系统登录问题,PIN 设置问题
  • 数据结构六大排序