首页 > 编程语言 >Java|Spring Boot 一些名词和常用概念(1)

Java|Spring Boot 一些名词和常用概念(1)

时间:2023-07-02 23:12:02浏览次数:44  
标签:Java 对象 Spring Boot 接口 实现 序列化 Serializable

JVM

JVM (Java Virtual Machine) is an abstract machine that enables your computer to run a Java program. When you run the Java program, Java compiler first compiles your Java code to bytecode. Then, the JVM translates bytecode into native machine code (set of instructions that a computer's CPU executes directly).

 


Serializable接口的理解

作者:ytKing
链接:https://juejin.cn/post/7090150041024725028
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

1.序列化介绍

序列化:对象的寿命通常随着生成该对象的程序的终止而终止,有时候需要把在内存中的各种对象的状态(也就是实例变量,不是方法)保存下来,并且可以在需要时再将对象恢复。虽然你可以用你自己的各种各样的方法来保存对象的状态,但是Java给你提供一种应该比你自己的好的保存对象状态的机制,那就是序列化。

[格式的转变] 转变前的格式是对象状态信息,转变后的格式是“可以存储或传输的形式”

[转变的目的] 转变成字节流后的目的主要有两个:1. 存储到磁盘; 2. 通过网络进行传输

 

总结:Java 序列化技术可以使你将一个对象的状态写入一个Byte 流里(序列化),并且可以从其它地方把该Byte 流里的数据读出来(反序列化)。Serializable接口是一个标记接口 ,不用实现任何方法,标记当前类对象是可以序列化的,是给JVM看的。

序列化的作用又可以简单理解为:把内存中的数据存储到磁盘中的过程

 

1.静态成员变量是不能被序列化的——序列化是针对对象属性的,而静态成员变量是属于类的。

2.当一个父类实现序列化,子类就会自动实现序列化,不需要显式实现Serializable接口。

3.当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化。

应用场景:当需要将一个对象存储起来,如数据库,文档,或在网络中传输。那么需要序列化,这样再次读取 的时候能够直接获取为对象,而不是字符串。

2.继承问题

测试:去掉父类Peopleimplements Serializable,让父类不实现序列化接口,子类Worker实现序列化接口

3.类中存在引用对象的情况

类中存在引用对象,这个类对象在什么情况下可以实现序列化?

总结:一个类里面所有的属性必须是可序列化的,这个类才能顺利的序列化。

比如,类中存在引用对象,那么这个引用对象必须是可序列化的,这个类才能序列化。

4.同一个对象多次序列化之间有属性更新,前后的序列化有什么区别?

结论:当对象第一次序列化成功后,后续这个对象属性即使有修改,也不会对后面的序列化造成成影响。

原因:是序列化算法的原因,所有要序列化的对象都有一个序列化的编码号,当试图序列化一个对象,会检查这个对象是否已经序列化过,若从未序列化过,才会序列化为字节序列去输出。若已经序列化过,则会输出一个编码符号,不会重复序列化一个对象。

5.Serializable 在序列化和反序列化过程中大量使用了反射,因此其过程会产生的大量的内存碎片

6.serialVersionUID与兼容性问题

serialVersionUID作用:这个值是用于确保类序列化与反序列化的兼容性问题的,如果序列化和反序列化过程中这两个值不一样,那么将导致序列化失败,标识serialVersionUID,是为了反序列化时能正确标识。

9.作用及意义

为什么要进行序列化?↓

9.1 一些不够完整的解释

  • 跨语言:某种编程语言(Java)在磁盘上存储的数据,有可能被别的编程语言(C++)读取
  • 跨平台:这个问题在网络传输时更为突出,在A机器上可能为小端序,在B机器上则为大端序

9.2 完整的解释

序列化其实主要是进行了数据格式的转换,即从内存格式转换为磁盘格式。进行该转换还有两个很重要的原因:去地址和节省空间。

9.3总结——序列化的主要目的

  • 实现数据的跨语言使用
  • 实现数据的跨平台使用
  • 数据去内存地址
  • 降低磁盘存储空间

10.为什么Java类需要实现Serializable接口?

例子: 比如在SSM或者SpringBoot开发的项目中,几乎都是基于Restful风格,HTTP+JSON格式进行数据传输,在Controller层返回数据响应到浏览器之前,会将数据转换为JSON字符串,那么你思考过为何要这么做吗,很简单,因为String字符串底层也实现了序列化,因为后端的数据想要响应给浏览器,就必须进行网络传输,也就意味着需要序列化操作。


 


 

 

标签:Java,对象,Spring,Boot,接口,实现,序列化,Serializable
From: https://www.cnblogs.com/fangleSea/p/17521637.html

相关文章

  • 6Javaweb基础—尚硅谷(购物车模块,订单模块) 没有做完
                               ......
  • java基础()
    计算机高级语言语言的类型有2中,编译型和解释型,Java是2种语言的结合。Java程序的运行机制:   1.javac Hello.java(文件名和类名要相同)生成Hello.class文件之后2.javaHello(不要写.class  java命令会调用虚拟机进行运行)----------------------------------------......
  • JavaScript 算法和数据结构之——基础JavaScript 笔记
    做整理是为了知识更加系统一些,遂记录参考资料js基础算法JavaScript字符串可以用单引号或双引号查找字符串长度.length空格符也会计算在内使用方括号查找字符串中的第一个字符方括号表示法(Bracketnotation)是一种在字符串中的特定index(索引)处获取字符的方法xxx[0]获取......
  • java代码加密
    <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>2.6</version><execution......
  • classfinal加密java代码并且启动
    maven插件方式配置参数解释: 参数说明-file加密的jar/war完整路径-packages加密的包名(可为空,多个用","分割)-libjarsjar/war包lib下要加密jar文件名(可为空,多个用","分割)-cfgfiles需要加密的配置文件,一般是classes目录下的yml或propertie......
  • SpringBoot自动配置的认识
    一、springboot的简单理解springboot是spring快速开发脚手架,通过约定大于配置的方式,快速构建和启动spring项目。springboot根据我们项目中所引入的依赖,比如引入了springmvc构件,就会判断出是要进行springmvc的web开发,就会把springmvc的相关的基本配置自动配置好,不需要我们在xm......
  • springboot+token+redis,模拟登录
    登录测试的controller:loginTest.javapackagecom.example.demo.controller;importcom.example.demo.po.ResponseBean;importorg.springframework.data.redis.core.RedisTemplate;importorg.springframework.web.bind.annotation.*;importjavax.annotation.Resource;i......
  • 汇总 第二周第一天 JAVA数组
    今日所学:JAVA数组的实现;掌握数组的定义声明和给数组赋值的三种方式,以及如何使用length属性获取数组长度,对数组的遍历,和二维数组的访问与遍历,掌握如何遍历不规则数组  明天要学的内容:JAVA方法问题:练车坐牢......
  • ObjectMapper向前端响应json数据,将java对象与json字符串互相转换
    向前端直接返回json数据,使用ObjectMapper ObjectMapper是Jackson提供的一个类,作用是将java对象与json字符串相互转化。依赖:<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId>......
  • 【springboot】springboot集成mysql
    在pom.xml增加依赖的坐标<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.1</version></dependency><!--<dependency&......