- 博客(73)
- 收藏
- 关注
原创 hi3519dv500OSD示例实现讲解
sample_vio_osd.c 实现Hi3519DV500平台OSD功能,通过初始化时间与四角框区域参数,调用SDK接口创建并绑定Region至VENC/VPS通道。时间OSD采用双缓冲、周期刷新机制,支持自定义位置、颜色及字体放大;四角框则通过配置坐标、线宽与颜色实现。模块提供启动/停止接口,管理线程与资源,确保显示稳定可靠。
2026-11-05 20:20:23
270
原创 Hi3519DV500-OSD
Hi3519DV500的OSD通过REGION模块统一管理视频叠加内容,支持8个区域,涵盖Overlay、Cover、Line、Mosaic等类型,实现文字、Logo、遮挡等功能。软件预先绘制ARGB1555格式位图,由硬件直接叠加,不依赖上位机处理。区域可配置层次、位置、透明度(仅全透/不透),并支持双缓冲(Canvas)提升刷新效率。通过VENC/VPSS绑定通道,将画布动态更新至视频流,适用于时间戳、通道号等实时信息显示。
2026-10-28 22:46:41
140
原创 U-Boot使用
U-Boot是嵌入式系统中常用的bootloader,用于加载Linux内核及设备树至DDR并启动系统。它支持多种架构和外设,由SOC厂商定制后适配具体硬件。编译需配置交叉编译环境,通过make命令生成u-boot.bin,再经头部封装为.imx文件用于烧写。可通过SD卡或EMMC启动,进入U-Boot命令行后,可使用bdinfo、printenv等查看信息,利用nfs、tftp实现网络调试,通过mmc、fat等命令操作存储设备,最终用bootz引导Linux。
2026-10-19 12:34:53
192
原创 STM32-DMA
DMA(直接存储访问)是MCU中用于实现外设与内存间高效数据传输的硬件模块,可替代CPU完成数据搬运任务。通过配置DMA,CPU可释放资源专注于计算,提升系统效率。DMA支持多通道并发,各通道具软件与硬件优先级,确保高优先级请求及时响应。其工作流程包括CPU下发任务、外设请求、DMA响应并传输数据、最后通知CPU完成。共享总线时,系统保障CPU至少一半带宽。通过寄存器配置传输方向、地址递增模式、数据宽度及中断类型等参数,并结合HAL库初始化与中断处理,实现如UART的高效数据收发。
2026-09-09 14:24:39
96
原创 Linux C 语言文件 IO 与构建工具实战指南
本文围绕 Linux 环境下 C 语言开发的三项核心技能展开:软件包管理器的基本用法、makefile 构建规则的编写,以及文件 IO 编程。文件 IO 部分重点对比了标准库函数(fopen、fclose、fputc、fputs、fprintf、fscanf 等)与系统调用(open、read、write、close)的区别,并介绍了文件描述符的概念及其与标准输入、标准输出、标准错误的对应关系,帮助读者理解从用户态到内核态的文件操作机制。
2026-08-27 17:48:43
84
原创 STM32-中断与异常
本文主要介绍了STM32微控制器的中断机制及其应用实现。首先阐述了中断的三种类型:内核异常(系统异常)、外部中断和外设中断,并说明它们在ARM Cortex架构中的区别。文章详细解析了中断向量表的结构与工作原理,指出其本质是存储中断处理函数地址的数组,位于Flash起始位置0x08000000处。 重点分析了NVIC(嵌套向量中断控制器)的中断管理机制,包括优先级分组、中断使能/挂起等寄存器配置。对于外部中断EXTI,说明了其触发边沿检测、中断屏蔽等关键设置。通过GPIO按键中断案例,演示了从中断配置到回调
2026-08-25 09:54:54
244
原创 Linux-基础指令
本文介绍了Linux系统中常用的基本文件操作命令及其功能概述: 文件/目录操作命令: ls:列出目录内容或文件信息,支持选项参数 pwd:显示当前工作路径 cd:切换目录,支持绝对/相对路径 touch:创建文件或修改时间戳 mkdir:创建新目录 删除/复制移动命令: rmdir/rm:删除目录/文件 cp/mv:复制/移动文件或目录 其他实用命令: man:查看命令手册(:q退出) cat:查看文件内容 tar:归档压缩工具 这些命令构成了Linux文件系统操作的基础框架。
2026-08-18 22:09:38
43
原创 STM32-SPI
SPI通信协议概述 SPI(Serial Peripheral Interface)是一种高速、全双工、主从同步串行通信协议,采用四线制(SCK、MOSI、MISO、NSS)。主设备通过SCK提供时钟信号,MOSI(主发从收)和MISO(主收从发)实现双向数据传输,NSS(片选线)用于选择从设备。STM32F103ZET6的SPI接口通过复用推挽输出实现通信,软件控制片选信号。 SPI基于时钟边沿工作,通过时钟极性(CPOL,空闲状态电平)和时钟相位(CPHA,读写顺序)组合成四种模式。数据传输时,主从设备
2026-08-14 22:15:05
275
原创 GPIO-I2C
本文介绍了I2C通信协议的基本原理及其在STM32F103ZET6上的应用。I2C采用两线制(SCL时钟线和SDA数据线),支持多主机/多从机通信,使用7位设备地址加1位读写位,是一种同步半双工串行通信协议。文章详细阐述了I2C的开漏输出特性、线与逻辑、时钟同步机制和通信协议格式(起始/停止条件、地址帧、数据帧和应答机制)。通过分析STM32的I2C功能结构图和寄存器配置,说明了硬件实现原理。最后以AT24C02存储器为例,讲解了I2C的初始化流程和读写操作的具体实现,包括使用HAL库函数进行设备检测、数据
2026-08-11 13:32:57
189
原创 STM32-USART串口
USART是一种通用异步收发器,用于设备间的串行通信。它具有两根线(Tx发送和Rx接收),支持全双工1对1通信,通过波特率和帧格式(起始位、数据位、校验位、停止位)实现异步数据传输。USART与UART的区别在于前者支持同步/异步模式,但通常仅使用异步功能。STM32中USART通过DR寄存器实现数据收发,并利用状态寄存器避免数据覆盖。实际应用中需注意波特率匹配和缓冲区管理,防止数据丢失。代码示例展示了轮询模式下的数据收发,以及通过重定向fgetc/fputc实现printf/scanf功能。开发时建议采用
2026-08-07 20:24:08
250
原创 STM32-RCC与时钟树
本文介绍了单片机时钟系统的工作原理及其配置方法。主要内容包括:1. 时钟信号的作用:驱动CPU和外设工作,通过时钟频率衡量处理速度;2. 时钟源类型:分为内部(HSI/LSI)和外部(HSE/LSE)时钟源;3. 时钟树结构:包含时钟源选择、倍频/分频和使能开关三部分,用于为不同外设提供合适频率;4. RCC控制器:负责配置时钟源、倍频分频和外设开关;5. 实际配置示例:展示了通过RCC寄存器设置HSE时钟源、PLL倍频和总线分频的代码实现。文章还解释了volatile关键字的作用和GPIO时钟使能的底层寄
2026-08-05 08:00:00
362
原创 STM32-GPIO
GPIO(通用输入输出)是微控制器与外部设备交互的核心接口,通过高低电平实现数据获取和控制。STM32的GPIO分为A-G七组,每组16个引脚。输出模式包括推挽/开漏(通用/复用),通过MOS管驱动电平;输入模式含上拉/下拉/浮空/模拟,经施密特触发器整形。寄存器配置通过CRL/CRH设置引脚模式,BSRR/ODR控制输出状态。代码示例展示了LED控制(开漏输出)和按键检测(浮空输入),涉及HAL库函数如WritePin、ReadPin的底层寄存器操作原理。硬件消抖(电容)与软件消抖(延时检测)
2026-08-03 16:14:09
391
原创 C++模板
本文介绍了C++中泛型编程的实现方法,重点讲解了函数模板和类模板的使用。通过模板可以避免重复编写类型特定的代码,实现通用交换函数等功能。文章详细说明了模板的实例化过程、匹配原则及注意事项,特别指出类模板声明和定义不宜分离到不同文件中。此外,还介绍了非类型模板参数和模板特化技术,包括全特化和偏特化的具体实现方式,帮助开发者更灵活地处理特定类型的特殊情况。这些技术为C++泛型编程提供了强大支持。
2026-07-31 20:10:21
204
原创 C++基础-类和对象
本文介绍了C++编程基础的核心概念,包括:1. 第一个C++程序结构,对比了带/不带命名空间std的写法;2. 命名空间(namespace)的作用、定义规则及注意事项;3. C++输入输出流(cin/cout)和运算符重载(<< >>);4. 缺省函数(全缺省/半缺省)的定义规则和使用限制;5. 函数重载的条件和实现方式;6. 引用类型的特点、const引用及使用规范;7. 类与对象的基本概念,包括访问权限控制(private/public);8. 构造函数/析构函数、拷贝构造函数
2026-07-28 18:14:36
212
原创 STM32基础-前置知识
本文介绍了STM32微控制器的基本概念,重点解析了STM32F103ZET6芯片的命名规则(F代表基础型,103为增强型,Z表示144引脚等)。详细说明了芯片的144引脚分布、特殊引脚功能(VDD/VSS供电、NRST复位、VBAT备用电源、BOOT0启动模式选择)和普通GPIO引脚分组。同时介绍了开发工具链(Keil MDK+vscode+STM32CubeMX+HAL库)和DAPLink仿真器的连接方式(通过GND、CLK、DIO、RST四线实现程序烧录)。为后续STM32开发奠定了硬件认知和环境搭建基
2026-07-27 22:13:31
326
原创 Vue3+TypeScript+element-plus的文章管理项目(配后端接口)-退出及文章管理页面
本文介绍了Vue3+Pinia实现的文章管理系统核心功能模块。主要内容包括:1) 用户登出功能实现,通过Pinia封装deleteAction清除token并跳转登录页;2) 响应拦截器处理401未授权状态,自动触发登出;3) 文章管理模块实现,包含列表展示、分页、新增/编辑/删除/预览等功能;4) 使用Element Plus组件构建UI界面,包括表格、弹窗、表单等;5) 集成Vue Quill富文本编辑器实现文章内容编辑;6) 前后端API对接,包括文章CRUD接口调用。系统采用Composition
2026-07-23 11:58:19
82
原创 Vue3+TypeScript+element-plus的文章管理项目(配后端接口)-登录模块实现
本文介绍了基于Vue3+Element Plus实现的登录页面开发过程。主要内容包括:1)使用Element Plus组件构建登录表单,包含用户名/密码输入框和登录/取消按钮;2) 通过SCSS样式实现响应式布局和背景美化;3) 表单验证逻辑实现,包括长度校验和必填项检查;4) 前后端交互处理,通过axios封装API请求并添加请求拦截器自动携带token;5) 使用Pinia进行状态管理,实现token持久化存储;6) 路由守卫配置,设置白名单实现未登录跳转功能。整体实现了完整的登录业务流程和权限控制机制
2026-07-21 19:50:13
52
原创 Vue3+TypeScript+element-plus的文章管理项目(配后端接口)-基础模块搭建
本文介绍了从零开始搭建Vue3项目的基本流程。主要内容包括:1)使用npm create vue@latest初始化项目;2)创建项目目录结构(components、views、assets等);3)配置路由系统;4)引入Element Plus组件库并自定义主题;5)封装axios请求模块和token管理;6)设计路由结构(一级路由和二级路由)。文章提供了详细的代码示例和配置说明,帮助开发者快速搭建Vue3项目基础框架,为后续开发工作做好准备。项目代码已上传至码云平台。
2026-07-19 22:10:12
245
原创 Vue3基础
解构出来的对象是一个ref类型,但是这里的ref类型与上面的不同,这里的ref和定义中的变量有着访问器的功能,就是这里的ref改变,上面对象中的数据也要改变。setup是Vue3中一个新的配置项,它将一个功能中的数据,方法,计算属性等等,放在一起,不再像Vue2中,将它们分散开来。注意,在ts中操作数据需要x.value,但在模板中不需要,注意这里x不是响应式的,x.value是响应式的。Vue2中的配置可以访问setup的,setup的不能访问Vue2的,如果冲突,则以setup为准。
2026-07-06 13:55:54
247
原创 SpringBoot统一功能处理
摘要:本文介绍了Spring拦截器的实现方法,包括定义拦截器类(实现HandlerInterceptor接口)和配置拦截器(通过WebMvcConfigurer)。重点展示了登录拦截器的实现逻辑,包含preHandle、postHandle和afterCompletion三个关键方法。同时介绍了统一数据返回格式(通过ResponseBodyAdvice)和统一异常处理(使用@ControllerAdvice)的实现方案,特别说明了String类型的特殊处理原因。这些功能共同构成了Spring应用中请求处理、
2026-01-28 12:38:12
117
1
原创 Spring IoC&DI
摘要:Spring是一个IoC容器,通过控制反转将对象创建交由容器管理。主要功能包括:1)使用类注解(@Controller等)和方法注解(@Bean)存储对象;2)通过ApplicationContext获取Bean对象;3)支持多种依赖注入方式(@Autowired属性/构造/Setter注入)。解决同类型Bean冲突可使用@Primary或@Qualifier注解。默认扫描启动类同路径下的类,也可通过@ComponentScan指定扫描路径。
2026-01-08 11:41:31
397
原创 JAVAEE-Spring Web MVC
Spring Web MVC是一个基于MVC架构的Web框架,它将应用分为模型(Model)、视图(View)和控制器(Controller)三部分。通过@RestController和@RequestMapping注解实现URL路由映射,支持多种请求方式(GET/POST等)。主要功能包括:请求参数处理(单个参数、对象、数组、JSON等)、Cookie/Session管理、文件上传、响应返回等。@ResponseBody用于返回非视图数据,@Controller则用于返回视图。
2026-01-06 15:53:44
863
原创 JAVAEE-SpringBoot
Maven是一个自动化项目管理工具,通过pom.xml配置文件实现依赖管理和项目构建。它能自动下载所需jar包,支持依赖传递,提高开发效率。Maven仓库分为本地仓库和远程仓库(包括中央仓库和私服)。SpringBoot项目创建时可以选择版本和依赖,主要目录包括源代码、资源文件和测试代码。SpringBoot内置Tomcat服务器(默认8080端口),通过@RestController等注解快速开发Web应用。HTTP请求响应状态码中,200表示成功,4xx为客户端错误,5xx为服务端错误。
2026-01-05 13:33:35
426
原创 JAVAEE-前端三剑客
本文介绍了JavaEE中的Web开发基础,包括B/S架构与C/S架构的区别,重点讲解了B/S架构下的前端开发技术。内容涵盖HTML基本语法、常用标签(标题、段落、图片、超链接、表格、表单等),CSS样式表的三种引入方式和选择器使用,JavaScript变量定义、数据类型、函数及对象创建,以及jQuery框架的基础语法和常用事件。文章指出前端开发对后端开发人员而言只需达到能阅读代码的水平即可,最后作者透露自己因考研断更一年多。
2025-12-31 17:04:56
652
原创 UDP报文结构和注意事项
CRC算法 这个算法将每个字节的数据加起来进行比较,来判断数据是否正确。在发生bit反转后加和数据就会发生改变,从而判断数据是否正确。udp由报头和载荷组成,报头由四部分组成 源端口 目的端口 udp长度 检验和,每部分由两个字节组成。定长 不论数据多长,md5过后都是一个固定的长度 16/32/64版本。udp长度表示了该数据报的大小,一个udp数据报为64kb。分散 原始数据改变一点md5的值就会发生很大的改变。源端口和目的端口分别表示发送方和接收方的位置。检验和用来检验所得到的数据是否正确。
2024-02-13 23:25:16
943
2
原创 JAVAEE---多线程(进阶)
这也是它乐观锁的体现。乐观/悲观是在加锁前的预估,而轻量级/重量级是在加锁后对性能进行的评估。乐观锁:在加锁之前预估锁冲突发生的概率较小,在加锁的过程中所做的工作较少。悲观锁:在加锁前预估所冲突发生的概率大,所以在加锁过程中所做的工作较多。而我们所使用的synchronized加锁这是可自适锁,它可以自己判断来决定是乐观锁还是悲观锁。可重入:一把锁在一个线程里面进行了连续两次的加锁,可以加为可重入锁。它的原理其实就是解决了之前我们内存中的值和寄存器的值不同的问题。重量级锁:加锁开销大,加锁速度慢。
2023-12-11 08:30:00
227
原创 JAVAEE---synchronized
当有其他锁进行加锁,偏向锁就会立马加锁,变为轻量级锁,其他加锁就会等待。当一个线程对一个对象进行加锁,这个对象处于未加锁状态时,会进行一个标记并未真正加锁。当锁竞争加剧,轻量级锁占用的cpu就过高,就会升级为重量级锁。这里的等待策略就是挂起等待锁。编译器在进行优化时会把一些没有必要加锁但代码加了锁的地方删除。但是这里的优化是比较保守的。将细粒度的锁进行合并为一个粗粒度的锁,减少锁竞争带来的开销。synchronized的锁机制。轻量级锁/重量级锁可自适。自旋锁/挂起等待锁可自适。乐观锁/悲观锁可自适。
2023-12-08 13:29:03
200
原创 JAVAEE---多线程
这里主要的方法有newFixedThreadPool(int n)这个方法代表创建的线程数目是固定的。这里我们用一个优先级队列来存放我们要执行的任务,在构造方法中有一个线程来执行队列中的代码,而队列里面存放的元素包含两个内容,执行的内容和执行的时间。我们为了解决进程开销过大引入了轻量级进程,也就是线程,但是线程数目过多也会影响速度,所以我们又有两种解决方法。DiscardPolicy:丢弃新的线程(和第二个区别于这个新的线程不干),执行旧的线程。keepAliveTime:非必要线程最多空闲下来的时间。
2023-12-08 08:45:00
223
原创 JAVAEE---多线程
正常执行时1,2,3 没有问题,但编译器优化后可能就是1,3,2 这就有问题了。我们两个线程,一个执行到第3步,地址已经给了,但里面没有东西,全是0值,这时候另一个线程进去发现不为空,就直接返回了这个地址,但里面东西还等着初始化呀!其实我在解耦合那已经提过了,就是当我们引入一个阻塞队列/消息队列的时候就可以让b,c按照原来的速度进行运算,以为a的抗压能力要比b/c强很多的。两者都可按时间休眠。但一般情况下,wait等待时间是兜底的,一般到时间前唤醒,sleep一般会到等待时间,直接唤醒是不正常操作。
2023-12-03 09:00:00
154
1
原创 JAVAEE---多线程线程安全
上面这段代码可以正常打印出hello,按照我们前面所学,第一次加锁之后,第二次加锁应该有所冲突啊。在synchronized中,第一次加锁会记录线程和计数器为一,下次加锁会判断是否为一个线程。因为我们在循环中,不断地执行取fag和判断是否等于0的操作,jvm在优化过程中,进行了误判,后面的读取并不是读内存的fag而是寄存器/缓存中的fag。这个代码当我们输入非0的时候,按理说应该结束t1线程但实际并没有。volatile有俩个功能,保证内存可见性,禁止指令重排序。这个给也会成为死锁。1.一个线程,一把锁。
2023-11-29 17:01:09
159
1
原创 JAVAEE---多线程
add方法是对对象加锁,this代表引用add1是对类对象进行加锁,由于类对象只有一个也是成立的。addm是直接在非静态方法前面加synchronized,就是对add的一个替换,同样addm1是在静态方法前加synchronized是对add1的替换。我们对对象就进行了加锁,当t1已经加锁后,t2要想加锁就发生了锁竞争。为了解决这样的问题我们可以对count++进行打包,我们知道count++本质上应该是由三个指令完成,我们可以对其打包。这段代码执行结果就就是一个不确定的数,就存在线程安全问题。
2023-11-26 12:24:38
192
1
原创 JAVAEE---多线程
首先看一些我们将一个任务分成两个线程来执行,时间很明显有了缩短,但是发现答案不一样了,这里的原因就在于,线程安全问题,我们后面再来谈这个话题。原因很简单就是我们,在加的时候是多个指令完成的,所以存在t1取出的l,在他没有返回的时候,t2也取出来了,在放回的时候就存在问题。刚才我们执行的两次结果不同的代码就存在线程安全问题。第二个和第三个都是等待有期限,超过了这个时间我就不等了,两个就是精度存在差异。这里出现了是哪个join方法,第一个叫做死等,就是线程不结束我就一直等。BLOCKED 阻塞 锁竞争。
2023-11-25 20:34:56
164
原创 JAVAEE---多线程
我们上述是将isQuit放在成员变量中如果放在main方法中当临时变量肯定是不行的,因为lambda表达式,有一个变量捕获,要求是不变的,但我们需要改变所以不可以,但放在外面为什么可以,这就是内部类访问外部类了。start和run的区别:其实这两个是完全不相干的两个方法,start是创建新的线程分一条执行流来执行,而直接调run方法的话。还是在调用线程中执行。线程状态,emmm后面再说吧,反正他start调用前是一个状态,只有在那个状态下才可以start,start之后是另一个状态,那个状态就不能调用。
2023-11-25 18:38:06
229
9
原创 JAVAEE---多线程
因为当我们创建t线程的时侯,主线程继续向下执行,我们说这两个线程在一个进程中,但是创建线程虽然不要开辟空间,但是也不是完全没有消耗,他要建立自己的pcd。当我们运行代码的时候发现Thread和main同时打印,这就是两个线程并发执行,在上面的工具中我们也看到了main,Thread-0这俩个线程,其他一些线程都是自带的,用来完成内存回收啊,一些操作我们不用过多理解。第一个打印为false,但t已经实例过了,第二次为true因为线程没有结束,第三次为false但t仍然没有被释放,不过其线程已经结束。
2023-11-21 23:35:32
158
9
原创 JAVAEE---计算机是如何组成的
进程包含线程,每个线程是一条独立的执行流,可以单独对cpu进行调度所以状态,上下文,等都是每个线程由自己的一份。并发:其中包含并发和并行,并发是分时复用,描述一个核心上的变化,并行是多个核心同时执行,不过我们一般统称并发。你可能会发现自己的电脑,物理核心和逻辑核心不是二倍的关系,这是因为大小核技术,大核代表两个逻辑核心,小核就是一个。进程之间独立运行,互补干扰,但有时我们需要它们的数据进行交互,这就谈到了进程间通信,例如:文件,网络。首先指令是在内存中的,cpu从内存中不断获取指令,解析,执行。
2023-11-19 13:43:44
232
8
原创 MYSQL---基础篇
- (1)比较运算符 (2)BETWEEN ... AND ... (3)IN (4)IS NULL (5)LIKE (6)AND (7)OR。insert into 表(字段1, ..., 字段N) values。-- 如果存在 stu_test 表,则删除 stu_test 表。select 字段1 别名1, 字段2 别名2 from 表。select 字段1+100,字段2+字段3 from 表。select 字段1,字段2... from 表。5.删除表:-- 删除 stu_test 表。
2023-11-10 21:37:48
1230
15
原创 数据结构---HashMap和HashSet
set代表只存入一个key值,但在实际源码中,set的底层其实也是靠map来实现的。set只能存入数据一次,当第二次插入时,若哈希桶中存在元素则返回false。像这样,一个数组数组的每个节点带着一个链表,数据就存放在链表结点当中。哈希桶插入/删除/查找节点的时间复杂度是O(1)map代表存入一个key值,一个val值。map可多次存储,当第二次插入时,会更新val值。HashMap和HashSet都是存储在哈希桶之中,我们可以先了解一些哈希桶是什么。
2023-10-21 18:19:41
460
14
原创 数据结构---二叉树
设二叉树的根节点所在层数为1,层序遍历就是从所在二叉树的根节点出发,首先访问第一层的树根节点,然后从左到右访问第2层上的节点,接着是第三层的节点,以此类推,自上而下,自左至右逐层访问树的结点的过程就是层序遍历。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;
2023-10-14 15:58:08
391
17
原创 数据结构---栈和队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(FirstIn First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈。顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。
2023-09-23 15:57:39
497
16
原创 JAVASE---认识异常
2. Error:指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力乏术。Java 中虽然已经内置了丰富的异常类, 但是并不能完全表示实际开发中所遇到的一些异常,此时就需要维护符合我们实际情况的异常结构。异常的捕获,也就是异常的具体处理方式,主要有两种:异常声明throws 以及 try-catch捕获处理。java中不同类型的异常,都有与其对应的类来进行描述。
2023-09-20 18:57:29
378
18
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