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 <…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...