1. java生成UUID。有什么通用的类吗? 在Java中生成UUID(Universally Unique Identifier)可以使用Java标准库中的java.util.UUID类。这个类提供了静态方法来生成不同版本(Version 1、Version 3、Version 4、Version 5)的UUID。通常情况下,我们使用Version 4的UUID,因为它是基于随机数生成的,足够满足大多数场景的唯一性需求。
1. java中的format 有时候,我们需要对程序中的文本、数字、日期等类型进行某种格式化,以适应我们自身的阅读和显式习惯。 在java中进行格式化的类主要是Format类。 Format类主要有3个子类: MessageFormat类(消息文本格式化类)。 NumberFormat抽象类(数字格式化类)。 DateFormat抽象类(日期格式化类)。
1. 浅谈需要比较器的背景 1.1 为啥需要比较器? 目前我们已经学习完了数组、集合等。 我们知道数组和集合中可以保存一堆数据,而且Arrays.sort()方法、Collections.sort()方法、TreeSet等都可以对其中保存的对象元素进行排序。 如果保存的是简单数据类型,则默认会按照数据字典从小到大进行排序。 那么现在问题来了,如果保存的是我们自定义的javabean对象的话,怎么排序呢?
1. 为什么使用反射修改目标属性值? 为什么要使用反射修改目标对象的指定字段值?直接通过对象去设置或者直接修改代码设置字段值不香吗? 答: 有的时候,我们需要修改一个成员变量的值,但是该成员在jar包中或者在其他位置且没有提供对应的修改方法或者成员是私有的,导致我们不能从代码层面修改。 有的时候,代码是别人提供的,并且成员定义成了private私有的且没有提供setter方法,而公司规则不允许直接修改别人提供的代码。 基于这些常见的原因,因此可能需要我们通过非常规手段去修改目标对象的指定成员值。 使用反射修改目标类字段的核心API是Field类的set()方法: public void set(Object obj, Object value) throws IllegalArgumentException, IllegalAccessException; 这个方法我们需要注意的是:如果底层需要设置的字段是static的话,则第一个参数可以忽略,直接传null值即可。 这个特性很重要,意味着我们通过反射设置一个static字段的值的时候,可以不用传递实例对象进去,比如反射设置接口中的常量字段,我们无法传递一个接口实例进去,就可以直接传递null。 实际上对于底层字段是static的,传递一个明确的实例对象进去毫无意义,因为static字段不是实例对象自己的,而是隶属于类。
1. Class类的api学习 1.1 准备几个操作类 MyInterface: ```java package zeh.test.demo.com.class1;
1. Class类是反射的核心 反射的核心就是依靠的Class类,即任何一个被JVM装载的目标类都存在唯一的一个class对象,用来描述该目标类的元信息。
1. 反射 反射机制是JDK底层提供的一种高级特性机制,它是一种机制,是种底层技术,是种手段,而不是一种设计模式。 反射虽然不是一种设计模式,但是很多设计模式都离不开反射。 反射机制底层依赖的是JDK提供的动态加载技术,从代码层面来讲,依赖的就是JVM默认为任何一个目标类生成的唯一一个class对象。 动态加载技术和动态字节码技术是体现java语言动态性的两个重要底层技术: (1)、反射底层的动态加载技术,提供了操作动态JVM中某个对象、或者为动态JVM生成一个新对象的功能。常用作动态的操作对象,或者动态的为JVM追加功能。 (2)、动态字节码技术,提供了为JVM生成动态的.class字节码文件的功能;常用作动态增加新功能。 tips: 反射是动态的加载目标类和操作目标对象,动态表示JVM此时正在运行。 动态字节码是指为动态JVM生成动态的字节码文件,即生成的.class字节码是在JVM的内存中虚拟存储的。 区别是: 动态字节码技术,讲的是字节码的生成过程是在一个正在运行当中的JVM中动态进行的,生成的字节码是在JVM内存中虚拟缓存的,而不是java编译器预编译后产生的.class文件。 动态加载技术,讲的是目标类的装载过程是在一个正在运行当中的JVM中动态进行的,一个正在运行的JVM可以主动的装载一个新的目标类,这个目标类同样需要我们提前写好源码,也同样需要编译器先编译成.class字节码后,才可以被动态的JVM装载进去。 反射既可以动态装载目标类,也可以像其他普通类一样进行静态装载。 (1)、获取目标类的权限定名称(该名称可以是动态传入的,比如Class.forName()方法传入)。 (2)、开始装载目标类。 (3)、如果目标类已经被装载,即正在JVM中运行,则跳过装载,直接获取目标类的class对象。 (4)、如果目标类没有被装载,即需要装载的目标类也是新编写的,则开始装载目标类,和JVM静态装载普通类一模一样;装载完成后,直接获取目标类的class对象。
个人独立开发项目,基于springboot 3.x starter机制提供插拔式的插件功能
基于芋道最新源码二次开发