Java基础之异常
目录
- 1 异常
- 1.1 异常的概述
- 1.2 常见异常类型
- 1.3 JVM的默认处理方案
- 1.4 编译时异常的处理方式
- 1.4.1 异常处理之 try ... catch ... [kætʃ](捕获异常)
- 1.4.2 异常处理之 throws(抛出异常)
- 1.5 Throwable 的成员方法
- 1.6 编译时异常和运行时异常的区别
- 1.7 finally关键字
- 1.8 自定义异常
1 异常
1.1 异常的概述
-
异常:就是程序出现了不正常的情况

-
Error:严重问题,不需要处理
-
Exception:称为异常类,它表示程序本身可以处理的问题
-
RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码
-
非RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了
1.2 常见异常类型
- 数组索引越界异常:
ArrayIndexOutOfBoundsException - 空指针异常:
NullPointerException;直接输出没有问题,但是调用空指针的变量的功能就会报错 - 类型转换异常:
ClassCastException - 迭代器遍历没有此元素异常:
NoSuchElementException - 数学操作异常:
ArithmeticException - 数子转换异常:
NumberFormatException
1.3 JVM的默认处理方案
- 如果程序出现了问题,我们没有做任何处理,最终 JVM 会做默认处理
- 把异常的名称、异常的原因以及异常出现的位置等信息输出在控制台
- 有异常的位置程序停止运行
1.4 编译时异常的处理方式
- 如果程序出现了问题,我们需要自己来处理,有两种处理方案
- try … catch …
- throws
1.4.1 异常处理之 try … catch … [kætʃ](捕获异常)
- 格式1
try {可能出现异常的代码;
} catch (异常类名 变量名) {异常的处理代码;
} /*catch (异常类名1 变量名1) {异常的处理代码;
}*/
- 格式二
try{可能出现异常的代码;
} catch(Exception e){e.printStackTrae(); //返回异常信息
}
-
执行流程:
- 程序从 try 里面的代码开始执行
- 出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统
- 当Java运行时系统接收到异常对象时,会到 catch 中 去找匹配的异常类,找到后进行异常处理
- 执行完毕之后,程序还可以继续往下执行
-
范例
package ceshi;public class ExceptionDemo {public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method() {try {int[] arr = {1, 2, 3};System.out.println(arr[3]); //出现异常时,会创建一个异常对象new ArrayIndexOutOfBoundsException();} catch (ArrayIndexOutOfBoundsException/Exception e) {e.printStackTrace();/*开始结束java.lang.ArrayIndexOutOfBoundsException: 3at ceshi.ExceptionDemo.method(ExceptionDemo.java:12)at ceshi.ExceptionDemo.main(ExceptionDemo.java:6)*/}}
}
1.4.2 异常处理之 throws(抛出异常)
- 格式
throws 异常类名;
- 注意:这个格式是跟在方法的括号后面的
- 编译时异常必须要进行处理,两种处理方案:try … catch… 或者 throws,如果采用 throws 这种方案,将来还是需要调用try … catch …
- 运行时异常可以不处理,出现问题后,需要我们会来改代码
package ceshi;import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;public class ExceptionDemo {public static void main(String[] args) {System.out.println("开始");
// method();try {method2();} catch (ParseException e) {e.printStackTrace();}System.out.println("结束");}//编译时异常public static void method2() throws ParseException {String s = "2020-7-16";SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date d = sdf.parse(s); //parse报错:ParseExceptionSystem.out.println(d); //Thu Jul 16 00:00:00 CST 2020}//运行时异常public static void method() throws Exception{int[] arr = {1,2,3};System.out.println(arr[3]);/*开始Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3at ceshi.ExceptionDemo.method(ExceptionDemo.java:28)at ceshi.ExceptionDemo.main(ExceptionDemo.java:9)*/}
}
1.5 Throwable 的成员方法
| 方法名 | 说明 |
|---|---|
| public String getMessage() | 返回此 throwable 的详细信息字符串 |
| public String toString() | 返回此可抛出的简短描述 |
| public void printStackTrace() (常用) [treɪs] | 把异常的错误信息输出在控制台 |
package ceshi;public class ExceptionDemo {public static void main(String[] args) {System.out.println("开始");method();System.out.println("结束");}public static void method() {try {int[] arr = {1, 2, 3};System.out.println(arr[3]); //出现异常时,会创建一个异常对象new ArrayIndexOutOfBoundsException();} catch (ArrayIndexOutOfBoundsException e) {//1,public String getMessage() 返回此 throwable 的详细信息字符串System.out.println(e.getMessage()); //Index 3 out of bounds for length 3//2,public String toString() 返回此可抛出的简短描述System.out.println(e.toString()); //java.lang.ArrayIndexOutOfBoundsException: 3//3,public void printStackTrace() (常用) 把异常的错误信息输出在控制台e.printStackTrace();/*java.lang.ArrayIndexOutOfBoundsException: 3at ceshi.ExceptionDemo.method(ExceptionDemo.java:12)at ceshi.ExceptionDemo.main(ExceptionDemo.java:6)*/}}
}
1.6 编译时异常和运行时异常的区别
- Java中的异常被分为两大类:编译时异常和运行时异常,也被称为受检异常和非受检异常
- 运行时异常就是运行时才报错,编译时异常就是编译时有红线报错
- RuntimeException类及其子类(运行时异常):无需显示处理,也可以和编译时异常一样处理
- 其余异常(编译时异常):必须显示处理,否则程序就会发生错误,无法通过编译(有可能会出现异常,并不是一定会出现)
1.7 finally关键字
- 用在捕获处理的异常格式中,放在最后面
- 格式
try{//可能出现异常的代码!
}catch{Exception e}{e.printStackTrace();
}finally{// 无论代码是出现异常还是正常执行,最终一定要执行这里的代码!!
}
-
finally的作用:可以在代码执行完毕后进行资源的释放操作 -
资源都是实现了
Closeable接口的,都自带close()关闭方法- try : 出现1次
- catch:出现0 - N 次(如果有finally那么 catch 可以没有)
- finally:出现0 - 1 次
1.8 自定义异常
- 格式
public class 异常类名 enxtends Exception {无参构造带参构造
}
- 异常类
package ceshi;public class ScoreException extends Exception{//自动生成无参,带参构造方法public ScoreException() { }public ScoreException(String message) {super(message);}
}
- 操作类
package ceshi;public class Teacher {public void checkScore(int score) throws ScoreException {if(score<0 || score>100) {throw new ScoreException("你给的分数有误");} else {System.out.println("成绩正常");}}
}
- 测试类
package ceshi;import java.util.Scanner;public class Demo {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入分数"); int score = sc.nextInt(); //120Teacher t = new Teacher();
// t.checkScore(score); //checkScore报错,编译时异常需要捕获try {t.checkScore(score);} catch (Exception e) {e.printStackTrace();}}
}
相关文章:
Java基础之异常
目录1 异常1.1 异常的概述1.2 常见异常类型1.3 JVM的默认处理方案1.4 编译时异常的处理方式1.4.1 异常处理之 try ... catch ... [ktʃ](捕获异常)1.4.2 异常处理之 throws(抛出异常)1.5 Throwable 的成员方法1.6 编译时异常和运行…...
感慨:大三了,未来该何去何从呢
笔者曾在十一月份通过了字节跳动的三次面试, 但是最终因为疫情原因不能满足公司的入职时间要求, 没有拿到offer。近期也是投递了大量大厂的实习岗, 但是要么已读不回, 要么明确告诉我学历至少要985硕士(天天被阿里cpu)。 说实话一…...
分账系统逻辑
一、说明 主体与业务关系方进行相关利益和支出的分配过程 使用场景: 在分销业务中,主营商户收到用户购买分销商品所支付的款项后,可以通过分账逻辑,与分销商进行佣金结算。在零售、餐饮等行业中,当销售人员完零售等…...
SpringCloud篇——什么是SpringCloud、有什么优缺点、学习顺序是什么
文章目录一、首先看官方解释二、Spring Cloud 的项目的位置三、Spring Cloud的子项目四、Spring Cloud 现状五、spring cloud 优缺点六、Spring Cloud 和 Dubbo 对比七、Spring Cloud 学习路线一、首先看官方解释 Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式…...
TCP核心机制之连接管理详解(三次握手,四次挥手)
目录 前言: 建立连接 建立连接主要两个TCP状态: 断开连接 断开连接的两个重要状态 小结: 前言: TCP是如何建立对端连接,如何断开连接,这篇文章会详细介绍。 建立连接 首先明确连接的概念:…...
前端—环境配置
前端开发建议用 Google Chrome 浏览器 vscode https://code.visualstudio.com 1、open in browser 插件:可以在 vscode 中直接运行查看浏览器效果 2、Live Server 插件:可以使代码修改浏览器页面实时刷新。 用户代码片段 … JavaScript 与 TypeScri…...
大学生常用python变量和简单的数据类型、可迭代对象、for循环的3用法
文章目录变量和简单的数据类型下划线开头的对象删除内存中的对象列表与元组debug三酷猫钓鱼记录实际POS机小条打印使用循环找乌龟可迭代对象📗理解一📘理解二2️⃣什么是迭代器✔️注意3️⃣迭代器对象4️⃣有关迭代的函数for循环的3用法🌸I …...
Java集合:Map的使用
1.Map框架l----Map:双列数据,存储key-value对的数据 ---类似于高中的函数: y f(x)|----HashMap:作为Map的主要实现类, 线程不安全的,效率高;可以存储null的key和value|----LinkedHashMap:保证在遍历map元素时,可以按照…...
【Datawhale图机器学习】第一章图机器学习导论
图机器学习导论 学习路径与必读论文清单 斯坦福CS224W(子豪兄中文精讲)知识图谱实战DeepwalkNode2vecPageRankGNNGCNGragh-SAGEGINGATTrans-ETrans-R 图无处不在 图是描述关联数据的通用语言 举例 计算机网络新冠肺炎流行病学调查传播链食物链地铁图…...
window 配置深度学习环境GPU
CUDA 11.6 CUDNN Anaconda pytorch 参考网址:https://zhuanlan.zhihu.com/p/460806048 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 (aliyun.com) 电脑信息 RTX 2060 GPU0 1. CUDA 11.6 1.1 确认信息 C:\Users\thzn>nvidia-smi (CUDA Versi…...
VS Code 用作嵌入式开发编辑器
使用 Keil MDK 进行嵌入式开发时,Keil 的编辑器相对于主流编辑器而言有些不方便,比如缺少暗色主题、缺少智能悬停感知(鼠标停在一个宏上,能自动展开最终的宏结果)、代码补全不好用等等,所以推荐使用 VS Cod…...
【Python】网络爬虫经验之谈
爬虫经验之谈对爬虫的认识网站分析技术选型JS逆向反爬机制结语近段时间,因为工作需要做一些爬虫的开发,分享一下走过的坑和实战的经验吧!对爬虫的认识 F12查看的网络请求,找到相应的接口查看一下json数据来源和构造。我爬取的网站…...
数学建模美赛【LaTeX】公式、表格、图片
数学建模美赛【LaTeX】公式、表格、图片 1 宏包 \package{ } 就是在调用宏包,对计算机实在外行的同学姑且可以理解为工具箱。 每一个宏包里都定义了一些专门的命令,通过这些命令可以实现对于一类对象(如数学公式等)的统一排版&a…...
【大数据】YARN节点标签Node Label特性
简介 YARN 的 Node-label 特性能够将不同的机器类型进行分组调度,也可以根据不同的资源要求进行分区调度。运维人员可以根据节点的特性将其分为不同的分区来满足业务多维度的使用需求。YARN的Node-label功能将很好的试用于异构集群中,可以更好地管理和调…...
C# SolidWorks二次开发 API-命令标签页的切换与按钮错乱问题
这是一个网友咨询的问题,说他想控制默认打开文件之后solidworks上方工具栏的当前激活标签页。 之前我们提到过,制作Solidworks的插件也会在上面增加一个标签页,用来放自己开发的命令,经常开发的人肯定会遇到有时候更新版本,或者标…...
ElasticSearch 7.6.1
疑问 ES为什么这么快? 全文检索 听过一个程序扫描文本的每一个单词,针对单词建立索引,并保存该单词在文本中的位置,以及出现的次数。在检索查询时候,通过建立好的索引进行查询,将索引中单词对应的文本位…...
Linux系列 操作系统安装及服务控制(笔记)
作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.操作系统 1.Linux系统三大类 (1)ubu…...
Linux基础 - NTP时间同步
🏡博客主页: Passerby_Wang的博客_CSDN博客-系统运维,云计算,Linux基础领域博主 🌐所属专栏:『Linux基础』 🌌上期文章: Linux基础 - DNS服务进阶 📰如觉得博主文章写的不错或对你有所帮助…...
golang 入门教程:迷你 Twitter 后端
请记住,这个项目主要是为了稍微熟悉下Golang,您可以复制架构,但该项目缺少适当的 ORM,没有适当的身份验证或授权,我完全无视中间件,也没有测试。 我将在其自己的部分中讨论所有这些问题,但重要的…...
CPP2022-30-期末模拟测试03
6-1 引用作函数形参交换两个整数 分数 5 全屏浏览题目 切换布局 作者 李廷元 单位 中国民用航空飞行学院 设计一个void类型的函数Swap,该函数有两个引用类型的参数,函数功能为实现两个整数交换的操作。 裁判测试程序样例: #include <…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
CentOS下的分布式内存计算Spark环境部署
一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架,相比 MapReduce 具有以下核心优势: 内存计算:数据可常驻内存,迭代计算性能提升 10-100 倍(文档段落:3-79…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
