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

JAVA_FIFTEEN_异常

目录

一、认识异常

什么是异常?

异常的体系

如何应对异常

二、自定义异常

RuntimeException 运行时异常

Exception 编译时异常

三、异常的处理

捕获异常,记录异常并响应合适的信息返回给用户

捕获异常,尝试修复


一、认识异常

什么是异常?

异常就是代表程序出现的问题

异常的体系

上图展示了Java异常的基本体系结构:

  1. 所有异常都源自Throwable类
  2. Throwable分为Error和Exception两大类
  3. Exception又分为RuntimeException(运行时异常)(如数组索引越界异常)和CheckedException(检查型异常又称为编译时异常)(日期解析时异常)
  4. 图中还列举了一些常见的具体异常类型

如何应对异常

在Java中,有几种主要的方法来应对异常:

  1. try-catch 块:用于捕获和处理可能发生的异常。
  2. throws 关键字:用于声明方法可能抛出的异常,将异常处理的责任传递给调用者。
  3. throw 关键字:用于手动抛出异常。
  4. inally 块:用于指定无论是否发生异常都要执行的代码。
  5. try-with-resources 语句:用于自动关闭实现了 AutoCloseable 接口的资源。

二、自定义异常

RuntimeException 运行时异常

定义:继承自RuntimeException的异常(如NullPointerExceptionArrayIndexOutOfBoundsException),属于非受检异常

发生时机:代码运行时才会出现(编译阶段不检查)。

常见场景:通常是代码逻辑错误导致的,

比如:

  • 访问null对象的方法(NullPointerException
  • 数组下标越界(ArrayIndexOutOfBoundsException
  • 类型转换错误(ClassCastException
  • 除以 0(ArithmeticException

Exception 编译时异常

定义:除了RuntimeException及其子类之外的Exception(如IOExceptionSQLException),属于受检异常

发生时机:编译阶段就会被检查,编译器强制要求处理,否则代码无法通过编译

使用场景:通常是外部环境导致的可预见异常

比如

  • 文件读写错误(IOException
  • 数据库连接失败(SQLException
  • 日期格式解析错误(ParseException

举例:

运行时异常和编辑时异常代码

public class Exception_Test1 {public static void main(String[] args) {//需求:保存一个合法的年龄try {savaAge(111);System.out.println("savaAge执行成功");} catch (Exception e) {e.printStackTrace(); //将错误信息打印到控制台System.out.println("savaAge出现错误");}try {savaAge2(133);System.out.println("savaAge2执行成功");} catch (AgeIllegalException e) {e.printStackTrace();System.out.println("savaAge2出现错误");}}//自定义运行时异常public static void savaAge(int age) {if (age > 0 && age < 150) {System.out.println("年龄保存成功" + age);} else {//throw 抛出去这个异常throw new AgeIllegalRuntimeException("/age is illegal your age is " + age);}}//自定义编辑时异常public static void savaAge2(int age) throws AgeIllegalException {if (age > 0 && age < 150) {System.out.println("年龄保存成功" + age);} else {//throw 抛出去这个异常throw new AgeIllegalException("/age is illegal your age is " + age);}}
}

作用:

1、异常用来检查系统是否出现Bug的关键信息

2、异常作为方法内部的一种特殊返回值,以便通知上层调用者底层的执行情况

三、异常的处理

捕获异常,记录异常并响应合适的信息返回给用户

  • 捕获异常,记录异常并响应合适的信息返回给用户

    public class Exception_Test2 {public static void main(String[] args) {try {test1();} catch (ParseException e) {System.out.println("你要解析的时间失败了!");e.printStackTrace();} catch (FileNotFoundException e) {System.out.println("你要解析的文件不存在!");e.printStackTrace();}}public static void test1() throws ParseException, FileNotFoundException {SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");Date localDate=sdf.parse("2112-12-13 11-10-32");System.out.println(localDate);test2();}public static void test2() throws FileNotFoundException {InputStream is=new FileInputStream("D:/abc.png");}
    }
    

捕获异常,尝试修复

  • 捕获异常,尝试修复

    public class ExceptionTest3 {public static void main(String[] args) {while (true) {try {System.out.println("价格合适:"+getMoney());break;} catch (Exception e) {System.out.println("请输入合法的数字!");}}}public static double getMoney(){Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入合适的价格:");double money=sc.nextDouble();if(money>0 && money<100){return money;}else {System.out.println("输入的价格不合适!");}}}
    }
    

http://www.dtcms.com/a/297740.html

相关文章:

  • LeetCode 233:数字 1 的个数
  • Zero-Shot TrackingT0:对象分割+运动感知记——当“切万物”武士学会运动记忆,目标跟踪稳如老狗
  • 力扣面试150题--寻找旋转排序数组中的最小值
  • 互联网金融项目实战(大数据Hadoop hive)
  • 代码随想录算法训练营第五十三天|图论part4
  • Hive【Hive架构及工作原理】
  • Hive-vscode-snippets
  • 微信小程序文件下载与预览功能实现详解
  • nacos安装
  • SpringBoot配置多数据源多数据库
  • Androidstudio 上传当前module 或本地jar包到maven服务器。
  • 线性代数 上
  • Java 大视界 -- 基于 Java 的大数据分布式存储在工业互联网数据管理与边缘计算协同中的创新实践(364)
  • 从入门到进阶:JavaScript 学习之路与实战技巧
  • Nginx 安装与 HTTPS 配置指南:使用 OpenSSL 搭建安全 Web 服务器
  • Django集成Swagger全指南:两种实现方案详解
  • 探索 MyBatis-Plus
  • 智慧灯杆:不止于照明,塔能科技的城市感知网络野心
  • 解码3D格式转换
  • 多智能体(Multi-agent)策略模式:思维链CoT和ReAct
  • 万字解析Redission ---深入理解Redission上锁过程
  • 百度蜘蛛池解析机制:原创
  • ElementPlus:ElMessageBox增加type
  • iOS 加固工具实战解析,主流平台审核机制与工具应对策略
  • ESB 在零售,物流,制造,保险,医疗行业的应用方式
  • 【Linux/Ubuntu】VIM指令大全
  • Adv. Energy Mater.:焦耳热2分钟制造自支撑磷化物全解水电极
  • 基坑渗压数据不准?选对渗压计能实现自动化精准监测吗?
  • 戴尔电脑 Linux 安装与配置指南_导入mysql共享文件夹
  • 如何制定和落实ITIL 4服务请求的标准化与自动化策略