(每日持续更新)jdk api之NotActiveException基础、应用、实战

news/2024/3/3 17:32:37

博主18年的互联网软件开发经验,从一名程序员小白逐步成为了一名架构师,我想通过平台将经验分享给大家,因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验,晚上进行用心精简、整理、总结、定稿,每天都会整理到12点,为了就是能让大家能够真正了解该技术栈的真正原理,最终从程序员成为一名真正的架构师,写的不一定是全站做好的,但是是全站最用心的~。

以后我会推出一些列的文章,每天都会更新,每天进步一点点,发布顺序【java的api基础、应用、实战】->【java开源技术栈及源码分析】->【java开源技术栈整合】->【java低代码开发平台的建设】

关注【架构师成长之道】 输入“架构师视频课程”,即可免费获得全套架构师全套课程

一、java.io

1.37 NotActiveException

NotActiveException 是 Java 中的异常类,它继承自 ObjectStreamException。通常,NotActiveException 表示对象没有处于预期的活动状态,例如,在尝试访问不处于活动状态的对象时抛出此异常。

以下是 NotActiveException 的基本介绍:

NotActiveException 介绍:
所有字段:
  • private static final long serialVersionUID:序列化版本 ID。

构造方法:
  • NotActiveException(String reason) 使用指定的详细消息构造一个 NotActiveException 对象。

方法摘要:
  • 无特定的方法,继承自父类。

简单使用例子:

以下是一个简单的例子,演示了 NotActiveException 的使用。请注意,这是一个简单的演示,并不是在实际项目中常见的使用方式:

javaCopy code
import java.io.*;
​
public class NotActiveExceptionExample {
​public static void main(String[] args) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("data.bin"))) {
​// 尝试在非活动状态下写入对象,抛出 NotActiveExceptionMyObject myObject = new MyObject("Example");outputStream.writeObject(myObject);
​} catch (IOException e) {if (e instanceof NotActiveException) {System.err.println("NotActiveException: Object is not in an active state.");} else {e.printStackTrace();}}}
​static class MyObject implements Serializable {private String name;
​public MyObject(String name) {this.name = name;}}
}

在这个例子中,我们创建了一个 ObjectOutputStream,然后尝试将一个非活动状态的对象写入文件。由于对象不是在活动状态下,所以抛出了 NotActiveException。在实际项目中,你通常不会直接处理 NotActiveException,而是通过检查对象的状态来预防它的发生。

应用场景

NotActiveException 的使用相对较少,因为它通常是由于序列化或反序列化过程中的一些错误或状态问题引起的。以下是一些可能的应用场景及相应的代码实现:

应用场景 1: 对象序列化时发生 NotActiveException
javaCopy code
import java.io.*;
​
public class NotActiveExceptionExample {
​public static void main(String[] args) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream("data.bin"))) {
​// 尝试在非活动状态下写入对象,抛出 NotActiveExceptionMyObject myObject = new MyObject("Example");outputStream.writeObject(myObject);
​} catch (IOException e) {if (e instanceof NotActiveException) {System.err.println("NotActiveException: Object is not in an active state.");} else {e.printStackTrace();}}}
​static class MyObject implements Serializable {private String name;
​public MyObject(String name) {this.name = name;}}
}

在这个例子中,我们创建了一个 ObjectOutputStream,然后尝试将一个非活动状态的对象写入文件。由于对象不是在活动状态下,所以抛出了 NotActiveException

应用场景 2: 处理反序列化时的 NotActiveException
javaCopy code
import java.io.*;
​
public class NotActiveExceptionDeserializationExample {
​public static void main(String[] args) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream("data.bin"))) {
​// 尝试反序列化对象,处理可能的 NotActiveExceptiontry {Object object = inputStream.readObject();if (object instanceof MyObject) {System.out.println("Deserialization successful: " + ((MyObject) object).getName());}} catch (ClassNotFoundException | NotActiveException e) {if (e instanceof NotActiveException) {System.err.println("NotActiveException: Object is not in an active state during deserialization.");} else {e.printStackTrace();}}
​} catch (IOException e) {e.printStackTrace();}}
​static class MyObject implements Serializable {private String name;
​public MyObject(String name) {this.name = name;}
​public String getName() {return name;}}
}

在这个例子中,我们创建了一个 ObjectInputStream,然后尝试反序列化一个对象。如果在反序列化过程中对象处于非活动状态,会抛出 NotActiveException,我们在代码中捕获并处理这个异常。

