wap手机网站建设制作开发/拓客团队怎么联系
文章目录
- 一、1. 异常概念与体系结构
- 1.1 异常的概念
- 1.2 常见的异常
- 1.算数异常
- 2.数组越界异常
- 3.空指针异常
- 1.3 异常的体系结构
- 1.4 异常的分类
- 1. 编译时异常
- 2. 运行时异常(RuntimeException)
- 二、 异常的处理方式
- 2.1 防御式编程
- 2.2 EAFP:(异常处理的核心思想)
- 三、 异常的处理流程
- 3.1 异常的抛出
- throw关键字
- throws关键字
- try catch
- 总结
一、1. 异常概念与体系结构
1.1 异常的概念
在写代码的过程中总会出现的一些问题bug,有时很难通过代码去解决它
在Java中,将在程序执行过程中发生的不正常行为称为异常。
异常也分类:
1.2 常见的异常
1.算数异常
public class Test {public static void main(String[] args) {System.out.println(10/0);}
}
2.数组越界异常
public class Test {public static void main(String[] args) {int[] arr = {1, 2, 3};System.out.println(arr[100]);}
}
3.空指针异常
public class Test {public static void main(String[] args) {int[] arr = null;System.out.println(arr[0]);}
}
1.3 异常的体系结构
异常种类繁多,为了对不同异常或者错误进行很好的分类管理,Java内部维护了一个异常的体系结构
从上图中可以看到:
- Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception
- Error(错误):指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力乏术。
public class Test {public static void func(){func();}public static void main(String[] args) {func();}
}
- Exception(异常):异常产生后程序员可以通过代码进行处理,使程序继续执行。平时所说的异常就是Exception。
1.4 异常的分类
异常可能在编译时发生,也可能在程序运行时发生,根据发生的时机不同,可以将异常分为:
1. 编译时异常
在程序编译期间发生的异常,称为编译时异常,也称为受检查异常
还没来得及运行,在写代码的时候就报异常了。
2. 运行时异常(RuntimeException)
在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常
RunTimeException以及其子类对应的异常,都称为运行时异常。RuntimeException有很多很多子类比如:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException。
二、 异常的处理方式
2.1 防御式编程
- LBYL:
Look Before You Leap. 在操作之前就做充分的检查,即:事前防御型
每做一步都要进行一次检查,
缺陷:正常流程和错误处理流程代码混在一起, 代码整体显的比较混乱。
boolean ret = false;
ret = 登陆游戏();
if (!ret) {
处理登陆游戏错误;
return;
}
ret = 开始匹配();
if (!ret) {
处理匹配错误;
return;
}
ret = 游戏确认();
if (!ret) {
处理游戏确认错误;
return;
}
ret = 选择英雄();
if (!ret) {
处理选择英雄错误;
return;
}
ret = 载入游戏画面();
if (!ret) {
处理载入游戏错误;
return;
}
......
2.2 EAFP:(异常处理的核心思想)
It’s Easier to Ask Forgiveness than Permission. "事后获取原谅比事前获取许可更容易"也就是先操作, 遇到问题再处理,即:事后认错型
优势:正常流程和错误流程是分离开的, 程序员更关注正常流程,代码更清晰,容易理解代码
try {
登陆游戏();
开始匹配();
游戏确认();
选择英雄();
载入游戏画面();
...
} catch (登陆游戏异常) {
处理登陆游戏异常;
} catch (开始匹配异常) {
处理开始匹配异常;
} catch (游戏确认异常) {
处理游戏确认异常;
} catch (选择英雄异常) {
处理选择英雄异常;
} catch (载入游戏画面异常) {
处理载入游戏画面异常;
}
...
三、 异常的处理流程
在Java中,异常处理主要的5个关键字:throw、try、catch、final、throws。
处理异常的前提是得抛出异常
3.1 异常的抛出
在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者。
如果出现bug,又不想解决的时候,可以借助throw关键字,抛出一个指定的异常对象,当调用者调用时,调用者就知道这里有一个异常了。
抛出异常的方式有很多种
1.某段程序抛出
2.throw关键字抛出,一般用于抛出自定义的异常
throw关键字
public class Test {public static void main(String[] args) {int a=10;if(a==10){throw new NullPointerException("hahaha!");}}
【注意事项】
- throw必须写在方法体内部
- 抛出的对象必须是Exception 或者 Exception 的子类对象
- 如果抛出的是 RunTimeException 或RunTimeException 的子类,则可以不用处理,直接交给JVM来处理
- 如果抛出的是编译时异常,用户必须要处理,在方法声明之后用throws声明异常,否则无法通过编译
- 异常一旦抛出,其后的代码就不会执行
throws关键字
使用在方法的声明之后
作用:告诉方法的调用者,调用这个方法,会抛出一个XXX异常。
应用场景:处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常。
【注意事项】
- throws必须跟在方法的参数列表之后
- 声明的异常必须是 Exception 或者 Exception 的子类
- 方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型 具有父子关系,直接声明父类即可。
try catch
编译时异常(受查异常),必须要处理
所以:
但是,这个异常最终没有被程序员处理,实际上是交给JVM处理 。
如果不想要JVM处理,想要自己处理,那么就用到try catch
使用try catch可以自己抛出异常的代码,让程序正常进行
下面的代码在第二次打印的时候异常了,导致最后一个代码没有打印出来,
因为这种情况就是交给JVM处理,当JVM处理时,就会异常终止。
所以就出现了try catch来弥补这个缺点,使程序正常运转。
try catch使用方法:
把可能异常的代码用try 包裹起来,在catch括号里面抛出可能异常的类型,只有当catch捕捉到了这个异常,才会执行catch里面的内容,才能使后面的代码正常运行。
所以有一点注意的是:一定要写对异常的类型
public class Test {public static void main(String[] args) {System.out.println("before...");try {System.out.println(10/0);}catch (ArithmeticException e){System.out.println("我来处理异常ArithmeticException异常了");}System.out.println("after...");}
}
如果不知道是什么异常,或者异常有很多个,就写多几个catch
public static void main(String[] args) {System.out.println("before...");try {System.out.println(10/0);}catch (ArithmeticException e){System.out.println("我来处理异常ArithmeticException异常了");}catch(NullPointerException a){System.out.println("我来处理异常NullPointerException异常了");}System.out.println("after...");}
如果想知道是哪一行代码有异常,可以这样写
public static void main(String[] args) {System.out.println("before...");try {System.out.println(10/0);}catch (ArithmeticException e){e.printStackTrace();System.out.println("我来处理异常ArithmeticException异常了");}catch(NullPointerException a){System.out.println("我来处理异常NullPointerException异常了");}System.out.println("after...");}
【注意事项】
- try块内抛出异常位置之后的代码将不会被执行
- 如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到 JVM收到后中断程序----异常是按照类型来捕获的
3.不能直接用父类接受所有的异常子类,因为此时异常不精准。
如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误:
子类在前,父类在后是可以的,父类充当了一个垫后的作用。
总结
例如:以上就是今天要讲的异常的内容,内容多但比较容易理解,多看看复盘一下就能掌握啦。
相关文章:

【关于Java:认识异常】
文章目录 一、1. 异常概念与体系结构1.1 异常的概念1.2 常见的异常1.算数异常2.数组越界异常3.空指针异常 1.3 异常的体系结构1.4 异常的分类1. 编译时异常2. 运行时异常(RuntimeException) 二、 异常的处理方式2.1 防御式编程2.2 EAFP:(异常…...

【C++ • STL • 力扣】详解string相关OJ
文章目录 1、仅仅翻转字母2、字符串中的第一个唯一字符3、字符串里最后一个单词的长度4、验证一个字符串是否是回文5、字符串相加总结 ヾ(๑╹◡╹)ノ" 人总要为过去的懒惰而付出代价 ヾ(๑╹◡╹)ノ" 1、仅仅翻转字母 力扣链接 代码1展示&…...

【Tomcat服务部署及优化】
Tomcat 一、什么是Tomcat?二、Tomcat 核心组件2.1 Tomcat 组件2.3 Container组件的结构2.4 Tomcat 请求过程 三、Tomcat 部署3.1 安装JDK3.2 设置JDK环境变量3.3 安装Tomcat并用supervisor启动解压添加到supervisord服务测试能否通过supervisorctl启动 四、Tomcat的端口和主要…...

C++之红黑树
红黑树 红黑树的概念红黑树的性质红黑树结点的定义红黑树的插入红黑树的验证红黑树与AVL树的比较 红黑树的概念 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上…...

Go语言网络编程(socket编程)TCP
1、TCP编程 1.1.1 Go语言实现TCP通信 TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协…...

C语言——局部和全局变量
局部变量 定义在函数内部的变量称为局部变量(Local Variable) 局部变量的作用域(作用范围)仅限于函数内部, 离开该函数后是无效的 离开该函数后,局部变量自动释放 示例代码: #include <stdio.h>// 函数定义 …...

【Java基础篇 | 类和对象】--- 聊聊什么是内部类
个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习Java的一点学习心得,欢迎大家在评论区讨论💌 前言 当一个事物的内部&…...

合宙Air724UG LuatOS-Air LVGL API控件-页面 (Page)
页面 (Page) 当控件内容过多,无法在屏幕内完整显示时,可让其在 页面 内显示。 示例代码 page lvgl.page_create(lvgl.scr_act(), nil) lvgl.obj_set_size(page, 150, 200) lvgl.obj_align(page, nil, lvgl.ALIGN_CENTER, 0, 0)label lvgl.label_crea…...

mongodb数据库操作
1、启动mongodb /usr/local/mongodb/bin/mongod --dbpath /var/mongodb/data/--logpath /var/mongodb/logs/log.log &在mongodb启动命令中 --dbpath 指定mongodb的数据存储路径 --logpath 指定mongodb的日志存储路径 2、停止mongodb 第一步先进入mongo命令行模式 第二…...

第 2 章 线性表 ( 双链循环线性表(链式存储结构)实现)
1. 背景说明 2. 示例代码 1) status.h /* DataStructure 预定义常量和类型头文件 */#ifndef STATUS_H #define STATUS_H#define CHECK_NULL(pointer) if (!(pointer)) { \printf("FuncName: %-15s Line: %-5d ErrorCode: %-3d\n", __func__, __LINE__, ERR_NULL_PTR…...

redis在日常开发工作中的常见用法
redis是一款内存型数据库,在开发工作中经常用到,功能强大; 特别开一篇文章用来记录一下它的常见用法,算是一种总结; 它最主要的特点就是高可用的,速度快,分布式;有人说速度快&…...

小程序实现下拉刷新
小程序实现下拉刷新可以通过使用组件scroll-view和事件onPullDownRefresh来实现。 scroll-view组件的使用 在需要下拉刷新的页面的wxml文件中,通过scroll-view组件包裹需要滚动的内容,设置scroll-y属性为true,表示允许竖向滚动。示例代码如…...

Day 36 贪心算法 part05 : 435. 无重叠区间 763.划分字母区间 56. 合并区间
56. 合并区间 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 示例 1: 输入:inte…...

使用Python将网页数据保存到NoSQL数据库的方法和示例
随着大数据和人工智能技术的快速发展,对于大规模数据的处理需求日益增多。NoSQL数据库作为一种新兴的数据存储解决方案,具有高可扩展性、高性能和灵活性数据模型等优势,已经在许多行业得到广泛应用。传统的关系型数据库在处理海量数据时可能会…...

两个路由器如何连接设置的方法攻略
一、前言 随着智能家居时代来临,家里的网络部署需求开始复杂起来。往往一个路由器已经不能满足需求或者不利于拓展。两个路由器连接最常见的情况是家中已有一个路由器,并且已经通过这个路由器来正常上网。现在是因某些原因想在不改变已经在用的路由器的设…...

分类任务评价指标
分类任务评价指标 分类任务中,有以下几个常用指标: 混淆矩阵准确率(Accuracy)精确率(查准率,Precision)召回率(查全率,Recall)F-scorePR曲线ROC曲线 1. 混…...

c++静态成员
目录 静态成员 静态成员变量 静态成员函数 const 静态成员属性 静态成员实现单例模式 静态成员 在类定义中,它的成员(包括成员变量和成员函数),这些成员可以用关键字 static 声明为静态的,称为静态成员。 不管这…...

go-zero直连与etcd服务注册中心
go-zero中直连方式 在使用grpc是最重要的就是pb文件了,生成的pb文件,通过pb文件可以生成grpc的客户端和服务端,那么客户端和服务端就可以直连了,再次基础上可以引入etcd实现服务注册。 所有的代码都需要开发者编写,包…...
Kotlin File writeText appendText appendBytes readBytes readText
Kotlin File writeText appendText appendBytes readBytes readText import java.io.Filefun main(args: Array<String>) {val filePath "./myfile.txt"val file File(filePath)file.writeText("hello,") //如果原有文件有内容,将完全覆…...

常见缺少msvcp140.dll问题及解决方法,分享多种方法帮你解决
在日常使用电脑的过程中,我们可能会遇到各种问题,比如电脑提示msvcp140.dll文件丢失。这个问题通常是由于某些程序或游戏需要这个dll文件来正常运行,但是由于某种原因,这个文件被误删或者损坏了。那么,如何解决这个问题…...

【K210+ESP8266图传上位机开发】TCP server + JPEG图像解析上位机开发
本文章主要记录基于 【K210-ESP8266】 图传和显示的过程,上位机开发过程,系统架构和下位机开发请参考文章: 【K210-ESP8266】开发板上传图像数据到服务器并实时显示 💖 作者简介:大家好,我是喜欢记录零碎知…...

Linux查看当前文件夹的大小
在Linux中,可以使用du(disk usage)命令来查看当前文件夹的大小。以下是一些使用du的方法: 查看当前文件夹的大小: 为了查看当前文件夹的总大小,可以在文件夹中运行: du -sh .这里: -…...

YOLO目标检测——密集人群人头数据集+已标注yolo格式标签下载分享
实际项目应用:城市安防、交通管理、社会研究、商业应用、等多个领域数据集说明:YOLO密集人群人头目标检测数据集,真实场景的高质量图片数据,数据场景丰富,图片格式为jpg,共4300张图片。标注说明:…...

论文精读 —— Gradient Surgery for Multi-Task Learning
文章目录 Multi-task Learning和 PCGrad 方法简介论文信息论文核心图摘要翻译引言翻译2 使用PCGrad进行多任务学习2.1 基本概念:问题和符号表示2.2 三重悲剧:冲突的梯度,主导的梯度,高曲率2.3 PCGrad:解决梯度冲突2.4 …...

【VS Code插件开发】常见自定义命令(七)
🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋♂️ 作者简介:前端领域优质作者、阿里云专家博主,共同学习共同进步,一起加油呀! 📢 资料领取:前端…...

Spring Cloud服务发现与注册的原理与实现
Spring Cloud服务发现与注册的原理与实现 一、简介1 服务发现的定义2 服务发现的意义 二、Spring Cloud服务注册与发现的实现1 Spring Cloud服务注册1.1 服务注册的基本框架1.2 服务注册的实现方式 2 Spring Cloud服务发现2.1 服务发现的基本框架2.2 服务发现的实现方式 三、Sp…...

FFmpeg入门之简单介绍
FFmpeg是什么意思: Fast Forward Moving Picture Experts Group ffmpeg相关文档: Documentation FFmpeg ffmpeg源码下载: https://git.videolan.org/git/ffmpeg.git https://github.com/FFmpeg/FFmpeg.git FFmpeg能做什么? 多种媒体格式的封装与解封装 : 1.多种音…...

新版DBeaver调整编辑窗口字体大小
网上有DBeave字体设置了,但看了下,目前最新版的已经更改了首选项分组,层级发生了变化,这里记录一下2022.08.21版的设置。 默认字体是10,比较小,改为11或更大会好看些。...

《vue3实战》运用push()方法实现电影评价系统的添加功能
目录 前言 电影评价系统的添加功能是什么? 电影评价系统的添加功能有什么作用? 一、push()方法是什么?它有什么作用? 含义: 作用: 二、功能实现 这段是添加开始时点击按钮使…...

JavaScript学习笔记02
JavaScript笔记02 数据类型详解 字符串 在 JavaScript 中正常的字符串都使用单引号 或者双引号" "包裹:例: 转义字符 在 JavaScript 字符串中也可用使用转义字符(参考:详解转义字符):例&…...