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

Java的异常机制

异常机制

三种类型

  • 检查型异常:程序员无法预见的
  • 运行时异常:在编译时会被忽略
  • 错误ERROR:错误在代码中被忽略,在编译时检查不到

异常处理机制

  • 抛出异常
  • 捕获异常
  • 异常处理的五个关键字:try,catch,finally,throw,throws

以下为这五个关键词的使用方法:

package exception;public class Demo02 {public static void main(String[] args) {//假设要捕获多个异常:从小到大去写try {new Demo02().a();}catch (Error e){//catch(想要捕获的异常类型) 捕获异常System.out.println("ERROR");}catch (Exception e){System.out.println("EXCEPTION");}catch (Throwable e){System.out.println("THROWABLE");}finally {System.out.println("finally");}}public void a() {b();}public void b() {a();}
}
package exception;import org.w3c.dom.ls.LSOutput;public class Demo03 {public static void main(String[] args) {int a=1;int b=0;try {System.out.println(a/b);} catch (Exception e) {throw new RuntimeException(e);} finally {}}}
package exception;public class Demo01 {public static void main(String[] args) {new Demo01().test(1,0);}//假设这方法中,处理不了这个异常,方法上抛出异常用throwspublic void  test(int a,int b) throws ArithmeticException {if(b==0){throw new ArithmeticException();}System.out.println(a/b);}}
/*int a=1;int b=0;try{//try监控区域if(b==0){//throw  throws用于方法throw new ArithmeticException();//主动抛出异常}System.out.println(a/b);}catch (ArithmeticException e){System.out.println("程序出现异常,变量b不能为0");} finally {//善后工作System.out.println("finally");}//finally 可以不要finally*/

自定义异常

步骤:

  • 创建自定义异常类
  • 在方法中通过throw关键字来抛出异常对象
  • 如果当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作
  • 在出现异常方法的调用者中捕获并处理异常
package exception;
//自定义异常
public class MyException extends Exception{//传递数字>10private int detail;public MyException(int a){this.detail=a;}//toString:异常的打印信息@Overridepublic String toString() {return "Demo04{" +"detail=" + detail +'}';}
}

我们来测试下

package exception;public class Test {static void test(int a) throws MyException {System.out.println("传递的参数为:"+a);if(a>10){throw new MyException(a);//抛出}System.out.println("OK");}public static void main(String[] args) {try {test(1);} catch (MyException e) {System.out.println("MyException=>"+e);}}}

总结:

  • 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  • 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加try-catch,处理潜在异常
  • 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加finally语句块去释放占用的资源
http://www.lryc.cn/news/334582.html

相关文章:

  • 考虑预同步的虚拟同步机T型三电平逆变器并离网MATLAB仿真模型
  • 记一次k8s取证检材过期的恢复
  • 【网站项目】自助购药小程序
  • Ubuntu22.04修改默认窗口系统为X11
  • 延时队列实现实战:如何利用 RabbitMQ 实现延时队列,以满足特定延迟处理需求
  • 关于在Ubuntu上配置mysql踩的一些坑
  • JSBridge原理 - 前端H5与客户端Native交互
  • 【Java EE】Spring请求如何传递参数详解
  • 菜鸟笔记-Numpy常用函数用法汇总
  • tensorflow.js 如何使用opencv.js通过面部特征点估算脸部姿态并绘制示意图
  • Linux命令-dpkg-divert命令(Debian Linux中创建并管理一个转向列表)
  • flex: 1 是哪些属性的缩写?
  • python基于opencv实现数籽粒
  • OpenCV图像处理——基于OpenCV的ORB算法实现目标追踪
  • 13.JavaWeb XML:构建结构化数据的重要工具
  • 鸿蒙OS实战开发:【多设备自适应服务卡片】
  • 深度学习基础之一:机器学习
  • Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单视频处理实战案例 之五 简单指定视频某片段重复播放效果
  • ARXML处理 - C#的解析代码(二)
  • 关于华为即将举行的鸿蒙春季沟通会的新闻报道
  • MySQL视图及如何导入导出
  • 文心一言上线声音定制功能;通义千问开源模型;openAI又侵权?
  • 课时89:流程控制_函数进阶_函数变量
  • Linux命令-dpkg-preconfigure命令(Debian Linux中软件包安装之前询问问题)
  • SEO优化艺术:精细化技巧揭示与搜索引擎推广全面战略解读
  • 《springcloud alibaba》 四 seata安装以及使用
  • -bash: cd: /etc/hadoop: 没有那个文件或目录
  • JVM字节码与类加载——字节码指令集与解析
  • 景芯2.5GHz A72训练营dummy添加(一)
  • React - 请你说一说setState是同步的还是异步的