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

news/2024/12/6 18:53:33/

博主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题! 完整内容可以在文章末尾领…