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

Java|学习|异常

1.异常

1.1 异常

1.1.1 概述

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

异常体系

Error:严重问题,不需要处理。

Exception:称为异常类,它表示程序本身可以处理的问题。

RuntimeException:在编译器不检查,出现问题后需要我们修改代码。

非RuntimeException:编译器就必须处理,否则程序不能通过编译,更不能正常运行。

Throwable是所有异常类的超类。

1.1.2 JVM的默认处理方案

如果程序出现了问题,我们没有做任何处理,最终JVM会做默认的处理:

把异常的名称、异常原因以及异常出现的位置等信息输出在了控制台。

程序停止执行。

1.1.3 Throwable的成员方法

方法名说明
public String getMessage()返回此throwable的详细消息字符串 原因
public String toString()返回此可抛出的简短描述(包括getMessage的详细消息字符串) 原因+名称
public void printStackTrace()把异常的错误信息输出在控制台(包括toString的描述) 原因+名称+位置

1.1.4 编译时异常和运行时异常的区别

Java中的异常被分为两大类:编译时异常和运行时异常,也被称为受检异常和非受检异常。

所有的RuntimeException类及其子类被称为运行时异常,其他的异常都是编译时异常。

区别:

编译时异常:必须显式处理,否则程序就会发生错误,无法通过编译。

运行时异常:无需显式处理,一般需要修改代码。

1.1.5 方法覆写中的抛出异常范围

覆写后的抛出异常范围不能更宽泛,只能抛出与父类方法相同的异常或者父类抛出异常的子类,或者不抛出异常。

1.2 try…catch 和 throws 的使用

1.2.1 try…catch

格式:

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

在 try…catch 结构中可以写多个 catch 语句块,但是处理的异常类型从上到下必须使从子类到父类,或者没有继承关系。适用于 try 下面可能会出现多种异常,且每种异常对应的处理方案不同的情况。

用一个 catch 语句块捕捉多个异常时,可以在 catch 的参数列表里写多个异常类型,用 | 隔开。如果类型中有继承关系,直接写父类。

1.2.2 throws

throws 抛出异常,并不处理异常。如果能够处理问题的话,就用 try…catch 直接处理,否则就用 throws 抛出问题,作为提醒机制。对于别人抛给的异常,要么处理,要么继续往上抛。

1.2.3 try…catch 和 throws 的使用场景

一般在服务端即提供方法处使用 throws 抛出异常,而在客户端即调用方法处使用 try…catch 处理异常。

1.2.4 自动关闭资源

从 JDK1.7 开始,可以把打开某个资源的语句写道 try 的参数列表中,这样当语句块执行完毕后,会自动将打开的资源关闭。

*1.2.5 throws 和 throw 的区别

使用 throw 类似于 return ,执行到 throw 某个对象的时候方法结束执行,并返回异常对象。这样,就可以获取异常对象并且进行操作,比如显示异常信息。

throwsthrow
用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
表示抛出异常,由该方法的调用者来处理表示抛出异常对象
表示出现异常的一种可能性,并不一定会发生这些异常执行throw一定抛出了某种异常

1.3 finally

1.3.1 finally

finally 是必须执行的语句块,必须和 try 或者 try…catch 搭配使用,只有遇到 System.exit(0) 时才不执行。

1.3.2 try…catch 和 finally 中出现的 return

当 try 或者 catch 语句块中出现 return 时, return 后面的语句会执行,但是不会立刻返回值。在 return 语句执行之后,返回值之前要执行 finally 中的语句。如果 finally 中有 return 语句,就直接在 finally 中执行 return , try…catch 中的 return 后的代码虽然已经执行了,但是不会再返回值。如果 finally 中没有 return 语句,就去将刚才执行了但是还没有返回值的 return 语句进行返回。

比如:
return

1.4 自定义异常(类)

创建一个类,继承一个已有的异常类。一般需要提供无参构造以及有参构造,用于把异常信息传递给父类。

如果自定义异常是运行时异常类,继承 RuntimeException ,否则一般继承 Exception 即可。

public class 异常类名 extends Exception {
    无参构造
    带参构造//需要调用父类带参构造
}

*自定义异常可以用来传递消息当作提醒机制。

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤

相关文章:

  • Vue2 与 React 的区别
  • JOSEF约瑟 漏电继电器 JD1-200 工作电压:380V 孔径:45mm 50~500mA
  • js + selenium 获取chatgpt的accessToken
  • Java实现B树
  • 解决uniapp里scroll-view横向滚动的问题
  • JOSEF约瑟 多档切换式漏电(剩余)继电器JHOK-ZBL1 30/100/300/500mA
  • 【Redis】Java Spring操作redis
  • 2024上海国际智慧城市展览会(世亚智博会)智慧城市,数字中国
  • Python数据挖掘:入门、进阶与实用案例分析——自动售货机销售数据分析与应用
  • 淘宝天猫商品评论数据接口,淘宝天猫商品评论API接口,淘宝API
  • 【Rust基础①】基本类型、所有权与借用、复合类型
  • 【Vivado HLS Bug】Ubuntu环境下Vivado HLS导出IP报错:HLS ERROR: [IMPL 213-28]
  • Ant Design Vue Element-ui 中table 合并行功能,以及带分页并合并行
  • 基于SSM的学生选课管理系统
  • ideal远程Debug部署在服务器上的服务详解
  • STC89C51基础及项目第15天:小车测速、添加语言识别控制
  • 学习嵌入式系统的推荐步骤:
  • 怎么团队合作,协作开发
  • 【C++】如何使用RapidXML读取和创建XML文件
  • 百度Apollo自动驾驶
  • A股三大股指收涨:军工股掀涨停潮,两市成交近1.5万亿元
  • 马上评|演出服“穿过就退货”的闹剧不该一再重演
  • 重庆动物园大熊猫被游客扔玻璃瓶,相同地方曾被扔可乐瓶
  • 建筑瞭望|融入自然的新泳池,治愈了中央公园的历史旧伤
  • 上海市委政法委召开会议传达学习总书记重要讲话精神
  • 退休11年后,71岁四川厅官杨家卷被查