【Java笔记】第十四章:异常
一、概念【理解即可】
1. 异常:程序运行过程中,出现的非正常情况。
2. 异常的处理:当异常出现时,执行一段预先准备好的代码。
3. 异常的处理的必要性:减少用户的损失、同时减小给用户带来麻烦,也可以对用户做一些提示信息。
二、异常的分类 【面试重点】
1. Throwable:
Java语言中所有错误或是异常的父类,位于java.lang包中
(1) String getMessage():获取字符串类型异常信息。//用于给用户展示提示信息
(2) void printStackTrace():打印输出方法调用过程中产生详细异常信息。//编程人员用于调试程序
2. 子类Error:是Throwable的子类,代表错误
注意:Error代表仅靠程序本身无法恢复的严重的错误,例如JVM内存不足,或是方法调用过程中栈溢出等。
例如:java.lang.StackOverflowError(递归导致的栈溢出)
3. 子类Exception:是Throwable的子类,代表异常
(1) RuntimeException:运行时异常、未检查异常,与RuntimeException有直接或是间接继承关系的异常类
a. 特点:编译器不会检测此类异常,运行的时候报错。
b. 处理:可处理,可不处理(严谨代码),此类异常可以避免。
c. 常见的运行时异常:
① java.lang.ArrayIndexOutOfBoundsException:下标越界
② java.lang.NullPointerException:空指针异常
③ java.lang.ClassCastException:类型转换异常
④ java.lang.NumberFormatException:数字格式转换异常
(2) 非RuntimeException:非运行时异常、已检查异常,与RuntimeException没有任何的继承关系的异常类
a. 特点:编译器检测此类异常,编译的时候报的错误。
b. 处理:此类异常必须处理。
c. 案例:Class.forName("day1.TestStudent"); // 非运行时异常, 区分于语法错误
三、异常的产生
1. 自动产生异常:
(1) 产生原因:程序在运行过程中,遇到错误的代码,自动产生异常
(2) 结果:程序中一旦遇到异常,则被终止,不能继续执行异常之后的代码。
2. 手动产生异常【开发重点】
(1) 关键字:throw
(2) 语法:throw new 异常类类名("异常信息");
(3) 位置:必须定义在方法内部
(4) 结果:相当于 return ; 终止、结束当前程序,程序会因异常而被终止。
四、异常的传递【理解即可】
1. Java中的异常沿着方法的调用链进行反方向传递,最终传递给JVM,程序因被终止。
五、异常的处理【开发重点】
1. 消极处理异常(声明异常)
(1) 关键字:throws
(2) 位置:在方法声明的位置,进行消极处理异常
(3) 语法:修饰符 返回值类型 方法名(形参列表)throws 异常类名1,异常类名2,异常类名3{}
(4) 结果:消极处理异常只是推卸责任,程序还是会因异常而被终止。
(5) 作用:消极处理异常可以让非运行时异常在编译阶段通过。
(6) 注意:消极处理异常时可以 利用父类型处理其子类型的异常。
2. 积极处理异常(捕获异常)
(1) 语法:
try{
// 可能出现异常的语句
}catch(异常类名 e){
// 异常出现时需要执行的语句
}
(2) 注意:
a. try后面可以定义多个 catch结构,一旦try出现异常,则从第一个catch,从上往下依次进行匹配。
b. catch可以利用父类型处理本类型+所有子类型的异常,多态技术的应用。
c. 定义子类的catch需要 写在 定义其父类型的catch结构前面
d. catch中只能捕获try可能出现的非运行时异常;但是catch中可以处理任意运行时异常,不管try中有没
有可能出现此类异常
(3) finally 的应用:
a. 语法:
try{
//可能出现异常的语句
}catch(异常类名 e){
// 异常出现时,执行的语句
}finally{
// 不管有没有异常,都必须执行的语句
}
b. finally的应用:开发时不建议将 return 语句定义在finally中,通常finally中用于关闭资源。
c. 常见的结构:
try{}catch(){}
try{}catch(){}catch(){}
try{}catch(){}finally{}
try{}catch(){}catch(){}finally{}
try{}finally{} // 只是为了一些语句被执行
try{ try{}catch(){} }catch(){}
try{}catch(){ try{}catch(){} }
try{}catch(){}finally{ try{}catch(){} }
注意:try后面可以跟多个 catch,但是最多只能有一个finally
try后面至少有一个catch或是finally
六、自定义异常
1. 类继承Exception 或是其子类,如果类继承了RuntimeException或是RuntimeException的子类,则抛出的异常为运行时异常
2. 提供两个构造方法:
(1) 一个无参数的构造方法
(2) 带有String类型参数的构造方法,借助super()为父类Throwable异常信息属性赋值
public 类名(String message){
super(message);
}
七、方法覆盖【终结版】【面试+开发重点】
1. 子类的方法名、形参列表、返回值类型和父类相同
2. 子类的方法的访问修饰符和父类相同或是更宽
3. 子类不能抛出比父类更多、更宽的异常
相关文章:
【Java笔记】第十四章:异常
一、概念【理解即可】 1. 异常:程序运行过程中,出现的非正常情况。 2. 异常的处理:当异常出现时,执行一段预先准备好的代码。 3. 异常的处理的必要性:减少用户的损失、同时减小给用户带来麻烦,也可以对用…...
Python游戏开发超详细(基础理论知识篇)
一、引导: Python游戏开发是一个非常有趣且富有挑战性的领域。通过Python,你可以利用其强大的库和框架来创建各种类型的游戏,从简单的2D游戏到复杂的3D游戏。以下是第一课的基础理论知识,帮助你入门Python游戏开发。 二、理论知识…...
Python开发日记 -- 实现bin文件的签名
目录 1.数据的不同表现形式签名值不一样? 2.Binascii模块简介 3.问题定位 4.问题总结 1.数据的不同表现形式签名值不一样? Happy Muscle试运行了一段时间,组内同事再一次提出了新的需求:需要对bin文件签名。 PS:服…...
微软运用欺骗性策略大规模打击网络钓鱼活动
微软正在利用欺骗性策略来打击网络钓鱼行为者,方法是通过访问 Azure 生成外形逼真的蜜罐租户,引诱网络犯罪分子进入以收集有关他们的情报。 利用收集到的数据,微软可以绘制恶意基础设施地图,深入了解复杂的网络钓鱼操作ÿ…...
小程序无法获取头像昵称以及手机号码的深度剖析与解决方案
在当今数字化时代,小程序以其便捷、高效的特点,成为了人们生活和工作中不可或缺的一部分。然而,有时候开发者会遇到小程序无法获取头像昵称以及手机号码的问题,这给用户体验和业务流程带来了极大的困扰。本文将深入探讨这个问题的原因,并提供相应的解决方案。 一、引言 小…...
从0到1,搭建vue3项目
一 Vite创建Vue3项目 1.1.创建Vue3项目 1.1.1.运行创建项目命令 # 使用 npm npm create vitelatest 1.1.2、填写项目名称 1.1.3、选择前端框架 1.1.4、选择语法类型 1.1.5、按提示运行代码 1.1.6浏览器问 localhost:5173 预览 1.2项目结构 1.2.1vite.config.ts 1.2.2 pac…...
Mybatis mapper文件 resultType和resultMap的区别
在 MyBatis 中,resultType 和 resultMap 都用于定义从数据库查询结果到 Java 对象的映射规则,但它们之间存在着一些关键的区别。以下是对这两者的详细说明和区别: 1. resultType 定义 resultType 是 MyBatis 查询语句中的一个属性…...
文件下载漏洞
文件安全 文件下载 常见敏感信息路径 Windows C:\boot.ini //查看系统版本 C:\Windows\System32\inetsrv\MetaBase.xml //IIS配置文件 C:\Windows\repair\sam //存储系统初次安装的密码 C:\Program Files\mysql\my.ini //Mysql配置 C:\Program Files\mysql\data\mysql\user.…...
【Flutter】状态管理:Provider状态管理
在 Flutter 开发中,状态管理是一个至关重要的部分。随着应用的规模和复杂性增加,简单的局部状态管理(如 setState() 和 InheritedWidget)可能变得难以维护和扩展。Provider 是一种推荐的、广泛使用的 Flutter 状态管理工具&#x…...
来个Oracle一键检查
启停、切换、升级、网络改造等场景下,需要对数据库有些基本检查操作,确认当前是否运行正常,主打一个简单和一键搞定。 #!/bin/bash## 实例个数 告警日志 实例状态 会话 活动会话 锁 集群状态 服务状态 磁盘空间 侦听日志 ## linux vmstat 2 …...
C语言中的分支与循环(中 1)
关系操作符 C语言用于比较的表达式,称为"关系表达式",里面使用的运算符称为关系运算符,关系运算符主要有以下6类。 > 大于运算符< 小于运算符>大于等于运算符< 小于等于运算符 相等运算符! 不相等运算符 下面是例子:…...
Git_GitLab
Git_GitLab 安装 服务器准备 安装包准备 编写安装脚本 初始化 GitLab 服务 启动 GitLab 服务 浏览器访问 GitLab GitLab 创建远程库 IDEA 集成 GitLab 安装 GitLab 插件 设置 GitLab 插件 安装 服务器准备 准备一个系统为 CentOS7 以上版本的服务器,使…...
如何自定义一个自己的 Spring Boot Starter 组件(从入门到实践)
文章目录 一、什么是 Spring Boot Starter?二、为什么要自定义 Starter?三、自定义 Starter 的基本步骤1. 创建 Maven 项目2. 配置 pom.xml3. 创建自动配置类4. 创建业务逻辑类5. 创建 spring.factories 四、使用自定义 Starter五、总结推荐阅读文章 在使…...
CSS伪元素以及伪类和CSS特性
伪元素:可以理解为假标签。 有2个伪元素 (1)::before (2)::after ::before <!DOCTYPE html> <html> <head><title></title><style type"text/css">body::before{con…...
【论文笔记】Instantaneous Perception of Moving Objects in 3D
原文链接:https://arxiv.org/abs/2405.02781 简介:本文主张自动驾驶中细微运动的瞬时检测和量化与一般的大型运动同等重要。具体来说,由于激光雷达点云缺乏帧间对应关系,静态物体可能看起来在运动(称为游泳效应&#x…...
Segugio:一款针对恶意软件的进程执行跟踪与安全分析工具
关于Segugio Segugio是一款功能强大的恶意软件安全分析工具,该工具允许我们轻松分析恶意软件执行的关键步骤,并对其进行跟踪分析和安全审计。 Segugio允许执行和跟踪恶意软件感染过程中的关键步骤,其中包括从点击第一阶段到提取恶意软件的最…...
互联网系统的微观与宏观架构
互联网系统的架构设计,通常会根据项目的体量、业务场景以及技术需求被划分为微观架构(Micro-Architecture)和宏观架构(Macro-Architecture)。这两者的概念与职责既独立又相互关联。本文将通过一些系统案例,…...
数据库、数据仓库、数据湖和数据中台有什么区别
很多企业在面对数据存储和管理时不知道如何选择合适的方式,数据库、数据仓库、数据湖和数据中台,这些方式都是什么?有什么样的区别?企业根据其业务类型该选择哪一种?本文就针对这些问题,来探讨下这些方式都…...
vscode配色主题与图标库推荐
vscode配色主题推荐:Andromedavsocde图标库: vscode-icons Andromeda Dark theme with a taste of the universe 仙女座:一套宇宙深空体验的哑暗色主题; 高对比度,色彩饱和; Easy Installation Open the extensions sidebar on Visual Studio CodeSear…...
深度学习模型入门教程:从基础到应用
深度学习模型入门教程:从基础到应用 前言 在人工智能的浪潮中,深度学习作为一种强大的技术,正在各行各业中发挥着越来越重要的作用。从图像识别到自然语言处理,深度学习正在改变我们的生活和工作方式。本文将带您深入了解深度学…...
基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
