Java反射入门
什么是反射在spring项目中,只需要写个@Service或者@Component,然后在别的地方用@Autowired声明一个接口变量,Spring就能返回给我们一个实现了该接口的具体对象。这是如何实现的呢?它不可能在编译时就知道加了注解的类与类之间的关系,所以只能是在程序启动运行时,Spring动态地发现了这些类,读取了他们的结构,然后创建对象。这背后的技术支撑又是什么?答案就是反射。 反射是Java提供的一种在程序运行时 检查/获取类、接口、字段、方法、构造器等结构信息的能力。 操作/调用对象、字段、方法的能力。 它就像一面镜子,让程序在运行时“照见”自己的结构。 反射的基石:Class对象编译器在编译 Java 源代码时会生成 .class 文件(字节码文件)。当 JVM 需要用到某个类时,它的类加载器会读取并解析对应的 .class 文件,在方法区(或元空间)构建该类的运行时数据结构,同时在堆内存中创建一个代表该类的 java.lang.Class 对象。每个被加载的类在 JVM 中都有且只有一个对应的 Class...
遇到的奇葩BUG
此篇博客记录我学习过程中遇到的奇葩BUG SpringBoot项目启动失败 如上图,SpringBoot项目启动失败。 虽然说是端口占用,但我执行相关命令后没有任何输出,修改启动端口不行,尝试了很多办法都未成功,那只好使出我的终极大招:重启idea。还是不行。幸好我还有终极终极大招:重启电脑。嘿,你猜怎么着,成了!🤣
初识序列化与反序列化
什么是序列化和反序列化序列化,人话讲就是将对象转换为字节序列(也可以是JSON、XML等文本格式),反序列化就是把这个过程倒置。 下面是维基百科关于序列化的介绍 序列化(serialization)在计算机科学的资料处理中,是指将数据结构或对象状态转换成可取用格式(例如存成文件,存于缓冲,或经由网络中发送),以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。对于许多对象,像是使用大量引用的复杂对象,这种序列化重建的过程并不容易。面向对象中的对象序列化,并不概括之前原始对象所关系的函数。这种过程也称为对象编组(marshalling)。从一系列字节提取数据结构的反向操作,是反序列化(也称为解编组、deserialization、unmarshalling)。 对于Java这种面向对象的编程语言来说,是对实例化后的对象进行序列化,而对于C++这种半面向对象的编程语言来说,序列化的目标不仅有对象(class)还有数据结构(struct) 序列化的使用场景 数据存储:比如序列化可以将存储在...