在工商局网站做变更需要多久3g微网站
2026/4/17 3:28:31 网站建设 项目流程
在工商局网站做变更需要多久,3g微网站,wordpress修改邮件模板,广州市设计院官网目录 一、什么是反射#xff1f; 二、反射的用途 三、获取Class对象 四、Class类型的对象使用场景1 五、Class类型的对象使用场景2 六、通过反射创建对象 七、使用 Java 反射机制获取和调用类的构造方法#xff0c;访问私有构造方法并创建对象 八、通过反射#xff…目录一、什么是反射二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class类型的对象使用场景2六、通过反射创建对象七、使用 Java 反射机制获取和调用类的构造方法访问私有构造方法并创建对象八、通过反射访问并使用成员方法九、通过反射调用静态方法以及处理可变参数十、反射的性能问题十一、反射的安全性十二、反射的常见场景一、什么是反射**反射**(Reflection)是一种 Java 程序**运行期间**的**动态**技术可以在**运行时**(runtime)检査、修改其自身结构或行为。通过反射程序可以访问、检测和修改它自己的类、对象、方法、属性等成员二、反射的用途动态加载类:程序可以在运行时动态地加载类库中的类动态创建对象:反射可以基于类的信息程序可以在运行时动态创建对象实例;调用方法:反射可以根据方法名称程序可以在运行时动态地调用对象的方法(即使方法在编写程序时还没有定义)访问成员变量:反射可以根据成员变量名称程序可以在运行时访问和修改成员变量(反射可以访问私有成员变量)运行时类型信息:反射允许程序在运行时查询对象的类型信息这对于编写通用的代码和库非常有用;Spring 框架使用反射来自动装配组件实现依赖注入; MyBatis 框架使用反射来创建resultType 对象封装数据查询结果;三、获取Class对象反射的第一步是获取 Class 对象。Class 对象表示某个类的元数据可以通过以下几种方式获取//获取Class类型信息 public class Text02 { public static void main(String[] args) throws ClassNotFoundException { //方式1:通过类名 Class stringClass1 String.class; //方式2通过Class类的forName()方法 Class stringClass2 Class.forName(java.lang.String); //方式3通过对象调用getClass()方法 Class stringClass3 .getClass(); System.out.println(stringClass1.hashCode());//1604839423 System.out.println(stringClass2.hashCode());//1604839423 System.out.println(stringClass3.hashCode());//1604839423 } }四、Class类型的对象使用场景1将一个 JSON 字符串解析为 Java 对象并输出该对象的字段值。//Class类型的对象使用场景1 public class Text03 { public static void main(String[] args) { String json {\name\:\长安荔枝\,\favCount\:234}; //方法定义 Document docJSON.parseObject(json,Document.class); System.out.println(doc.getName()); System.out.println(doc.getFavCount()); } }使用 JSON.parseObject 方法将 JSON 字符串解析为 Document 类的对象。在解析过程中JSON 字符串中的数据会自动映射到 Document 类的对应字段中。五、Class类型的对象使用场景2通过 Class 对象在运行时获取一个类的相关信息包括类名、包名、成员变量字段、成员方法等。//Class类型的对象使用场景2 //获取丰富的类型内容 public class Text04 { public static void main(String[] args) throws ClassNotFoundException { Class clz Class.forName(java.util.HashMap); //获取类名 System.out.println(完全限定名clz.getName()); System.out.println(简单的类名clz.getSimpleName()); //获取包名 System.out.println(packageclz.getPackage().getName()); System.out.println(); //获取成员变量 Field[] fieldArray clz.getDeclaredFields(); System.out.println(成员变量(字段)); for(Field field:fieldArray) { System.out.println(field); } System.out.println(); //获取成员方法 Method[] methodArray clz.getDeclaredMethods(); System.out.println(成员方法); for(Method method:methodArray) { System.out.println(method); } } }clz.getName()返回类的完全限定名包括包名例如java.util.HashMap。clz.getSimpleName()返回类的简单名称不包括包名例如HashMap。clz.getPackage().getName()返回类所属的包名例如java.util。clz.getDeclaredFields()返回一个Field数组包含了类声明的所有字段包括私有字段。clz.getDeclaredMethods()返回一个Method数组包含了类声明的所有方法包括私有方法。六、通过反射创建对象方式一通过Class对象直接调用newInstance()方法方式二通过获取构造方法Constructor来创建对象。//通过反射的方式创建对象 public class Text05 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { Class clz Class.forName(com.apesource.demo01.Document); //方式1直接通过Class对象调用newInstance()方法 Object objx clz.newInstance();//相当于在执行无参构造方法 //方式2通过构造器(构造方法) //无参构造方法 Constructor constructor1 clz.getDeclaredConstructor();//获取无参构造方法 System.out.println(constructor1); Object obj1 constructor1.newInstance();//执行构造器(构造方法),创建对象 //有参构造方法 Constructor constructor2 clz.getDeclaredConstructor(String.class);//获取有参构造方法 System.out.println(constructor2); Object obj2 constructor2.newInstance(两京十五日); Constructor constructor3 clz.getDeclaredConstructor(int.class);//获取有参构造方法 System.out.println(constructor3); Object obj3 constructor3.newInstance(34); Constructor constructor4 clz.getDeclaredConstructor(String.class,int.class);//获取有参构造方法 System.out.println(constructor4); Object obj4 constructor4.newInstance(风起陇西,64); System.out.println(objx); System.out.println(obj1); System.out.println(obj2); System.out.println(obj3); System.out.println(obj4); }newInstance()方法是Class对象提供的一个方法它调用类的无参构造方法来创建类的实例。注意这个方法在 Java 9 以后已经被弃用推荐使用Constructor对象来创建实例。通过getDeclaredConstructor()方法获取Document类的无参构造方法然后调用newInstance()方法创建实例。注意如果类中没有无参构造方法调用getDeclaredConstructor()会抛出NoSuchMethodException。通过getDeclaredConstructor(String.class)获取带有一个String参数的构造方法并传入两京十五日作为参数来创建对象。通过getDeclaredConstructor(int.class)获取带有一个int参数的构造方法并传入34作为参数来创建对象。七、使用 Java 反射机制获取和调用类的构造方法访问私有构造方法并创建对象public class Text06 { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, SecurityException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException { Class clz Class.forName(com.apesource.demo01.Document); //获取一组构造器 Constructor[] constructorArray1 clz.getConstructors();//public Constructor[] constructorArray2 clz.getDeclaredConstructors();//public、private //获取指定构造器 Constructor constructor1 clz.getConstructor(); Constructor constructor2 clz.getDeclaredConstructor(String.class); System.out.println(constructor1); System.out.println(constructor2); //调用私有构造器必须设置它的访问全限 constructor2.setAccessible(true); //调用构造器创建对象 Object obj constructor2.newInstance(长安三万里); System.out.println(obj); } }getConstructors()方法返回一个包含所有公共public构造方法的数组。如果类中没有public构造方法则返回空数组。getDeclaredConstructors()方法返回一个包含所有声明的构造方法的数组包括私有的、受保护的和默认访问级别的构造方法。getConstructor()方法用于获取类的无参构造方法必须是public的。如果没有无参构造方法或者不是public则抛出NoSuchMethodException。getDeclaredConstructor(Class?... parameterTypes)方法用于获取指定参数类型的构造方法。这里通过传入String.class参数获取一个带有String参数的构造方法。这个构造方法可以是任何访问级别public、private、protected、默认。setAccessible(true)用于绕过 Java 访问控制机制使私有构造方法也可以被调用。如果不设置Accessible为true那么调用私有构造方法时会抛出IllegalAccessException。newInstance(Object... initargs)方法使用指定的构造方法创建对象。这里调用了带有String参数的构造方法并传入长安三万里作为参数。八、通过反射访问并使用成员方法public class Text08 { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { //硬编码的方式 // Document doc1 new Document(); // doc1.setName(海底两万里); // doc1.setFavCount(10025); //反射的方式 Class clz Class.forName(com.apesource.demo01.Document);//获取类型信息 Object doc1 clz.newInstance();//创建对象 //获取指定名称和参数类型的方法 Method setNameMethod clz.getMethod(setName, String.class); Method setFavCountMethod clz.getMethod(setFavCount, int.class); //执行方法 //doc1.setName(海底两万里); setNameMethod.invoke(doc1, 海底两万里); //doc1.setFavCount(10025); setFavCountMethod.invoke(doc1, 10025); System.out.println(doc1); } }getMethod(String name, Class?... parameterTypes)方法用于获取类的某个public方法。方法名称和参数类型必须匹配才能成功获取方法。invoke(Object obj, Object... args)方法用于调用指定的实例方法。setNameMethod.invoke(doc1, 海底两万里);等同于doc1.setName(海底两万里);。setFavCountMethod.invoke(doc1, 10025);等同于doc1.setFavCount(10025);。九、通过反射调用静态方法以及处理可变参数public class Text09_01 { public static void main(String[] args) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, NoSuchMethodException, SecurityException, ClassNotFoundException { //硬编码的方式 //调用静态方法 // Document.dosth(); String ret1 String.format(HashMap的默认初始容量是%d,加载因子是%.2f, 16,0.75f); System.out.println(ret1); //反射的方式 // Class clz Class.forName(com.apesource.demo01.Document); // Method dosthMethod clz.getMethod(dosth); // dosthMethod.invoke(null); Class clz String.class; Method formatMethod clz.getMethod(format, String.class,Object[].class); String ret2 formatMethod.invoke(null, HashMap的默认初始容量是%d,加载因子是%.2f,new Object[] {16,0.75f}).toString(); System.out.println(ret2); } }这是直接调用静态方法的传统方式。假设Document类有一个名为dosth()的静态方法可以直接使用类名调用。String.format是一个静态方法用于格式化字符串类似于printf的格式化规则获取String类的Class对象使用Class clz String.class;。获取String类的Class对象使用Class clz String.class;。调用静态方法使用invoke(null, HashMap的默认初始容量是%d,加载因子是%.2f, new Object[] {16, 0.75f})调用静态方法因为format是静态方法所以第一个参数是null。注意invoke方法中Object[]参数必须以数组形式传递所以用了new Object[] {16, 0.75f}。十、反射的性能问题反射虽然功能强大但由于是在运行时动态操作类因此性能相对较低。此外反射也会破坏封装性使用时要谨慎。十一、反射的安全性使用反射时需要注意安全问题因为它可以绕过 Java 的访问控制机制。例如可以访问私有字段或方法因此在开发中使用反射要特别小心。十二、反射的常见场景框架开发如 Spring 中的依赖注入、Hibernate 中的 ORM 等。调试工具如 Java 的调试器、分析工具等。动态代理在 Java 中动态代理依赖于反射。说真的这两年看着身边一个个搞Java、C、前端、数据、架构的开始卷大模型挺唏嘘的。大家最开始都是写接口、搞Spring Boot、连数据库、配Redis稳稳当当过日子。结果GPT、DeepSeek火了之后整条线上的人都开始有点慌了大家都在想“我是不是要学大模型不然这饭碗还能保多久”先给出最直接的答案一定要把现有的技术和大模型结合起来而不是抛弃你们现有技术掌握AI能力的Java工程师比纯Java岗要吃香的多。即使现在裁员、降薪、团队解散的比比皆是……但后续的趋势一定是AI应用落地大模型方向才是实现职业升级、提升薪资待遇的绝佳机遇如何学习AGI大模型作为一名热心肠的互联网老兵我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享**一、2025最新大模型学习路线一个明确的学习路线可以帮助新人了解从哪里开始按照什么顺序学习以及需要掌握哪些知识点。大模型领域涉及的知识点非常广泛没有明确的学习路线可能会导致新人感到迷茫不知道应该专注于哪些内容。我们把学习路线分成L1到L4四个阶段一步步带你从入门到进阶从理论到实战。L1级别:AI大模型时代的华丽登场L1阶段我们会去了解大模型的基础知识以及大模型在各个行业的应用和分析学习理解大模型的核心原理关键技术以及大模型应用场景通过理论原理结合多个项目实战从提示工程基础到提示工程进阶掌握Prompt提示工程。L2级别AI大模型RAG应用开发工程L2阶段是我们的AI大模型RAG应用开发工程我们会去学习RAG检索增强生成包括Naive RAG、Advanced-RAG以及RAG性能评估还有GraphRAG在内的多个RAG热门项目的分析。L3级别大模型Agent应用架构进阶实践L3阶段大模型Agent应用架构进阶实现我们会去学习LangChain、 LIamaIndex框架也会学习到AutoGPT、 MetaGPT等多Agent系统打造我们自己的Agent智能体同时还可以学习到包括Coze、Dify在内的可视化工具的使用。L4级别大模型微调与私有化部署L4阶段大模型的微调和私有化部署我们会更加深入的探讨Transformer架构学习大模型的微调技术利用DeepSpeed、Lamam Factory等工具快速进行模型微调并通过Ollama、vLLM等推理部署框架实现模型的快速部署。整个大模型学习路线L1主要是对大模型的理论基础、生态以及提示词他的一个学习掌握而L3 L4更多的是通过项目实战来掌握大模型的应用开发针对以上大模型的学习路线我们也整理了对应的学习视频教程和配套的学习资料。二、大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF三、大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。四、大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。五、大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。因篇幅有限仅展示部分资料需要点击下方链接即可前往获取2025最新版CSDN大礼包《AGI大模型学习资源包》免费分享

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询