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

Java中常见的异常类型

1、Exception和Error有什么区别?

 

首先Exception和Error都是继承于Throwable类,在Java中只有Throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。

Exception和Error体现了JAVA语言对于异常处理的两种方式。

Exception是java程序运行中可预料的异常情况,可以获取到这种异常,并且对这种异常进行业务外的处理。

Error是java程序运行中不可预料的异常情况,这种异常发生以后,会直接导致JVM不可处理或者不可恢复的情况。所以这种异常不可能抓取到,比如OutOfMemoryError、NoClassDefFoundError等。

其中的Exception又分为已检查异常和未检查异常。两个根本的区别在于:已检查异常必须在编写代码时使用try catch捕获或throws声明抛出,未检查异常在代码编写时可以忽略捕获操作,这种异常是在代码编写或者使用过程中通过规范可以避免发生的。 切记,Error是Throwable,不是Exception 。

Java语言规范将派生于Error类和RuntimeException类的所有异常称为未检查异常(unchecked exception),所有其他的异常称为已检查异常(checked exception)。已检查异常并不是编程错误,它的出现是软件运行阶段所不可避免的,最常见的这类异常如socket连接超时,FileNotFoundException、InterruptException、ClassNotFoundException等等。Java编译器会检查已检查异常,当程序中出现已检查异常,要么用try-catch语句捕获处理,要么使用throws语句声明抛出它,否则编译不通过。

2、throw和throws的区别

throw语句用在方法体内,表示抛出异常(已检查异常),由方法体内的语句处理,处理的方式有两种:要么使用try-catch捕获异常,在方法体内部自己处理,要么使用throws声明抛出这个异常,交给调用者处理(也可以将try-catch与throws结合使用)。throw表示抛出了异常,如果执行throw语句,则一定抛出了某种异常。

throws语句用在方法头,声明该方法可能会抛出这种类型的异常,由该方法的调用者来处理。throws表示出现异常的一种可能性,并不一定会发生这些异常。

throwthrows可以不同时使用

1.若在方法体中使用throw抛出一个未检查异常,在该方法头可以不用throws声明异常;

2.若在方法体中使用throw抛出一个已检查异常,且用try-catch捕获处理,在该方法头可以不用throws声明异常;

3.若在方法体中使用throw抛出一个已检查异常,且没用try-catch捕获处理,在该方法头必须使用throws声明异常。

4.若一个方法用throws声明异常,在该方法体内可以不用throw抛出异常。

FileNotFoundException是已检查异常,要么使用try-catch捕获异常,在方法体内部自己处理,要么使用throws声明抛出这个异常,交给调用者处理。同样的,EOFException也是已检查异常。

NullPointerException是未检查异常,即使使用throw抛出了未检查异常,若没有使用try-catch进行捕获处理,或者没有使用throws声明异常,也不会有错误提示。因为java编译器不会对未检查异常进行编译检查,只会对已检查异常进行编译检查。同样的,ClassCastException、ArrayIndexOutOfBoundsException、IllegalArgumentException等都是未检查异常。

3、try-catch-finally

1.try-catch-finally 中哪个部分可以省略?

使用try语句的方式有三种:try-catch、try-finally、try-catch-finally,可以省略catch,或者省略finally,但是catch与finally不能同时省略。

2.try-catch-finally 中,如果catch中return了,finally还会执行吗?

不管有无异常,只要存在finally,那么finally均会执行,且finally中有return时,会返回finally中return的值。若try或catch中有return而finally中没有return时,finally是在return之后执行的,只是会把try或catch中return的值先保存起来,等到finally执行结束,才真正的返回。

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

相关文章:

  • Java学习Day58:相声二人组!(项目统计数据Excel图表导出)
  • springboot 自动装配和bean注入原理及实现
  • 解决Redis缓存穿透(缓存空对象、布隆过滤器)
  • 初探Flink的序列化
  • QT 机器视觉 (3. 虚拟相机SDK、测试工具)
  • 1分钟解决Excel打开CSV文件出现乱码问题
  • 基于SpringBoot+Vue的仓库管理系统【前后端分离】
  • vue和django接口联调
  • 2-141 怎么实现ROI-CS压缩感知核磁成像
  • 开源库 FloatingActionButton
  • 技术选型不当对项目的影响与补救措施
  • Spring的核心类: BeanFactory, ApplicationContext 笔记241103
  • UE5移动端主要对象生命周期及监听
  • LLM | 论文精读 | CVPR | SelTDA:将大型视觉语言模型应用于数据匮乏的视觉问答任务
  • kafka里的consumer 是推还是拉?
  • 针对物联网边缘设备基于EIT的手部手势识别的1D CNN效率增强的组合模型压缩方法
  • 商品满减、限时活动、折扣活动的计算最划算 golang
  • vue3 + ts + element-plus 二次封装 el-table
  • python传递json参数给php
  • 2.若依vue表格数据根据不同状态显示不同颜色style
  • JZ2440开发板——LCD
  • YOLOv6-4.0部分代码阅读笔记-yolo_lite.py
  • 奇瑞汽车:降阶模型在新能源汽车热管理仿真上的应用
  • 传统的自然语言处理评估指标
  • WPF+MVVM案例实战(十七)- 自定义字体图标按钮的封装与实现(ABC类)
  • Redis数据结构:List类型全面解析
  • 人工智能证书合集
  • php开发实战分析(8):优化MySQL分页查询与数量统计,提升数据库性能
  • shell脚本案例:RAC配置多路径时获取磁盘设备WWID和磁盘大小
  • Android Framework AMS(10)广播组件分析-1