【Java基础增强】类加载器和反射
1.类加载器
1.1类加载器【理解】
-
作用
负责将.class文件(存储的物理文件)加载在到内存中
1.2类加载的过程【理解】
-
类加载时机
-
创建类的实例(对象)
-
调用类的类方法
-
访问类或者接口的类变量,或者为该类变量赋值
-
使用反射方式来强制创建某个类或接口对应的java.lang.Class对象
-
初始化某个类的子类
-
直接使用java.exe命令来运行某个主类
-
-
类加载过程
-
加载
-
通过包名 + 类名,获取这个类,准备用流进行传输
-
在这个类加载到内存中
-
加载完毕创建一个class对象
-
-
链接
-
验证
确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身安全
(文件中的信息是否符合虚拟机规范有没有安全隐患)
-
准备
负责为类的类变量(被static修饰的变量)分配内存,并设置默认初始化值
(初始化静态变量)
-
解析
将类的二进制数据流中的符号引用替换为直接引用
(本类中如果用到了其他类,此时就需要找到对应的类)
-
-
初始化
根据程序员通过程序制定的主观计划去初始化类变量和其他资源
(静态变量赋值以及初始化其他资源)
-
-
小结
-
当一个类被使用的时候,才会加载到内存
-
类加载的过程: 加载、验证、准备、解析、初始化
-
1.3类加载的分类【理解】
-
分类
-
Bootstrap class loader:虚拟机的内置类加载器,通常表示为null ,并且没有父null
-
Platform class loader:平台类加载器,负责加载JDK中一些特殊的模块
-
System class loader:系统类加载器,负责加载用户类路径上所指定的类库
-
-
类加载器的继承关系
-
System的父加载器为Platform
-
Platform的父加载器为Bootstrap
-
-
代码演示
public class ClassLoaderDemo1 {public static void main(String[] args) {//获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();//获取系统类加载器的父加载器 --- 平台类加载器ClassLoader classLoader1 = systemClassLoader.getParent();//获取平台类加载器的父加载器 --- 启动类加载器ClassLoader classLoader2 = classLoader1.getParent();System.out.println("系统类加载器" + systemClassLoader);System.out.println("平台类加载器" + classLoader1);System.out.println("启动类加载器" + classLoader2);} }
1.4双亲委派模型【理解】
-
介绍
如果一个类加载器收到了类加载请求,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行,如果父类加载器还存在其父类加载器,则进一步向上委托,依次递归,请求最终将到达顶层的启动类加载器,如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成此加载任务,子加载器才会尝试自己去加载,这就是双亲委派模式
1.5ClassLoader 中的两个方法【应用】
-
方法介绍
方法名 说明 public static ClassLoader getSystemClassLoader() 获取系统类加载器 public InputStream getResourceAsStream(String name) 加载某一个资源文件 -
示例代码
public class ClassLoaderDemo2 {public static void main(String[] args) throws IOException {//static ClassLoader getSystemClassLoader() 获取系统类加载器//InputStream getResourceAsStream(String name) 加载某一个资源文件//获取系统类加载器ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();//利用加载器去加载一个指定的文件//参数:文件的路径(放在src的根目录下,默认去那里加载)//返回值:字节流。InputStream is = systemClassLoader.getResourceAsStream("prop.properties");Properties prop = new Properties();prop.load(is);System.out.println(prop);is.close();} }
2.反射
2.1反射的概述【理解】
-
反射机制
是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法; 对于任意一个对象,都能够调用它的任意属性和方法; 这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。
2.2获取Class类对象的三种方式【应用】
-
三种方式分类
-
类名.class属性
-
对象名.getClass()方法
-
Class.forName(全类名)方法
-
-
示例代码
public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void study(){System.out.println("学生在学习");}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';} } public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException {//1.Class类中的静态方法forName("全类名")//全类名:包名 + 类名Class clazz = Class.forName("com.itheima.myreflect2.Student");System.out.println(clazz);//2.通过class属性来获取Class clazz2 = Student.class;System.out.println(clazz2);//3.利用对象的getClass方法来获取class对象//getClass方法是定义在Object类中.Student s = new Student();Class clazz3 = s.getClass();System.out.println(clazz3);System.out.println(clazz == clazz2);System.out.println(clazz2 == clazz3);} }
2.3反射获取构造方法并使用【应用】
2.3.1Class类获取构造方法对象的方法
-
方法介绍
方法名 说明 Constructor<?>[] getConstructors() 返回所有公共构造方法对象的数组 Constructor<?>[] getDeclaredConstructors() 返回所有构造方法对象的数组 Constructor<T> getConstructor(Class<?>... parameterTypes) 返回单个公共构造方法对象 Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes) 返回单个构造方法对象 -
示例代码
public class Student {private String name;private int age;//私有的有参构造方法private Student(String name) {System.out.println("name的值为:" + name);System.out.println("private...Student...有参构造方法");}//公共的无参构造方法public Student() {System.out.println("public...Student...无参构造方法");}//公共的有参构造方法public Student(String name, int age) {System.out.println("name的值为:" + name + "age的值为:" + age);System.out.println("public...Student...有参构造方法");} } public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//method1();//method2();//method3();//method4();}private static void method4() throws ClassNotFoundException, NoSuchMethodException {// Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes): // 返回单个构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor constructor = clazz.getDeclaredConstructor(String.class);System.out.println(constructor);}private static void method3() throws ClassNotFoundException, NoSuchMethodException {// Constructor<T> getConstructor(Class<?>... parameterTypes): // 返回单个公共构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");//小括号中,一定要跟构造方法的形参保持一致.Constructor constructor1 = clazz.getConstructor();System.out.println(constructor1);Constructor constructor2 = clazz.getConstructor(String.class, int.class);System.out.println(constructor2);//因为Student类中,没有只有一个int的构造,所以这里会报错.Constructor constructor3 = clazz.getConstructor(int.class);System.out.println(constructor3);}private static void method2() throws ClassNotFoundException {// Constructor<?>[] getDeclaredConstructors(): // 返回所有构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getDeclaredConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}}private static void method1() throws ClassNotFoundException {// Constructor<?>[] getConstructors(): // 返回所有公共构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}} }
2.3.2Constructor类用于创建对象的方法
-
方法介绍
方法名 说明 T newInstance(Object...initargs) 根据指定的构造方法创建对象 setAccessible(boolean flag) 设置为true,表示取消访问检查 -
示例代码
public class Student {private String name;private int age;//私有的有参构造方法private Student(String name) {System.out.println("name的值为:" + name);System.out.println("private...Student...有参构造方法");}//公共的无参构造方法public Student() {System.out.println("public...Student...无参构造方法");}//公共的有参构造方法public Student(String name, int age) {System.out.println("name的值为:" + name + "age的值为:" + age);System.out.println("public...Student...有参构造方法");} } public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//method1();//method2();//method3();//method4();}private static void method4() throws ClassNotFoundException, NoSuchMethodException {// Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes): // 返回单个构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor constructor = clazz.getDeclaredConstructor(String.class);System.out.println(constructor);}private static void method3() throws ClassNotFoundException, NoSuchMethodException {// Constructor<T> getConstructor(Class<?>... parameterTypes): // 返回单个公共构造方法对象//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");//小括号中,一定要跟构造方法的形参保持一致.Constructor constructor1 = clazz.getConstructor();System.out.println(constructor1);Constructor constructor2 = clazz.getConstructor(String.class, int.class);System.out.println(constructor2);//因为Student类中,没有只有一个int的构造,所以这里会报错.Constructor constructor3 = clazz.getConstructor(int.class);System.out.println(constructor3);}private static void method2() throws ClassNotFoundException {// Constructor<?>[] getDeclaredConstructors(): // 返回所有构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getDeclaredConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}}private static void method1() throws ClassNotFoundException {// Constructor<?>[] getConstructors(): // 返回所有公共构造方法对象的数组//1.获取Class对象Class clazz = Class.forName("com.itheima.myreflect3.Student");Constructor[] constructors = clazz.getConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}} }
2.3.3小结
-
获取class对象
三种方式: Class.forName(“全类名”), 类名.class, 对象名.getClass()
-
获取里面的构造方法对象
getConstructor (Class<?>... parameterTypes) getDeclaredConstructor (Class<?>... parameterTypes)
-
如果是public的,直接创建对象
newInstance(Object... initargs)
-
如果是非public的,需要临时取消检查,然后再创建对象
setAccessible(boolean) 暴力反射
2.4反射获取成员变量并使用【应用】
2.4.1Class类获取成员变量对象的方法
-
方法分类
方法名 说明 Field[] getFields() 返回所有公共成员变量对象的数组 Field[] getDeclaredFields() 返回所有成员变量对象的数组 Field getField(String name) 返回单个公共成员变量对象 Field getDeclaredField(String name) 返回单个成员变量对象 -
示例代码
public class Student {public String name;public int age;public String gender;private int money = 300;@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +", gender='" + gender + '\'' +", money=" + money +'}';} } public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {// method1();//method2();//method3();//method4();}private static void method4() throws ClassNotFoundException, NoSuchFieldException {// Field getDeclaredField(String name):返回单个成员变量对象//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取money成员变量Field field = clazz.getDeclaredField("money");//3.打印一下System.out.println(field);}private static void method3() throws ClassNotFoundException, NoSuchFieldException {// Field getField(String name):返回单个公共成员变量对象//想要获取的成员变量必须是真实存在的//且必须是public修饰的.//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取name这个成员变量//Field field = clazz.getField("name");//Field field = clazz.getField("name1");Field field = clazz.getField("money");//3.打印一下System.out.println(field);}private static void method2() throws ClassNotFoundException {// Field[] getDeclaredFields():返回所有成员变量对象的数组//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取所有的Field对象Field[] fields = clazz.getDeclaredFields();//3.遍历for (Field field : fields) {System.out.println(field);}}private static void method1() throws ClassNotFoundException {// Field[] getFields():返回所有公共成员变量对象的数组//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取Field对象.Field[] fields = clazz.getFields();//3.遍历for (Field field : fields) {System.out.println(field);}} }
2.4.2Field类用于给成员变量赋值的方法
-
方法介绍
方法名 说明 void set(Object obj, Object value) 赋值 Object get(Object obj) 获取值 -
示例代码
// Student类同上一个示例,这里就不在重复提供了 public class ReflectDemo2 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, InstantiationException { // Object get(Object obj) 返回由该 Field表示的字段在指定对象上的值。//method1();//method2();}private static void method2() throws ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException {//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取成员变量Field的对象Field field = clazz.getDeclaredField("money");//3.取消一下访问检查field.setAccessible(true);//4.调用get方法来获取值//4.1创建一个对象Student student = (Student) clazz.newInstance();//4.2获取指定对象的money的值Object o = field.get(student);//5.打印一下System.out.println(o);}private static void method1() throws ClassNotFoundException, NoSuchFieldException, InstantiationException, IllegalAccessException {// void set(Object obj, Object value):给obj对象的成员变量赋值为value//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect4.Student");//2.获取name这个Field对象Field field = clazz.getField("name");//3.利用set方法进行赋值.//3.1先创建一个Student对象Student student = (Student) clazz.newInstance();//3.2有了对象才可以给指定对象进行赋值field.set(student,"zhangsan");System.out.println(student);} }
2.5反射获取成员方法并使用【应用】
2.5.1Class类获取成员方法对象的方法
-
方法分类
方法名 说明 Method[] getMethods() 返回所有公共成员方法对象的数组,包括继承的 Method[] getDeclaredMethods() 返回所有成员方法对象的数组,不包括继承的 Method getMethod(String name, Class<?>... parameterTypes) 返回单个公共成员方法对象 Method getDeclaredMethod(String name, Class<?>... parameterTypes) 返回单个成员方法对象 -
示例代码
public class Student {//私有的,无参无返回值private void show() {System.out.println("私有的show方法,无参无返回值");}//公共的,无参无返回值public void function1() {System.out.println("function1方法,无参无返回值");}//公共的,有参无返回值public void function2(String name) {System.out.println("function2方法,有参无返回值,参数为" + name);}//公共的,无参有返回值public String function3() {System.out.println("function3方法,无参有返回值");return "aaa";}//公共的,有参有返回值public String function4(String name) {System.out.println("function4方法,有参有返回值,参数为" + name);return "aaa";} } public class ReflectDemo1 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//method1();//method2();//method3();//method4();//method5();}private static void method5() throws ClassNotFoundException, NoSuchMethodException {// Method getDeclaredMethod(String name, Class<?>... parameterTypes): // 返回单个成员方法对象//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取一个成员方法showMethod method = clazz.getDeclaredMethod("show");//3.打印一下System.out.println(method);}private static void method4() throws ClassNotFoundException, NoSuchMethodException {//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取一个有形参的方法function2Method method = clazz.getMethod("function2", String.class);//3.打印一下System.out.println(method);}private static void method3() throws ClassNotFoundException, NoSuchMethodException {// Method getMethod(String name, Class<?>... parameterTypes) : // 返回单个公共成员方法对象//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取成员方法function1Method method1 = clazz.getMethod("function1");//3.打印一下System.out.println(method1);}private static void method2() throws ClassNotFoundException {// Method[] getDeclaredMethods(): // 返回所有成员方法对象的数组,不包括继承的//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取Method对象Method[] methods = clazz.getDeclaredMethods();//3.遍历一下数组for (Method method : methods) {System.out.println(method);}}private static void method1() throws ClassNotFoundException {// Method[] getMethods():返回所有公共成员方法对象的数组,包括继承的//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取成员方法对象Method[] methods = clazz.getMethods();//3.遍历for (Method method : methods) {System.out.println(method);}} }
2.5.2Method类用于执行方法的方法
-
方法介绍
方法名 说明 Object invoke(Object obj, Object... args) 运行方法 参数一: 用obj对象调用该方法
参数二: 调用方法的传递的参数(如果没有就不写)
返回值: 方法的返回值(如果没有就不写)
-
示例代码
public class ReflectDemo2 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException { // Object invoke(Object obj, Object... args):运行方法 // 参数一:用obj对象调用该方法 // 参数二:调用方法的传递的参数(如果没有就不写) // 返回值:方法的返回值(如果没有就不写)//1.获取class对象Class clazz = Class.forName("com.itheima.myreflect5.Student");//2.获取里面的Method对象 function4Method method = clazz.getMethod("function4", String.class);//3.运行function4方法就可以了//3.1创建一个Student对象,当做方法的调用者Student student = (Student) clazz.newInstance();//3.2运行方法Object result = method.invoke(student, "zhangsan");//4.打印一下返回值System.out.println(result);} }
相关文章:

【Java基础增强】类加载器和反射
1.类加载器 1.1类加载器【理解】 作用 负责将.class文件(存储的物理文件)加载在到内存中 1.2类加载的过程【理解】 类加载时机 创建类的实例(对象) 调用类的类方法 访问类或者接口的类变量,或者为该类变量赋值 …...
【Java】数据类型变量
【Java】数据类型&变量 文章目录 【Java】数据类型&变量1、字面常量2、数据类型3、变量3.1 整型变量3.1.1 整型变量3.1.2 长短整型变量3.1.3 字节型变量 3.2 浮点型变量3.2.1 双精度浮点型3.2.2 单精度浮点型 3.3 字符型变量3.4 布尔型变量3.5 类型转换3.5.1 自动类型转…...

护目镜佩戴检测识别算法
护目镜佩戴检测识别算法通过opencvpython网络深度学习模型,护目镜佩戴检测识别算法实时监测工人的护目镜佩戴情况,发现未佩戴或错误佩戴的情况,及时提醒调整。与C / C等语言相比,Python速度较慢。也就是说,Python可以使…...
NOIOLPJ2022B. 数学游戏 分析
数学游戏 题目描述 Kri 喜欢玩数字游戏。 一天,他在草稿纸上写下了 ttt 对正整数 (x,y)(x,y)(x,y),并对于每一对正整数计算出了 zxygcd(x,y)z x \times y \times \gcd(x,y)zxygcd(x,y)。 可是调皮的 Zay 找到了 Kri 的草稿纸,并把每一组的…...

android studio gradle build running慢 卡住不动 失败 原因与解决方式
快速导航 分析原因解决办法 分析原因 主要原因是 gradle 构建时无法从网络获取需要的包或库。 解决办法 将国外库替换为阿里云镜像库。 例如 google 对应的库是 maven { url ‘https://maven.aliyun.com/repository/google’ }...

如何保障Facebook账号登录稳定
当谈到保障Facebook账号的稳定性时,我们不得不提到那些令人头疼的情况——Facebook账号被封。尽管我们已经踏入数字化的未来,但是被封号似乎是一个时常困扰着社交媒体用户的问题。那么,让我们来看看一些常见的Facebook账号被封的原因…...
当前目录下的excel文件的两列内容的相似度比较
# -- coding: utf-8 --** from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity import numpy as np import pandas as pd import os # 获取当前目录 current_dir os.getcwd() # 获取当前目录下所有xlsx文件…...

Cookie for Mac:隐私保护工具保护您的在线隐私
随着互联网的发展,我们每天都会浏览各种网站,享受在线购物、社交娱乐和学习资料等各种便利。然而,您是否曾经遇到过需要频繁输入用户名和密码的情况?或者不方便访问您常用的网站?如果是这样,那么Cookie for…...
Huggingface训练Transformer
在之前的博客中,我采用SFT(监督优化训练)的方法训练一个GPT2的模型,使得这个模型可以根据提示语进行回答。具体可见博客召唤神龙打造自己的ChatGPT_gzroy的博客-CSDN博客 Huggingface提供了一个TRL的扩展库,可以对tra…...

IA-YOLO项目中DIP模块的初级解读
IA-YOLO项目源自论文Image-Adaptive YOLO for Object Detection in Adverse Weather Conditions,其提出端到端方式联合学习CNN-PP和YOLOv3,这确保了CNN-PP可以学习适当的DIP,以弱监督的方式增强图像检测。IA-YOLO方法可以自适应地处理正常和不…...

MathType7.4mac最新版本数学公式编辑器安装教程
MathType7.4中文版是一款功能强大且易于使用的公式编辑器。该软件可与word软件配合使用,有效提高了教学人员的工作效率,避免了一些数学符号和公式无法在word中输入的麻烦。新版MathType7.4启用了全新的LOGO,带来了更多对数学符号和公式的支持…...

为Claude的分析内容做准备:提取PDF页面内容的简易应用程序
由于Claude虽然可以分析整个文件,但是对文件的大小以及字数是有限制的,为了将pdf文件分批传入Claude人工智能分析和总结文章内容,才有了这篇博客: 在本篇博客中,我们将介绍一个基于 wxPython 和 PyMuPDF 库编写的简易的…...

js中作用域的理解?
1.作用域 作用域,即变量(变量作用域又称上下文)和函数生效(能被访问)的区域或集合 换句话说,作用域决定了代码区块中变量和其他资源的可见性 举个例子 function myFunction() {let inVariable "函数内部变量"; } myFunction();//要先执行这…...

机器学习基础之《分类算法(4)—案例:预测facebook签到位置》
一、背景 1、说明 2、数据集 row_id:签到行为的编码 x y:坐标系,人所在的位置 accuracy:定位的准确率 time:时间戳 place_id:预测用户将要签到的位置 3、数据集下载 https://www.kaggle.com/navoshta/gr…...
【Java】反射 之 调用方法
调用方法 我们已经能通过Class实例获取所有Field对象,同样的,可以通过Class实例获取所有Method信息。Class类提供了以下几个方法来获取Method: Method getMethod(name, Class...):获取某个public的Method(包括父类&a…...

Java——单例设计模式
什么是设计模式? 设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式免去我们自己再思考和摸索。就像是经典的棋谱,不同的棋局,我们用不同的棋谱、“套路”。 经典的设计模式共有23种。…...

Java实现excel表数据的批量存储(结合easyexcel插件)
场景:加哥最近在做项目时,苦于系统自身并未提供数据批量导入的功能还不能自行添加上该功能,且自身不想手动一条一条将数据录入系统。随后,自己使用JDBC连接数据库、使用EasyExcel插件读取表格并将数据按照业务逻辑批量插入数据库完…...

Config:客户端连接服务器访问远程
springcloud-config: springcloud-config push pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocatio…...

【KMP算法-代码随想录】
目录 1.什么是KMP2.什么是next数组3.什么是前缀表(1)前后缀含义(2)最长公共前后缀(3)前缀表的必要性 4.计算前缀表5.前缀表与next数组(1)使用next数组来匹配 6.构造next数组…...

【手写promise——基本功能、链式调用、promise.all、promise.race】
文章目录 前言一、前置知识二、实现基本功能二、实现链式调用三、实现Promise.all四、实现Promise.race总结 前言 关于动机,无论是在工作还是面试中,都会遇到Promise的相关使用和原理,手写Promise也有助于学习设计模式以及代码设计。 本文主…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...