请注意,实际项目中对 NotActiveException 的处理通常是在更高级别的逻辑中,而不是在直接的序列化或反序列化代码中。

实战例子

在实际项目中,直接使用 NotActiveException 的场景相对较少。然而,你可能会在某些涉及对象序列化和反序列化的场景中遇到这个异常。以下是一个简化的实战例子,演示了在项目中可能会遇到 NotActiveException 的情况:

项目实战例子:使用对象序列化保存和加载数据

假设你有一个包含学生信息的 Student 类,你希望将学生对象保存到文件并从文件加载。在保存和加载过程中,可能会遇到 NotActiveException,因此你需要处理这种情况。

javaCopy code
import java.io.*;
​
public class SerializationProjectExample {
​public static void main(String[] args) {String fileName = "students.ser";
​// 模拟保存学生信息到文件saveStudentsToFile(fileName);
​// 模拟从文件加载学生信息loadStudentsFromFile(fileName);}
​private static void saveStudentsToFile(String fileName) {try (ObjectOutputStream outputStream = new ObjectOutputStream(new FileOutputStream(fileName))) {Student student1 = new Student("John", 20);Student student2 = new Student("Alice", 22);
​outputStream.writeObject(student1);outputStream.writeObject(student2);
​System.out.println("Students saved to file successfully.");} catch (IOException e) {e.printStackTrace();}}
​private static void loadStudentsFromFile(String fileName) {try (ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(fileName))) {try {while (true) {Student student = (Student) inputStream.readObject();System.out.println("Loaded student: " + student);}} catch (ClassNotFoundException | NotActiveException e) {if (e instanceof NotActiveException) {System.err.println("NotActiveException: Object is not in an active state during deserialization.");} else {e.printStackTrace();}}} catch (IOException e) {if (e instanceof EOFException) {System.out.println("End of file reached.");} else {e.printStackTrace();}}}
​static class Student implements Serializable {private String name;private int age;
​public Student(String name, int age) {this.name = name;this.age = age;}
​@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}}
}

在这个例子中,SerializationProjectExample 类包含了两个方法:saveStudentsToFileloadStudentsFromFileStudent 类是一个简单的包含学生信息的可序列化类。在保存学生信息到文件时,我们使用 ObjectOutputStream,而在加载学生信息时,我们使用 ObjectInputStream。在加载学生信息的过程中,由于文件可能包含不同的对象,我们在捕获 NotActiveException 异常时输出相应的错误信息。

请注意,这个例子是为了演示 NotActiveException 而设计的,实际项目中可能需要更复杂的逻辑和更严密的异常处理。


http://www.ppmy.cn/news/1340060.html

相关文章

【Midjourney】新手指南:命令

1./ask 向Midjourney提问,不过问题和回答都是英文的,例如: 2./blend 将两张图片合并为一张 ​ 3./describe 上传一张图片,Midjourney会生成四组该图片相关的关键词,可以使用这些关键词再生成图片。 ​ 4./turbo …

微分几何——梅向明第四版学习笔记(一) 向量函数和曲线论

目录 引出向量函数曲线论简单曲线定义曲线的向量参数表示 曲线的切线【重要】曲线的法面【重要】曲线的自然参数表示 空间曲线曲线的密切平面空间曲线的基本三棱形【重要】单位切向量主法向量副法向量Frenet标架螺旋线的案例 曲线的曲率和曲率半径曲率的几何意义 曲线的挠率挠率…

以“美”为鉴,探寻香港比特币现货ETF的未来发展

出品|欧科云链研究院 作者|Hedy Bi 根据The Block于1月29日的报道,嘉实国际成为了首家向香港证监会提交比特币现货ETF申请的机构。早在去年12月22日,香港证监会发布了《有关证监会认可基金投资虚拟资产的通函》,明确…

力扣将钱分给最多的儿童

题目: 给你一个整数 money ,表示你总共有的钱数(单位为美元)和另一个整数 children ,表示你要将钱分配给多少个儿童。 你需要按照如下规则分配: 所有的钱都必须被分配。每个儿童至少获得 1 美元。没有人获得…

opencv-python 视频读取: VideoCapture.get()参数详解

视频读取demo import cv2 from tqdm import tqdmvideoCapture cv2.VideoCapture(video_path) if not videoCapture.isOpened(): # 若视频文件读取失败,读取下一段视频print(视频打开失败!!!)print(video_path)return False total_frames int(videoCapture.get(c…

『C++成长记』string使用指南

