JavaSE学习笔记25-反射(reflection)
反射
在Java中,反射(Reflection) 是一种强大的机制,允许程序在运行时检查和操作类、方法、字段等信息。通过反射,可以动态地创建对象、调用方法、访问字段,甚至修改私有成员。反射的核心类是 java.lang.reflect
包中的 Class
、Method
、Field
、Constructor
等。
反射的常见用法
以下是反射的常见用法
1. 获取 Class
对象
Class
对象是反射的核心,表示一个类或接口的元数据。可以通过以下方式获取 Class
对象:
// 1. 通过类名获取
Class<?> clazz = Class.forName("java.lang.String");// 2. 通过对象获取
String str = "Hello";
Class<?> clazz = str.getClass();// 3. 通过类字面量获取
Class<?> clazz = String.class;
2. 创建对象
通过反射可以动态创建类的实例:
Class<?> clazz = Class.forName("java.lang.String");
// 使用无参构造函数创建对象
Object obj = clazz.getDeclaredConstructor().newInstance();
如果构造函数有参数,可以这样:
Constructor<?> constructor = clazz.getDeclaredConstructor(String.class);
Object obj = constructor.newInstance("Hello, Reflection!");
3. 调用方法
通过反射可以动态调用方法:
Class<?> clazz = Class.forName("java.lang.String");
Object obj = clazz.getDeclaredConstructor().newInstance();// 获取方法对象
Method method = clazz.getMethod("substring", int.class, int.class);// 调用方法
String result = (String) method.invoke(obj, 0, 5);
System.out.println(result); // 输出子字符串
4. 访问字段
通过反射可以访问和修改字段的值:
class MyClass {private String name = "Reflection";
}Class<?> clazz = MyClass.class;
Object obj = clazz.getDeclaredConstructor().newInstance();// 获取字段对象
Field field = clazz.getDeclaredField("name");// 设置字段可访问(即使是私有字段)
field.setAccessible(true);// 获取字段值
String nameValue = (String) field.get(obj);
System.out.println(nameValue); // 输出: Reflection// 修改字段值
field.set(obj, "New Value");
System.out.println(field.get(obj)); // 输出: New Value
5. 访问私有成员
通过 setAccessible(true)
可以绕过访问控制,访问私有成员(字段、方法、构造函数):
class MyClass {private void privateMethod() {System.out.println("Private Method Called!");}
}Class<?> clazz = MyClass.class;
Object obj = clazz.getDeclaredConstructor().newInstance();// 获取私有方法
Method method = clazz.getDeclaredMethod("privateMethod");// 设置方法可访问
method.setAccessible(true);// 调用私有方法
method.invoke(obj); // 输出: Private Method Called!
反射的优缺点
优点:
-
动态性:可以在运行时动态加载类、调用方法、访问字段。
-
灵活性:适用于框架和库的开发(如 Spring、Hibernate)。
缺点:
-
性能开销:反射操作比直接调用慢。
-
安全性问题:可以绕过访问控制,破坏封装性。
-
代码可读性差:反射代码通常难以理解和维护。
反射的使用场景
-
框架开发:如 Spring 的依赖注入、Hibernate 的 ORM 映射。
-
动态代理:如 JDK 动态代理。
-
工具类:如 JSON 库(Gson、Jackson)的序列化和反序列化。
反射示例代码
以下是一个完整的反射示例:
import java.lang.reflect.*;public class ReflectionExample {public static void main(String[] args) throws Exception {// 获取 Class 对象Class<?> clazz = Class.forName("java.lang.String");// 创建对象Object obj = clazz.getDeclaredConstructor(String.class).newInstance("Hello, Reflection!");// 调用方法Method method = clazz.getMethod("substring", int.class, int.class);String result = (String) method.invoke(obj, 0, 5);System.out.println(result); // 输出: Hello// 访问字段(假设有一个私有字段)Field field = clazz.getDeclaredField("value");field.setAccessible(true);byte[] value = (byte[]) field.get(obj);System.out.println(new String(value)); // 输出: Hello, Reflection!}
}
通过反射,Java 提供了强大的动态能力,但应谨慎使用,避免滥用导致性能问题和代码复杂性。
静态vs动态语言
动态语言
是一类在运行时可以改变其结构的语言:例如新的函数、对象、甚至代码可以被引进,
已有的函数可以被删除或是其他结构上的变化。通俗说就是在运行时代码可以根据某些条件改变自身结构
主要动态语言:Object-C、C#、Javascript、PHP、Python等。
静态语言
与动态语言相对应的,运行时结构不可变的语言就是静态语言。如Java、C、C++
Java不是动态语言,但Java可以称之为“准动态语言”。即Java有一定的动态性,我们可以利用反射机制获得
类似动态语言的特性。Java的动态性让编程的时候更加灵活!
笔记
Reflection(反射)是Java被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,
并能直接操作任意对象的内部属性及方法
语法: Class c = Class.forName("java.lang.String")
加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就
包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,
所以,我们形象的称之为:反射
正常方式:引入需要的“包类”名称 --》 通过new实例化 --》取得实例化对象
反射方式:实例化对象 --》getClass()方法 --》 得到完整的“包类”名称
Java反射机制提供的功能
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时获取泛型信息
在运行时调用任意一个对象的成员变量和方法
在运行时处理注解
生成动态代理
....
优点:实现动态创建对象和编译,体现出很大的灵活性
缺点:对性能有影响。使用反射基本上是一直解释操作,我们可以告诉JVM,我们希望做什么并且它满足我们的要求。
这类操作总是慢于 直接执行相同的操作
反射相关的主要API
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Filed:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造器
...
Class类
在Object类中定义了以下的方法,此方法将被所有子类继承
public final Class getClass()
这个方法的返回值的类型是一个Class类,此类是Java反射的源头
实际上所谓反射从程序的运行结果看也很好理解,即:可以通过对象反射求出类的名称
对象照镜子后可以得到的信息,某个类的属性,方法,和构造器,某个类到底实现了哪些接口
对于每个类而言,JRE都为其保留一个不变的Class类型的对象,一个Class对象包含了特定某个
结构(class/interface/enum/annotation/primitive type/void/[])的有关信息
Class本身也是一个类
Class对象只能由系统建立对象
一个加载的类在JVM中只会有一个Class实例
一个Class对象对应的是一个加载到JVM中的一个.class文件
每个类的实例都会记得自己是由哪个Class实例所生成
通过Class可以完整地得到一个类中的所有被加载的结构
Class类是Reflection的根源,针对任何你想动态加载,运行的类,唯有先获得相应的Class对象
Class类的常用方法
static ClassforName(String name) 返回指定类名name的Class对象
Object newInstance() 调用缺省构造函数,返回Class对象的一个实例
getName() 返回此Class对象所表示的实体(类,接口,数组类或void)的名称
Class getSuperClass() 返回当前Class对象的父类的Class对象
Class[] getinterface() 获取当前Class对象的接口
ClassLoader getClassLoader() 返回该类的类加载器
Constructor[] getConstructors() 返回一个包含某些Constructor对象的数组
Method getMethod(String name,Class..T) 返回一个Method对象,此对象的形参类型为paramType
Field[] getDeclaredFields() 返回Field对象的一个数组
练习代码:
package com.kuang.reflection;public class Test02 {public static void main(String[] args) throws ClassNotFoundException {// 创建一个 Persons 对象Persons persons = new Student();Persons persons1 = new Teacher();System.out.println("这个人是:" + persons.name);System.out.println("这个人是:" + persons1.name);// 方式一:通过对象的 getClass() 方法获取 Class 对象Class c1 = persons.getClass();System.out.println("c1的哈希值:" + c1.hashCode());// 方式二:通过 Class.forName() 方法获取 Class 对象Class c2 = Class.forName("com.kuang.reflection.Student");System.out.println("c1的哈希值:" + c2.hashCode());//方式三:通过类名 .class 获取Class对象Class c3 = Student.class;System.out.println("c3的哈希值:" + c3.hashCode());//方式四:基本内置类型的包装类都有一个Type属性Class c4 = Integer.TYPE;System.out.println("c4的类名:" + c4.getName());//获得父类类型Class c5 = c1.getSuperclass();System.out.println("c5的父类类型:" + c5);}
}class Persons{public String name;public Persons(){}public Persons(String name){this.name = name;}@Overridepublic String toString() {return "Persons{" +"name='" + name + '\'' +'}';}
}class Student extends Persons{public Student(){this.name = "学生";}
}class Teacher extends Persons{public Teacher(){this.name = "老师";}
}
主要演示了 Java 反射机制 的使用,包括如何获取类的 Class
对象、获取父类类型,以及基本数据类型的 Class
对象。以下是对代码的详细解释:
代码结构:
-
Test02
类:-
这是主类,包含
main
方法,用于测试反射相关的操作。
-
-
Persons
类:-
这是一个父类,包含一个
name
字段和两个构造函数。
-
-
Student
类:-
这是
Persons
的子类,构造函数中初始化name
为"学生"
。
-
-
Teacher
类:-
这是
Persons
的子类,构造函数中初始化name
为"老师"
。
-
代码逐行解析:
1. 创建对象并打印 name
字段:
Persons persons = new Student();
Persons persons1 = new Teacher();
System.out.println("这个人是:" + persons.name);
System.out.println("这个人是:" + persons1.name);
-
创建了一个
Student
对象和一个Teacher
对象,分别赋值给Persons
类型的变量persons
和persons1
。 -
打印
persons
和persons1
的name
字段:-
persons.name
输出"学生"
,因为Student
的构造函数将name
初始化为"学生"
。 -
persons1.name
输出"老师"
,因为Teacher
的构造函数将name
初始化为"老师"
。
-
2. 方式一:通过对象的 getClass()
方法获取 Class
对象:
Class c1 = persons.getClass();
System.out.println("c1的哈希值:" + c1.hashCode());
-
persons.getClass()
返回persons
对象的运行时类(即Student
类)的Class
对象。 -
打印
c1
的哈希值,这个哈希值是Student
类的Class
对象的哈希值。
3. 方式二:通过 Class.forName()
方法获取 Class
对象:
Class c2 = Class.forName("com.kuang.reflection.Student");
System.out.println("c1的哈希值:" + c2.hashCode());
-
Class.forName("com.kuang.reflection.Student")
通过类的全限定名加载Student
类,并返回其Class
对象。 -
打印
c2
的哈希值,这个哈希值与c1
的哈希值相同,因为c1
和c2
都是Student
类的Class
对象。
4. 方式三:通过类名 .class
获取 Class
对象:
Class c3 = Student.class;
System.out.println("c3的哈希值:" + c3.hashCode());
-
Student.class
直接获取Student
类的Class
对象。 -
打印
c3
的哈希值,这个哈希值与c1
和c2
的哈希值相同,因为c1
、c2
和c3
都是Student
类的Class
对象。
5. 方式四:基本内置类型的包装类都有一个 TYPE
属性:
Class c4 = Integer.TYPE;
System.out.println("c4的类名:" + c4.getName());
-
Integer.TYPE
返回基本数据类型int
的Class
对象。 -
打印
c4
的类名,输出为"int"
。
6. 获取父类类型:
Class c5 = c1.getSuperclass();
System.out.println("c5的父类类型:" + c5);
-
c1.getSuperclass()
返回c1
(即Student
类)的父类的Class
对象。 -
因为
Student
的父类是Persons
,所以c5
是Persons
类的Class
对象。 -
打印
c5
,输出为"class com.kuang.reflection.Persons"
。
相关文章:
JavaSE学习笔记25-反射(reflection)
反射 在Java中,反射(Reflection) 是一种强大的机制,允许程序在运行时检查和操作类、方法、字段等信息。通过反射,可以动态地创建对象、调用方法、访问字段,甚至修改私有成员。反射的核心类是 java.lang.re…...
ctf网络安全题库 ctf网络安全大赛答案
此题解仅为部分题解,包括: 【RE】:①Reverse_Checkin ②SimplePE ③EzGame 【Web】①f12 ②ezrunner 【Crypto】①MD5 ②password ③看我回旋踢 ④摩丝 【Misc】①爆爆爆爆 ②凯撒大帝的三个秘密 ③你才是职业选手 一、 Re ① Reverse Chec…...
旋转位置编码(ROPE)详解:从Transformer到现代前沿
旋转位置编码(ROPE)详解:从Transformer到现代前沿 标签:NLP, Transformer, 位置编码, ROPE, 深度学习, 机器学习 摘要:本文详细介绍了旋转位置编码(ROPE)在Transformer模型中的应用࿰…...
ROS2机器人开发--服务通信与参数通信
服务通信与参数通信 在 ROS 2 中,服务(Services)通信和参数(Parameters)通信是两种重要的通信机制。服务是基于请求和响应的双向通信机制。参数用于管理节点的设置,并且参数通信是基于服务通信实现的。 1 …...
安全运维,等保测试常见解决问题。
1. 未配置口令复杂度策略。 # 配置密码安全策略 # vi /etc/pam.d/system-auth # local_users_only 只允许本机用户。 # retry 3 最多重复尝试3次。 # minlen12 最小长度为12个字符。 # dcredit-1 至少需要1个数字字符。 # ucredit-1 至少需要1个大…...
【数据标准】数据标准化是数据治理的基础
导读:数据标准化是数据治理的基石,它通过统一数据格式、编码、命名与语义等,全方位提升数据质量,确保准确性、完整性与一致性,从源头上杜绝错误与冲突。这不仅打破部门及系统间的数据壁垒,极大促进数据共享…...
Java 18~20 新特性
文章目录 一、Java 18 新特性1.1、UTF-8 作为默认字符集(JEP 400)1.2、简易 Web 服务器(JEP 408)1.3、代码片段标签 snippet(JEP 413)1.4、使用方法句柄重新实现反射核心(JEP 416)1.…...
程序员学商务英语之At the Hotel
Dialogue-3 Room service-Cleaning the Room客房服务-打扫房间 A: Who will do the dishes after dinner tonight? 今晚饭后谁来洗碗? B: It’s your turn. 轮到你了。 Go do the room right now. clean the room去打扫房间。Doing the laundry is the last thi…...
探秘路由表:网络世界的导航地图
一、引言 在当今数字化时代,网络已经成为我们生活中不可或缺的一部分。无论是浏览网页、观看视频,还是进行在线办公、游戏娱乐,我们都在与网络进行着频繁的交互。而在这背后,网络中的数据传输就如同现实生活中的快递配送…...
UniApp SelectorQuery 讲解
一、SelectorQuery简介 在UniApp中,SelectorQuery是一个非常强大的工具,它允许开发者查询节点信息。通过这个API,我们可以获取到页面元素的尺寸、位置、滚动条位置等信息。这在处理动态布局、动画效果或是用户交互时尤为重要。 二、基本使用…...
三数之和:经典问题的多种优化策略
三数之和:经典问题的多种优化策略 大家好,我是Echo_Wish。今天我们来聊一个经典的算法问题——三数之和(3Sum)。它是许多面试和算法竞赛中常见的问题之一,也常常考察我们对算法优化的理解和技巧。我们不仅要解决问题&…...
Flash-00
下载网站:Flash CC 2015中文版下载-Adobe Flash CC 2015(动画制作软件)免费下载-当快软件园 1-什么是Flash? Flash是一款多媒体设计软件,二维交互式动画设计工具,常用于矢量动画制作 2-Flash的应用领域? 动画制作&a…...
FTP 实验(ENSP模拟器实现)
FTP 概述 FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上进行文件传输的标准协议。它允许用户在两台计算机之间上传和下载文件。 1、FTP采用客户端-服务器模型,客户端通过FTP客户端软件,连接到FTP服务…...
DeepSeek在初创企业、教育和数字营销领域应用思考
如今,像 DeepSeek 这样的人工智能工具正在改变企业的运营方式,优化流程并显著提高生产力。通过重复任务的自动化、大量数据的分析以及内容创建效率的提高,组织正在寻找新的竞争和卓越方式。本文介绍了 DeepSeek 如何用于提高三个关键领域的生…...
ubuntu新系统使用指南
1. 更新源 2. 配置rime 输入法 sudo apt install ibus-rimeibus-setup #打开配置界面添加雾凇拼音 cd ~/Documents/Tool/input_source/plumgit clone --depth 1 https://github.com/rime/plum plum #没有梯子就劝退cd plum/bash rime-install iDvel/rime-ice:others/recipe…...
HaProxy配置详解
一、haproxy基础配置 官方文档:HAProxy version 2.2.22 - Configuration Manual HAProxy 的配置文件haproxy.cfg由两大部分组成,分别是global和proxies部分。 global:全局配置段 进程及安全配置相关的参数性能调整相关参数Debug参数 pro…...
PCL 基于FPFH特征的SAC-IA算法
文章目录 一、简介二、PCL中的相关类型二、实现代码三、实现效果参考资料一、简介 该算法的大致过程如下所示: 通过这种随机采样并使用FPFH描述子进行匹配的方式,可以快速找到一个较好的转换矩阵,从而实现两个物体的初始配准。 二、PCL中的相关类型 类型为:pcl::SampleCons…...
Git操作整体流程
文章目录 1.Git创建个人仓库2、Git全局配置3、Git本地管理4. Git本地管理常用命令汇总5、使用Git命令将项目提交到远程码云管理6.使用IDEA进行管理7、Idea里面的终端8、关于提交总结 1.Git创建个人仓库 打开https://gitee.com/,登录个人账号,右上角加号…...
独立开发者之PLG 和 SLG 是什么
什么是 PLG 和 SLG PLG(产品驱动增长)是一种策略,通过产品本身吸引用户并推动客户获取、保留和扩展。例如,提供免费试用或免费模式,让用户直接体验产品价值,如 Slack 和 Dropbox 那样。SLG(销售…...
Python 基本语法的详细解释
目录 (1)注释 (2)缩进 (3)变量和数据类型 变量定义 数据类型 (4)输入和输出 输出:print() 函数 输入:input() 函数 (1)注释 注…...
腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法
腾讯SQL面试题变体实现:最长连续天数与允许1天中断的进阶解法 作者:某七年数据开发工程师 | 2025年02月23日 关键词:滑动窗口、容错机制、连续区间优化 一、变体题型需求分析 在原题如何找出连续5天涨幅超过5%的股票基础上,需实现两个扩展场景: 最长连续天数:输出每只股…...
KubeKey一键安装部署k8s集群和KubeSphere详细教程
目录 一、KubeKey简介 二、k8s集群KubeSphere安装 集群规划 硬件要求 Kubernetes支持版本 操作系统要求 SSH免密登录 配置集群时钟 所有节点安装依赖 安装docker DNS要求 存储要求 下载 KubeKey 验证KubeKey 配置集群文件 安装集群 验证命令 登录页面 一、Ku…...
w803|联盛德|WM IoT SDK2.X测试|pinout|(2):w803开发板简介
概述 W803-Pico是一款基于联盛德W803芯片为主控的开发板,支持IEEE802.11 b/g/n Wi-Fi,以及BT/BLE4.2协议蓝牙。芯片内置高性能32位处理器,主频高达240MHz。内置2MB Flash以及288KB RAM。硬件采用DIP封装,PCB板载天线,…...
BGP分解实验·19——BGP选路原则之起源
当用不同的方式为BGP注入路由时,起源代码将标识路由的来源。 (在BGP表中,Network为“i”,重分布是“?”) 实验拓扑如下: R2上将来自IGP的路由10.3.3.3/32用network指令注入BGP;在R4上将来自I…...
使用ESP-IDF来驱动INMP441全向麦克风
之前的文章我们讲过了I2S。 I2S是什么通信协议?它如何传输音频数据?它和I2C是什么关系?_i2c接口和i2s-CSDN博客文章浏览阅读836次,点赞12次,收藏14次。这个可以参考ADC来理解,我们的ADC也是有左对齐和右对…...
C/C++跳动的爱心
系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…...
blender笔记2
一、物体贴地 物体->变换->对齐物体 ->对齐弹窗(对齐模式:反方,相对于:场景原点,对齐:z)。 之后可以设置原点->原点--3d游标 二、面上有阴影 在编辑模式下操作过后,物体面有阴影。 数据-&g…...
关于在mac中配置Java系统环境变量
引言 在 macOS 上开发 Java 或 Flutter 应用时,正确配置环境变量是至关重要的。环境变量不仅能让系统找到开发工具的位置,还能简化命令行操作。本文将手把手教你从零开始安装 Java SDK,并详细配置环境变量,涵盖常见问题解决和优化…...
透彻理解:方差、协方差、相关系数、协方差矩阵及其应用
最近看了几篇跨领域特征对齐方面的经典文献,学者们搞了很多花样,如有的提出一阶统计特征对齐,有的提出二阶统计特征对齐,有的学者提出高阶统计特征对齐。 通俗而言,就是在统计特征层面对跨域特征进行对齐,…...
【SPIE出版,见刊快速,EI检索稳定,浙江水利水电学院主办】2025年物理学与量子计算国际学术会议(ICPQC 2025)
2025年物理学与量子计算国际学术会议(ICPQC 2025)将于2025年4月18-20日在中国杭州举行。本次会议旨在汇聚全球的研究人员、学者和业界专家,共同探讨物理学与量子计算领域的最新进展与前沿挑战。随着量子技术的快速发展,其在信息处…...
jmeter后端监视器的妙用和实现方法
JMeter 的后端监视器(Backend Listener)是一个强大的工具,可用于收集、存储和分析测试过程中的性能指标。它允许将测试数据发送到外部系统(如 InfluxDB、Graphite 等),并借助这些系统的可视化工具ÿ…...
Docker 的安全配置与优化(二)
Docker 安全优化策略 (一)多阶段构建优化镜像大小 多阶段构建是 Docker 17.05 版本引入的强大功能,它允许在一个 Dockerfile 中定义多个构建阶段,每个阶段都可以使用不同的基础镜像和依赖项,最终只将必要的文件和依赖…...
宝塔扩容——阿里云如何操作
一、创建快照 磁盘快照,将数据备份,防止丢失。 1.登录“阿里云”账号 2.点击“控制台”——“云服务器 ECS” 3.点击“基本信息”下,右下角“系统盘” 4.点击“创建快照” 二、磁盘扩容 1.点击“云盘扩容” 2. 选择自己要扩容的大小 …...
vscode settings(一):全局| 用户设置常用的设置项
参考资料 Visual Studio Code权威指南 by 韩骏 一. 全局设置与用户设置 1.1 Vscode支持两种不同范围的设置 用户设置(User Settings):这是一个全局范围的设置,会应用到所有的Visual Studio Code实例中。工作区设置(Workspace Settings):设…...
DeepSeek R1本地+私有云版医疗AI部署开发成功案例技术剖析
1. 引言 1.1 研究背景与意义 随着科技的飞速发展,人工智能(AI)在医疗领域的应用正逐渐成为推动医疗行业变革的重要力量。近年来,医疗 AI 取得了显著的进展,从疾病诊断、药物研发到医疗管理等各个环节,AI 技术都展现出了巨大的潜力。它能够处理和分析海量的医疗数据,为…...
CMOS图像传感器——偏振光图像传感器技术
最近,在索尼官网看到了其提到的偏光图像传感器技术Polarsens,感到好奇,查阅了相关资料,总结如下。。。。 一、偏振光 偏振实际上是光的一种基本属性,表述光电场振动的方向。振动方向和光波前进的方向构成的平面叫振动面。大多数的光源,比如太阳,发出非偏振光,这里我们…...
ROS2 中 TF 变换发布与订阅:实现 base_link 和 test_link 实时可视化显示
视频讲解 ROS2 中 TF 变换发布与订阅:实现 base 安装环境依赖 sudo apt-get install ros-humble-tf2-ros ros-humble-tf2-geometry-msgs ros-humble-tf-transformations 创建一个包名为tf_test_pkg的包 ros2 pkg create --build-type ament_python tf_test_pkg -…...
SQLMesh 系列教程9- 宏变量及内置宏变量
SQLMesh 的宏变量是一个强大的工具,能够显著提高 SQL 模型的动态化能力和可维护性。通过合理使用宏变量,可以实现动态时间范围、多环境配置、参数化查询等功能,从而简化数据模型的开发和维护流程。随着数据团队的规模扩大和业务复杂度的增加&…...
逻辑函数的神经网络实现
1.单层感知器实现基本逻辑函数 先给大家抛出一道例题 (一)种类 a.OR函数 目标:当至少一个输入为1时,输出1;否则输出0。 权重设置: 输入权重:所有 wi1(i1,2,...,m)。…...
链表-基础训练(二)链表 day14
两两交换链表中的节点 题目示意: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 原先我的思路是图像上的思路,但是我感觉还是很复杂…...
使用大语言模型对接OA系统,实现会议室预定功能
随着人工智能技术的不断进步,越来越多的企业开始借助 AI 助手来提高工作效率,尤其是在日常事务的自动化处理中。比如,在许多公司里,会议室的预定是一个常见且频繁的需求,通常需要员工手动检查空闲时间并做出选择。而通…...
hugging face---transformers包
一、前言 不同于计算机视觉的百花齐放,不同网络适用不同情况,NLP则由Transformer一统天下。transformer是2017年提出的一种基于自注意力机制的神经网络架构,transformers库是hugging face社区创造的一个py库,通过该库可以实现统一…...
1. 自定义组件基础
相关资源: 📎day10 图片素材.zip 1. 自定义组件基础 概念:在ArkUI中由框架直接提供的称为系统组件 -> Column,Button等,由开发者定义的称为自定义组件 作用:自定义组件可以对 UI和业务逻辑进行封装&…...
连接Sql Server时报错无法通过使用安全套接字层加密与 SQL Server 建立安全连接
文章目录 一. 前言二. 解决方案 方案1方案2 三. 总结 一. 前言 在《数据库原理》这门课的实验上,需要使用SQL Server,然后使用jdbc连接sql server突然报错为:SQLServerException: “Encrypt”属性设置为“true”且 “trustServerCertific…...
python使用httpx_sse调用sse流式接口对响应格式为application/json的错误信息的处理
目录 问题描述方案 问题描述 调用sse流式接口使用httpx_sse的方式 import httpxfrom httpx_sse import connect_sse# 省略无关代码try:with httpx.Client() as client:with connect_sse(client, "GET", url, paramsparam) as event_source:clear_textbox(response_t…...
R 语言科研绘图 --- 散点图-汇总
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
【语音科学计算器】当前汇率
JSON_MARKER_HORN{“base”:“USD”,“rates”:{“EUR”:0.9758,“JPY”:157.68,“GBP”:0.8190,“CNY”:7.3327,“HKD”:7.7872,“AUD”:1.6260,“CAD”:1.4422,“CHF”:0.9157,“SGD”:1.3714,“KRW”:1473.05,“NZD”:1.7992,“THB”:34.54,“MYR”:4.4930,“PHP”:57.32,“…...
python 进程池的基本使用
Python 进程池:Pool任务调度实现 在现代计算机系统重,处理器核心数量的增加为并行计算提供了强大的硬件基础。Python的 multiprocessing 模块中的进程池(Pool)机制,为开发者提供了 一个高效且易用的并行处理框架。 通…...
初识XML
初识XML <?xml version"1.0" encoding"utf-8" ?> <!--根标签只能有一个--> <!--第一行永远都是 <?xml version"1.0" encoding"utf-8" ?> 前面不允许出现任何其他东西,空格换行等均不行 --> &…...
VisActor/VTable - 快速搭建表格
VTable源于VisActor体系,该体系是从字节跳动大量可视化场景沉淀而来,旨在提供面向叙事的智能可视化解决方案。VisActor包括渲染引擎、可视化语法、数据分析组件、图表组件、表格组件、GIS组件、图可视化组件、智能组件等多个模块,以及周边生态…...