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

java-异常

java异常体系

Java.lang.Throwable
Error
Exception
RuntimeException
...
其他异常...
  • Error代表系统级错误,开发人员不需要关注
  • Exception代表程序可能出现的问题
    1、运行时异常:RuntimeException,编译阶段不出现错误,运行时出现异常
public static void show() {int[] arr = {10,20,30};//System.out.println(arr[3]);//System.out.println(10/0);//空指针异常String str = null;System.out.println(str);//System.out.println(str.length());}

2、编译时异常

public static void show1(){String str = "2025-09-08 12-13-15";//把字符串转换成日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");Date date = sdf.parse( str);System.out.println(date);}

异常的基本处理

  • 抛出异常(throws)
    将方法内部的异常抛给调用者处理
public static void show1() throws ParseException {String str = "2025-09-08 12-13-15";//把字符串转换成日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");Date date = sdf.parse( str);System.out.println(date);}
  • 捕获异常(try…catch)
public static void main(String[] args){//show();try {//监视代码,出现异常会被catch拦截show1();} catch (ParseException e) {e.printStackTrace();//输出异常信息}}

异常的作用

1、定位程序bug
2、作为方法内部一种特殊返回值,通知上层调用者方法的执行问题

public class demo2 {public static void main(String[] args) {System.out.println("程序开始执行...");try{int a=10;int b=0;int c=div(a,b);System.out.println("结果为:"+c);}catch(Exception e){e.printStackTrace();System.out.println("出现异常:"+e.getMessage());}}//求两个数相除的结果public static int div(int a,int b) throws Exception{if(b==0){System.out.println("除数不能为0");//可返回一个异常给上层调用者throw new Exception("除数不能为0");}int result=a/b;return result;}
}

自定义异常

  • java无法为全部问题都提供异常类,若自己的问题想用异常表示,则需要自己定义异常类
    在这里插入图片描述
public class AgeIllegalRuntimeException extends RuntimeException{public AgeIllegalRuntimeException(){super();}public AgeIllegalRuntimeException(String message){super(message);}
}
public class demo4 {public static void main(String[] args) {//认识自定义异常--运行时异常saveage(300);}//只要收到年龄小于1岁或大于200岁,就抛出一个异常public static void saveage(int age){if(age<1||age>200){//年龄不合法throw new AgeIllegalRuntimeException("年龄不合法,年龄要介于1-200之间");}else{System.out.println("保存年龄成功");}}
}

在这里插入图片描述

public class AgeIllegalException extends  Exception{public AgeIllegalException(){super();}public AgeIllegalException(String message){super(message);}}
public class demo3 {public static void main(String[] args) {//认识自定义异常try {saveage(300);} catch (AgeIllegalException e) {e.printStackTrace();}}//只要收到年龄小于1岁或大于200岁,就抛出一个异常public static void saveage(int age) throws AgeIllegalException{if(age<1||age>200){//年龄不合法throw new AgeIllegalException("年龄不合法,年龄要介于1-200之间");}else{System.out.println("保存年龄成功");}}
}

异常的处理方案

1、底层异常层层往上抛,最外层捕获异常,记录异常信息,响应适当的信息进行提示

public class demo5 {public static void main(String[] args) {//异常的处理方案1:底层异常都抛出给最外层调用者,最外层捕获异常,处理异常,响应信息try {show1();} catch (Exception e) {e.printStackTrace();}}public static void show1() throws Exception {String str = "2025-09-08 12-13-15";//把字符串转换成日期SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");Date date = sdf.parse( str);System.out.println(date);InputStream is = new FileInputStream("d:/abc.txt");}
}

2、最外层捕获异常后尝试重新修复

public class demo6 {public static void main(String[] args) {//异常处理方案2:捕获异常对象,尝试重新修复//接收用户定价double price = 0;while (true) {price = 0;try {price = userInputPrice();break;} catch (Exception e) {//e.printStackTrace();System.out.println("价格输入有误,请重新输入!");}}System.out.println("价格是:" + price);}public static double userInputPrice() {Scanner scanner = new Scanner(System.in);System.out.println("请输入价格:");double price = scanner.nextDouble();return price;}
}
http://www.dtcms.com/a/392945.html

相关文章:

  • 网络编程:一个 TCP 服务器的简易实现(epoll 版本)
  • 【MySQL学习】关于MySql语句执行、查询、更新流程原理总结
  • C++语法深度剖析与面试核心详解
  • 【Tomcat】基础总结:类加载机制
  • 127、【OS】【Nuttx】【周边】效果呈现方案解析:比较浮点数(上)
  • 计网协议簇具体协议
  • 电路分析基础笔记
  • 【JVM 常用工具命令大全】
  • 从iload_1 iload_2 iadd字节码角度看jvm字节码执行
  • openssl 启用AES NI加速对AES加密性能影响的测试
  • LeetCode:32.随机链表的复制
  • 基于SpringBoot+Vue的旅游系统【协同过滤推荐算法+可视化统计】
  • 前端实现一个星空特效的效果(实战+讲解)
  • 【嵌入式】【科普】软件模块设计简介
  • 【ROS2】ROS2通讯机制Topic常用命令行
  • 欧姆龙NJ系列PLC编程标准化案例
  • 【OpenGL】LearnOpenGL学习笔记25 - 法线贴图 NormalMap
  • UE5 基础应用 —— 09 - 行为树 简单使用
  • 客户端实现信道管理
  • 异常解决记录 | Yarn NodeManager 注册异常
  • 【C#】C# 调用 Python 脚本正确姿势:解决 WaitForExit 死锁与退出检测问题
  • Java25新特性
  • 卷积神经网络CNN-part9-DenseNet
  • 深入浅出密码学第一章课后题(持续更新)
  • Mysql 入门概览
  • 大模型中权重共享的作用?
  • 【精品资料鉴赏】55页可编辑PPT详解 数字化高校智慧后勤解决方案
  • LLM大模型 - 实战篇 - AI Agents的开发应用
  • 【分布式技术】RedisShake相关功能详细介绍
  • qsv:一款高性能的CSV数据处理工具