Java 异常处理全解析:从基础到自定义异常的实战指南
Java 异常处理全解析:从基础到自定义异常的实战指南
一、Java 异常体系:Error 与 Exception 的本质区别
1. 异常体系核心架构
Java把异常当作对象来处理,并定义一个基类java.lang.Throwable
作为所有异常的超类。
在Java API中已经定义了许多异常类,这些异常类分为两大类,错误Erro
r和异常Exception
。
Java 异常体系基于Throwable
类,分为两大分支:
Throwable
├─ Error(错误)
│ └─ 例:OutOfMemoryError、StackOverflowError
└─ Exception(异常)├─ Checked Exception(编译时异常)│ └─ 例:IOException、SQLException└─ Unchecked Exception(运行时异常)└─ 例:NullPointerException、ArrayIndexOutOfBoundsException
2.什么是异常以及异常的简单分类
- 异常指程序运行中出现的不期而至的各种状况,如:文件找不到、网络连接失败、非法参数等。
- 异常发生在程序运行期间,它影响了正常的程序执行流程。
要理解java异常处理是如何工作的,你需要掌握以下三种类型的异常Exception
:
- 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
- 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
- 错误
Error
: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。
3. Error vs Exception
Error和Exception的区别:Error通常是灾难性的致命的错误,是程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下是可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。
维度 | Error | Exception |
---|---|---|
本质 | JVM 底层错误,不可恢复 | 程序运行中的异常情况 |
处理方式 | 无法捕获,需重启 JVM | 可捕获处理或声明抛出 |
典型场景 | 内存溢出、类加载失败 | 空指针、数组越界、用户输入错误 |
4. Checked vs Unchecked 异常
-
Checked 异常:
- 必须显式处理(捕获或声明抛出)
- 示例:文件读取时的
FileNotFoundException
try {FileReader reader = new FileReader("file.txt"); } catch (FileNotFoundException e) {e.printStackTrace(); }
-
Unchecked 异常:
- 无需强制处理(运行时检查)
- 示例:参数校验失败的
IllegalArgumentException
public void checkAge(int age) {if (age < 0) {throw new IllegalArgumentException("年龄不能为负数");} }
二、异常处理核心机制:捕获与抛出
1. 异常捕获语法(try-catch-finally)
try {// 可能抛出异常的代码int result = 10 / 0; // 抛出ArithmeticException
} catch (ArithmeticException e) { // 捕获具体异常System.out.println("错误原因:" + e.getMessage()); // 输出:/ by zeroe.printStackTrace(); // 打印堆栈跟踪信息
} catch (Exception e) { // 父类异常捕获(需放在最后)// 通用异常处理
} finally {// 可选:无论是否异常都会执行(常用于资源释放)System.out.println("执行finally块");
}
2. 异常抛出关键字
throw(方法内抛出异常实例)
public static int divide(int a, int b) {if (b == 0) {throw new ArithmeticException("除数不能为0"); // 主动抛出异常}return a / b;
}
throws(方法声明抛出异常)
public static void readFile(String path) throws FileNotFoundException {FileReader reader = new FileReader(path); // 声明抛出Checked异常
}
3. 异常处理顺序原则
- 子类异常优先:具体异常(如
FileNotFoundException
)需写在父类异常(如IOException
)之前 - finally 的绝对性:即使 try 块中有
return
,finally 仍会执行(但返回值会被缓存)
4.本节狂神说笔记
package com.exception;public class Test {public static void main(String[] args) {int a = 10;int b = 0;//假设要捕获多个异常: 从小到大!try {//try监控区域System.out.println(a/b);} catch (Error e) {//catch(想要捕获的异常类型!)捕获异常System.out.println("Error");} catch (Exception e) {System.out.println("Exception");} catch (Throwable e) {System.out.println("Throwable");} finally {//处理善后工作System.out.println("finally");}finally 可以不要finally, 假设I0,资源,关闭!}public void a(){b();}public void b(){a();}
}
package com.exception;public class Test2 {public static void main(String[] args) {int a = 1;int b = 0;//Ctrl Alt + Ttry {System.out.println(a/b);} catch (Exception e) {e.printStackTrace();//打印错误的栈信息} finally {}}
}
package com.exception;public class Test1 {public static void main(String[] args) {try {new Test1().test(1,0);} catch (ArithmeticException e) {e.printStackTrace();}}//假设这个方法中,处理不了这个异常。方法上抛出异常public void test(int a,int b) throws ArithmeticException{if(b == 0){//throw throwsthrow new ArithmeticException();//主动的抛出异常,一般在方法中使用}}
}
三、自定义异常:打造业务专属错误体系
使用Java内置的异常类可以描述在编程时出现的大部分异常情况。除此之外,用户还可以自定义异常。用户自定义异常类,只需继承Exception类即可。
1. 自定义异常类步骤
- 创建自定义异常类。
- 在方法中通过throw关键字抛出异常对象。
- 如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。
- 在出现异常方法的调用者中捕获并处理异常。
步骤 1:继承 Exception 或 RuntimeException
// Checked异常(需显式处理)
public class UserAgeException extends Exception {public UserAgeException(String message) {super(message); // 调用父类构造器}
}// Unchecked异常(运行时异常)
public class InvalidInputException extends RuntimeException {public InvalidInputException(String message) {super(message);}
}
步骤 2:在业务逻辑中抛出
public void validateUser(int age) throws UserAgeException {if (age < 18) {throw new UserAgeException("用户年龄必须≥18岁"); // 抛出自定义Checked异常}
}
2. 异常处理最佳实践
(1)异常信息规范
- 包含足够上下文:
"用户ID为" + userId + "的账户不存在"
- 避免裸露捕获
Exception
:应捕获具体异常类型
(2)资源释放最佳实践
// JDK 7+ 自动资源管理(替代finally)
try (FileReader reader = new FileReader("file.txt")) {// 自动关闭资源(无需显式finally)
} catch (IOException e) {// 处理文件读取异常
}
(3)异常链使用
try {// 业务逻辑
} catch (ServiceException e) {throw new ControllerException("接口调用失败", e); // 包装异常链
}
3.实际应用中的经验总结
- 处理运行时异常时,采用逻辑去合理规避同时辅助 try-catch 处理
- 在多重catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
- 对于不确定的代码,也可以加上 try-catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单地调用 printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句块去释放占用的资源
四、常见异常处理错误与解决方案
1. 空指针异常(NPE)
错误示例:
String str = null;
int length = str.length(); // 抛出NullPointerException
解决方案:
if (str != null) {int length = str.length();
} else {throw new IllegalArgumentException("字符串不可为null");
}
2. 未处理 Checked 异常
错误示例:
public void readFile() {FileReader reader = new FileReader("file.txt"); // 编译错误:未处理IOException
}
解决方案:
// 方案1:捕获处理
try { /* ... */ } catch (IOException e) { /* ... */ }// 方案2:声明抛出
public void readFile() throws IOException { /* ... */ }
3. finally 中的 return 陷阱
错误示例:
public static int testFinally() {try {return 1;} finally {return 2; // 最终返回2,覆盖try中的return}
}
正确做法:
public static int testFinally() {int result = 1;try {return result;} finally {result = 2; // 不建议在finally中使用return}
}
五、高频面试题解析
1. Error 和 Exception 的根本区别?
- Error 是 JVM 内部错误(如内存溢出),无法通过代码处理,必须重启应用
- Exception 是程序运行中的异常,分为 Checked(编译时检查)和 Unchecked(运行时异常)
2. throw 和 throws 的区别?
关键字 | 作用 | 使用位置 | 参数类型 |
---|---|---|---|
throw | 抛出异常实例 | 方法体内部 | 异常对象 |
throws | 声明方法可能抛出的异常类型 | 方法签名 | 异常类列表 |
3. finally 块一定会执行吗?
- 正常情况下一定会执行(包括 return 前执行)
- 唯一例外:JVM 提前终止(如
System.exit(0)
)
4. 自定义异常应该继承哪个类?
- 业务需要编译时检查:继承
Exception
- 运行时异常(如参数校验失败):继承
RuntimeException
六、异常处理核心原则
- 具体捕获:优先捕获具体异常,避免使用宽泛的
Exception
- 快速失败:在方法入口校验参数,尽早抛出异常
- 信息完整:异常信息需包含定位问题的关键数据(如用户 ID、时间戳)
- 资源管理:使用
try-with-resources
自动释放 IO、数据库连接等资源
七、总结:构建健壮的异常处理体系
通过合理运用 Java 异常处理机制,开发者可以:
- 清晰区分系统错误与业务异常
- 通过捕获特定异常实现精准的错误处理
- 利用自定义异常提升业务代码的可读性
该继承哪个类?
- 业务需要编译时检查:继承
Exception
- 运行时异常(如参数校验失败):继承
RuntimeException
六、异常处理核心原则
- 具体捕获:优先捕获具体异常,避免使用宽泛的
Exception
- 快速失败:在方法入口校验参数,尽早抛出异常
- 信息完整:异常信息需包含定位问题的关键数据(如用户 ID、时间戳)
- 资源管理:使用
try-with-resources
自动释放 IO、数据库连接等资源
七、总结:构建健壮的异常处理体系
通过合理运用 Java 异常处理机制,开发者可以:
- 清晰区分系统错误与业务异常
- 通过捕获特定异常实现精准的错误处理
- 利用自定义异常提升业务代码的可读性
- 结合 finally 和 try-with-resources 确保资源安全释放
相关文章:
Java 异常处理全解析:从基础到自定义异常的实战指南
Java 异常处理全解析:从基础到自定义异常的实战指南 一、Java 异常体系:Error 与 Exception 的本质区别 1. 异常体系核心架构 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许…...
二、UI自动化测试02--元素定位方法
目录 一、定位⼀组元素⽅法二、XPath 定位⽅法1. 路径策略1.1 路径值获取⽅法 2. 利⽤元素属性策略利⽤元素属性策略的注意事项 3. 属性和逻辑结合4. 层级和属性结合策略5. XPath 延伸⽅法 三、CSS 定位⽅法1. CSS 策略: id选择器/class选择器/元素选择器/属性选择器2. 属性选择…...
第二章 信息技术发展(2.1 信息技术及其发展)
2.1 信息技术及其发展 2.1.1 计算机软硬件 计算机硬件 (Computer Hardware) 是指计算机系统中由电 、机械和光电元件等组成 的各 种物理装置的总称计算机软件 (Computer Software) 是指计算机系统中的程序及其文档,程序是计 算任务的处理对象和处理规则的描述;文档是为了便千…...
【SwitchyOmega安装教程】
目录 一、插件安装 1. 下载安装文件 2. 打开浏览器扩展安装页面 3. 安装插件 二、界面详情 三、配置信息 3.1 设置IP 1、查看IP地址信息 2、批量测试IP是否有效 3、点击扩展程序,选择 Proxy SwitchyOmega 4、 点击选项进行配置 5、配置页面 一、插件安装 1…...
驱动开发硬核特训 · Day 21(上篇加强版):深入理解子系统机制与实战初探
📅 日期:2025-04-27 📚 技术平台:嵌入式Jerry(B站) 1. 为什么要有子系统?(深度版) 在 Linux 内核发展早期,设备管理较为混乱,每种设备࿰…...
GoFly快速开发框架新增UI素材库-帮助开发者快速开发管理后台UI基于ArcoDesign框架开发
说明: 为开发者提供管理台的UI素材,社区将持续为开发开发后台系统常用UI界面,让开发时能有一半的界面可以直接从UI库获取,减少开发者自己排版界面的时间,帮助开发者快速开发后台业务。 使用的前端版本要求࿱…...
Unity-Shader详解-其二
前向渲染和延迟渲染 前向渲染和延迟渲染总的来说是我们的两种主要的渲染方式。 我们在Unity的Project Settings中的Graphic界面能够找到渲染队列的设定: 我们也可以在Main Camera这里进行设置: 那这里我们首先介绍一下两种渲染(Forward R…...
Windows 安装 Neo4j 教程
Windows 安装 Neo4j 教程 Neo4j 是一个开源的图数据库,它以图形结构存储数据,适合用于处理高度连接的数据,广泛应用于社交网络、推荐系统、欺诈检测等场景。本文将为你介绍如何在 Windows 系统上安装和配置 Neo4j 数据库。 一、安装前准备 …...
Neo4j 常用查询语句
Neo4j 常用查询语句 Neo4j 是一个图数据库,查询语言是 Cypher,它类似于 SQL 但针对图形数据进行了优化。Cypher 语法直观易懂,适合用来处理图数据。本文将介绍一些 Neo4j 中常用的查询语句,帮助你快速掌握图数据的操作方法。 一…...
机器学习(10)——神经网络
文章目录 1. 神经网络基本原理1.1. 什么是神经网络1.2. 核心思想 2. 基础组件3. 前向传播(Forward Propagation)4. 反向传播(Backpropagation)5. 激活函数对比6. 网络架构类型7. 优化策略8. Python示例(PyTorch&#x…...
Qt软件开发-摄像头检测使用软件V1.1
系列文章目录 Qt软件开发-摄像头检测使用软件V1.1 文章目录 系列文章目录前言一、V1.1增加了哪些功能?二、代码构成1.总体结构2. 代码内容 三、效果展示图总结 前言 之前,在Qt软件开发-摄像头检测使用软件:https://blog.csdn.net/xuming204…...
AI日报 - 2025年04月26日
🌟 今日概览(60秒速览) ▎🤖 模型竞赛 | OpenAI与Google新模型在Arena榜单激烈角逐,性能指标各有千秋。 OpenAI发布o3/o4-mini等新模型,Gemini 2.5 Pro紧随其后,数学、编程能力成焦点。 ▎💼 商业动向 | 并…...
ES6 Map/WeakMap/Set/WeakSet 全解指南
一、设计思想与核心概念 1. 解决传统结构的痛点 Object:键只能是字符串/Symbol、无序、无size属性Array:查找效率低(O(n))、无自动去重机制核心突破:// 传统方式 vs ES6方式 const obj { [{}]: value }; // 键会被转为"[object Obje…...
【Python】使用uv管理python虚拟环境
本文介绍了python虚拟环境管理工具uv,包括uv的作用、uv的常用命令等等。 参考:UV - 管理Python 版本、环境、第三方包 1. 介绍uv 官网:https://docs.astral.sh/uv/ uv是一个python虚拟环境管理工具,可以用来替代pip、pyenv、vir…...
求解,如何控制三相无刷电机?欢迎到访评论
问题:通过一个集成的TF2104芯片控制H桥上桥臂和下桥臂,如何控制?还是说得需要PWM_UH和PWM_UL分开控制?...
002 六自由度舵机机械臂——姿态解算理论
00 DH模型的核心概念 【全程干货【六轴机械臂正逆解计算及仿真示例】】 如何实现机械臂的逆解计算-机器谱-robotway DH模型是机器人运动学建模的基础方法,通过四个参数描述相邻关节坐标系之间的变换关系。其核心思想是将复杂的空间位姿转换分解为绕轴旋转…...
部署大模型需要多少GPU显存?以DeepSeek R1部署为例
引言 部署大型语言模型(LLM)时究竟需要多少GPU显存?本文将进行一次简单测算。 如何计算 算法1 可以用一个简单的公式来计算显存占用(单位GB): 参数说明如下: 符号 含义 M 所需的 GPU 显存…...
C++?类和对象(下)!!!
一、前言 在之前我们已经讨论过了有关类和对象的前置知识以及类中的六大默认成员函数,在本期我们继续再讨论类和对象中剩余的友元、初始化列表等相关知识,如果需要再了解之前的知识的话,链接奉上:C?类和对象࿰…...
function,bind,lambda的用法
C中的std::function、std::bind与Lambda表达式详解 一、std::function std::function是C11标准引入的类模板,用于封装任意类型的可调用对象,例如函数指针、Lambda表达式、函数对象等。通过std::function可以实现不同形式可调用对象的统一存储与调用…...
Maven的聚合工程与继承
目录 一、为什么需要使用Maven工程 二、聚合工程的结构 三、聚合工程实现步骤 四、父工程统一管理版本 五、编译打包 大家好,我是jstart千语。想着平时开发项目似乎都是用maven来管理的,并且大多都是聚合工程。而且在maven的聚合工程中,…...
C/C++对时间的处理
1. 两种数据结构 time_t 是一个在C和C++编程语言中用于表示时间的类型。time_t类型通常是一个长整型(long int)或整数类型,用于表示从特定参考点(通常是1970年1月1日00:00:00 UTC)经过的秒数。 time_t定义在<ctime>头文件中,通常用于记录时间戳,比如获取当前时间…...
Spring Boot 支持政策
🧑💻 Spring Boot 支持政策 ✒️ Andy Wilkinson 于2023年12月7日编辑本页 32次修订 📌 核心政策 🛡️ VMware Tanzu 开源支持政策 Spring Boot 针对关键错误和安全问题提供支持 📆 版本支持周期 1️⃣ 主要版本&a…...
实验四 进程调度实验
一、实验目的 1、了解操作系统CPU管理的主要内容。 2、加深理解操作系统管理控制进程的数据结构--PCB。 3、掌握几种常见的CPU调度算法(FCFS、SJF、HRRF、RR)的基本思想和实现过程。 4、用C语言模拟实现CPU调度算法。 5、掌握CPU调度算法性能评价指…...
静态多态和动态多态的区别
C多态机制深度解析 多态是面向对象编程的核心特性,允许通过统一接口执行不同实现。在C中,多态表现为基类指针或引用调用虚函数时,根据实际对象类型执行对应派生类的函数逻辑。 基础实现示例 定义基类与派生类,演示动态绑定…...
现代化Android开发:Compose提示信息的最佳封装方案
在 Android 开发中,良好的用户反馈机制至关重要。Jetpack Compose 提供了现代化的 UI 构建方式,但提示信息(Toast/Snackbar)的管理往往显得分散。本文将介绍如何优雅地封装提示信息,提升代码可维护性。 一、基础封装方案 1. 简单 Snackbar …...
Android学习总结之Retrofit篇
1. 注解原理概述 在 Java 里,注解是一种元数据,它为代码提供额外信息但不影响程序的实际逻辑。注解可以在类、方法、字段等元素上使用,并且能在编译时、运行时通过反射机制被读取。Retrofit 充分利用了 Java 注解机制,通过自定义…...
Python 第 12、13 节课 - 元组和列表
- 第 94 篇 - Date: 2025 - 04 - 26 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 Python 第 12、13 节课 - 元组和列表 上课时间: 2025-04-21(12) 2025-04-24(13) 文章目录 Python 第 12、13 节课 - 元组和列表一 元组1 元组的…...
新特性版本升级指引
✨ 升级到新特性版本时的配置迁移 1️⃣ 🔧 配置迁移工具说明 当您将应用升级到新特性版本时,可能需要处理部分配置属性的重命名或移除问题。 2️⃣ 🚀 启用方法 Spring Boot 提供了环境分析工具: 应用启动时打印诊断信息运行时…...
6.1 客户服务:智能客服与自动化支持系统的构建
随着企业数字化转型的加速,客户服务作为企业与用户交互的核心环节,正经历从传统人工服务向智能化、自动化服务的深刻变革。基于大语言模型(LLM)和智能代理(Agent)的技术为构建智能客服与自动化支持系统提供…...
从新手到高手:小程序开发进阶技巧分享
小程序开发从入门到精通需要经历技术积累、架构优化和工程化实践等多个阶段。以下是结合真实项目经验的进阶路线与核心技术要点,涵盖性能优化、架构设计、跨平台开发等关键领域: 一、性能调优实战技巧 1. 首屏渲染加速方案 // 预请求关键数据ÿ…...
S参数的含义
S参数的含义: 在低速设计时代,工程界普遍使用等效集总电路模型来描述互连通道的过孔、连接器等各部分。对于上升时间达到几个ns的低速数字信号,甚至可以使用一个0Ω电阻代替连接器,分析的结果也不会和实际情况有太大的差别。但是当…...
职场十二法则-马方
马方老师的《职场十二法则》,献给初入职场工作中迷茫的自己。 1.挣钱是能力的副产品,能力比挣钱重要,让自己值钱比有钱更重要。成长比赚钱重要,年轻时把成长放第一位,挣钱放第二位,通过提升能力实现长期收益。 2.成长…...
安装docker,在docker上安装mysql,docker上安装nginx
目录 一.安装docker 1.1查看Linux版本的命令这里推荐两种: 1.2查看内核版本有三种方式: 2.安装 2.1 如果之前安装了docker,先删除旧版本的doker 2.2 安装需要的软件包,yum-util提供yum-config-manager功能,另外两…...
Java基础第五章、面向对象程序设计
1.package包 如果引入的不同包里面有相同的类名时,需要对要使用的类进行完整的限定名指定。 2.访问修饰符 子类对父类的方法重写也遵循上面的原则 一个java文件中最多只能有一个public(和文件同名)的类。 3.初始化块 //Driver.java public class Driver {private lo…...
RD电子实验记录本选用贴士A-B-C
传统的实验记录本,令人又爱又恨本 如何挑选电子实验室记录本(ELN)的品牌/服务商/供应商? 电子实验记录本,又名为ELN,Electronic lab notebook,enotebook,研发电子管理系统…...
Python 第 11 节课 - string 与 random 的方法
- 第 93 篇 - Date: 2025 - 04 - 26 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 Python 第 11 节课 - string 与 random 的方法 上课时间: 2025-04-14 文章目录 Python 第 11 节课 - string 与 random 的方法一 string 的方法1 s.split()2 s.find()3 s.replace()4 s.strip…...
proxychains4系统代理for linux(加速国内github下载速度,pip安装)
1.proxychains4代理安装: sudo apt-get install proxychains42.找到配置文件/etc/proxychains4.conf在[ProxyList]后面添加以下内容: socks5 127.0.0.1 10808 配置如下: 3.使用proxychains4(git clone): proxychains4 git c…...
LLM基础之源码一
transformers 核心源码梳理 Trainer部分: __init__() 初始化函数: def __init__(xxx):if args is None:output_dir "tmp_trainer"args TrainingArguments(output_diroutput_dir) self.args argsself.compute_loss_func compute_loss_fun…...
蛮荒tv桌面永不升级版app下载-蛮荒桌面安卓电视版下载
蛮荒桌面是一款具有丰富桌面内容的生活应用软件,可以连接电视上使用,用户将需要的软件添加到桌面上,系统就会自动分类管理软件,小编今天为大家推荐一款功能更大强大的电视桌面应用——乐看家桌面。 乐看家桌面功能亮点: 1.官网下载刷入机顶盒…...
2025蓝桥省赛c++B组第二场题解
前言 这场的题目非常的简单啊,至于为什么有第二场,因为当时河北正在刮大风被迫停止了QwQ,个人感觉是历年来最简单的一场,如果有什么不足之处,还望补充。 试题 A: 密密摆放 【问题描述】 小蓝有一个大箱子࿰…...
c#简易超市充值卡程序充值消费查余额
开发背景 本软件是给克什克腾旗某公司开发的一个简易的超市充值卡程序 # 功能 1、充值卡的充值、消费、查询余额 github下载:https://github.com/oyangxizhe/cash.git...
使用FME生成Delaunay三角形
目录 背景与应用场景 前置条件与数据准备 操作流程详解 3.1 点要素矢量化3.2 设置坐标系3.3 生成Delaunay三角形...
三款实用工具推荐:图片无损放大+音乐格式转换+音视频格式转换!
在这个数字化时代,总有些工具能让人眼前一亮。今天李师傅大家精选三款实用工具,从图片优化到格式转换,解决日常创作中的痛点,让数字生活更得心应手。 在这个数字化时代,总有些工具能让人眼前一亮。今天为大家精选三款…...
文本预处理(NLTK)
1. 自然语言处理基础概念 1.1 什么是自然语言处理 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于…...
泰迪杯实战案例学习资料:生产线的故障自动识别和人员配置优化
(西南石油大学,第十二届泰迪杯特等奖案例) (深度扩展版) 一、案例背景与目标 1.1 问题背景 在制造业中,生产线设备故障可能导致以下问题: 停机损失:每小时停机成本可达数万元(视行业而定)。 资源浪费:人工排班不合理导致高技能员工闲置或低效分配。 安全隐患:未及…...
dijkstra
open_set是当前正在计算的节点; 每次从当前open_set集合中找出cost最小的节点进行计算更新:从open_set中去除该节点,保存到close_set中; 运动更新可以根据运动模型选择合适的节点运动方式; 【代价的计算方式是&…...
【SSH 端口转发】通过SSH端口转发实现访问远程服务器的 tensorboard
SSH 连接远程服务器时的命令: ssh -L 8001:localhost:8001 usrnameserverip-L: 这是指定进行本地端口转发的选项。也就是说,要将本地机器的一个端口通过 SSH 隧道转发到远程服务器上的某个服务。 8001:localhost:8001: 第一个 80…...
w308汽车销售系统的设计与实现
🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…...
Spring 学习笔记之 @Transactional 异常不回滚汇总
使用springboot时,只要引入spring-jdbc/jpa相关的依赖后,在想要启用事务的方法上加上Transactional注解就能开启事务,碰到异常就能自动回滚。大大的提高了编码的便捷性性,同时也不侵入代码,保持了代码的简洁性。 默认情…...
Java 自定义TCP协议:【特点编码字符串<=>字节<=>特点编码16进制】16进制字符串和编码的转换 (各种编码通过字节向16进制的互转)| XOR计算
文章目录 引言I 各种编码通过字节向16进制的互转。字符串<=>字节<=>16进制 | Java验证微信小程序 JavaScript字符串转gb2312 字符编码,以16进制字符串传输。(接收蓝牙设备的信息,发送北斗终端消息)II xor校验码Java实现验证C# 实现引言 为了避免中文在传输过程…...