🔥博客主页:小王又困了 📚系列专栏:C 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、string类介绍 二、string类的常用接口说明 📒2.1string类对象的常…

Go的两阶段延迟执行

Go 的 defer 不仅仅是用于清理任务,还可以用于准备任务,考虑以下示例: func setupTeardown() func() {fmt.Println("Run initialization")return func() {fmt.Println("Run cleanup")} }func main() {defer setupTeardo…

2024年美赛 (C题MCM)| 温网积分 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时,你是否曾经感到茫然无措?作为2022年美国大学生数学建模比赛的O奖得主,我为大家提供了一套优秀的解题思路,让你轻松应对各种难题。 让我们来看看美赛的C题! 完整内容可以在文章末尾领…

【无刷电机学习】电流采样电路硬件方案

【仅作自学记录,不出于任何商业目的】 目录 AD8210 INA282 INA240 INA199 AD8210 【AD8210数据手册】 在典型应用中,AD8210放大由负载电流通过分流电阻产生的小差分输入电压。AD8210抑制高共模电压(高达65V),并提供接地参考缓冲输出&…

Android 13.0 屏蔽短信功能(短信发送开关)

1.概述 在13.0系统rom定制化开发中,在一些wifi产品中,需要去掉短信发送功能,这就要从发送短信的流程中来分析了, 从流程中了解是如何发送短信的,然后从短信的发送部分,根据系统属性来决定是否继续走完发送短信的流程 2.屏蔽短信功能(短信发送开关)的代码 frameworks/opt…

【每日一题】6.LeetCode——轮转数组

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》|《数据结构与算法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 🙏小杨水平有限,欢…

零售连锁如何做好销售策略?教你一招搞定

随着社会的不断发展和科技的迅猛进步,视频监控系统在安全领域的应用变得越来越广泛。从保护公共安全到企业管理,视频监控系统作为一项重要的安全和管理工具,正逐渐成为各个领域不可或缺的一部分。 客户案例 零售连锁企业 广州某零售企业在其…

docker中三种常用的持久化数据的方式

文章目录 介绍1.docker run -v2.volumes3.bind mounts 介绍 “前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。” 在Docker中,有以下三种常用的持久化数据的方式,可…

简单说说mysql的日志

今天我们通过mysql日志了解mysqld的错误日志、慢查询日志、二进制日志,redolog, undolog等。揭示它们的作用和用途,让我们工作中更能驾驭mysql。 redo 日志 如果mysql事务提交后发生了宕机现象,那怎么保证数据的持久性与完整性?…

前端Web开发

安装flask框架 pip install flask 导入flask模块 from flask import Flask 【可能遇到的问题】 出现了如下警告: WARNING: You are using pip version 21.2.4; however, version 22.0.4 is available.You should consider upgrading via the D:\Python\python…

安装elasticsearch、kibana、IK分词器

1.部署单点es 1.1.创建网络 因为我们还需要部署kibana容器,因此需要让es和kibana容器互联。这里先创建一个网络: docker network create es-net 1.2.加载镜像 这里我们采用elasticsearch的7.12.1版本的镜像,这个镜像体积非常大&#xff0…

OpenCV学习记录——边缘检测

文章目录 前言一、边缘检测原理二、Canny边缘检测算法三、具体应用代码 前言 在做某些图像处理时,通常需要将识别到的物体边界提取出来,从而帮助我们实现目标检测,这就需要用到边缘检测,例如人脸识别和运动目标的检测都需要先进行…

golang网络编程day4

golang网络编程day4 get和post的区别resful编程golang请求头golangheader内容类型和字符编码http请求头缓存和过期应用golang 请求头跨域请求应用http请求头用户代理应用golang响应头 get和post的区别 在前面的学习我只在应用场景上做了一个区别的举例,这里是进一步的学习有哪…

【Mysql】数据库架构学习合集

目录 1. Mysql整体架构1-1. 连接层1-2. 服务层1-3. 存储引擎层1-4. 文件系统层 2. 一条sql语句的执行过程2-1. 数据库连接池的作用2-2. 查询sql的执行过程2-1. 写sql的执行过程 1. Mysql整体架构 客户端: 由各种语言编写的程序,负责与Mysql服务端进行网…

CentOS设置定时任务

CentOS设置定时任务 安装定时任务:cron yum install -y cronie启动 systemctl start crond.service设置开机自启动 systemctl enable crond.service检查定时任务状态 systemctl status crond.service编辑定时任务 crontab -e定时任务配置。例如:在…
最新文章