当前位置: 首页 > news >正文

无需下载国外黄冈网站推广directadmin备份网站

无需下载国外黄冈网站推广,directadmin备份网站,英文购物网站建设,网站内容建设项目预算✅ 什么是反射机制#xff1f;为什么反射慢#xff1f; ✅典型解析✅拓展知识仓✅反射常见的应用场景✅反射和Class的关系 ✅典型解析 反射机制指的是程序在运行时能够获取自身的信息。在iava中#xff0c;只要给定类的名字#xff0c;那么就可以通过反射机制来获得类的所有… ✅ 什么是反射机制为什么反射慢 ✅典型解析✅拓展知识仓✅反射常见的应用场景✅反射和Class的关系 ✅典型解析 反射机制指的是程序在运行时能够获取自身的信息。在iava中只要给定类的名字那么就可以通过反射机制来获得类的所有属性和方法。 Java的反射可以: 1.在运行时判断任意一个对象所属的类 2.在运行时判断任意一个类所具有的成员变量和方法 3。在运行时任意调用一个对象的方法 4.在运行时构造任意一个类的对象 看一个Java反射机制代码 import java.lang.reflect.Field; import java.lang.reflect.Method; public class ComplexReflectionExample { public static void main(String[] args) throws Exception { // 获取Person类的Class对象 Class? personClass Class.forName(com.example.Person); // 创建一个新的Person对象 Object person personClass.getDeclaredConstructor().newInstance(); // 调用set方法设置属性值 Method setNameMethod personClass.getMethod(setName, String.class); setNameMethod.invoke(person, John Doe); Method setAgeMethod personClass.getMethod(setAge, int.class); setAgeMethod.invoke(person, 30); // 访问私有字段 Field nameField personClass.getDeclaredField(name); nameField.setAccessible(true); String name (String) nameField.get(person); System.out.println(Name: name); Field ageField personClass.getDeclaredField(age); ageField.setAccessible(true); int age ageField.getInt(person); System.out.println(Age: age); } }假设我们有一个名为com.example.Person的类其中包含一个私有字段name和一个私有方法setName和setAge。这个示例中我们使用反射机制来动态创建Person对象并调用它的setName和setAge方法来设置属性值。然后我们使用反射来访问私有字段name和age并打印它们的值。这个示例演示了如何使用反射机制来动态地创建对象、调用方法和访问字段即使它们是私有的。 所以我们应该在业务代码中应该尽量免使用反射但是作为一人合格的Java开发也要能懂中间件框架中的反射代码。在有些场景下要知道可以使用反射解决部分问题。 那么反射为什么慢呢? 主要由以下几个原因: 1、由于反射涉及动态解析的类型因此不能执行某些Java虚拟机优化如JIT优化 2、在使用反射时参数需要包装(boxing)成Obiect[ ] 类型但是真正方法执行的时候又需要再拆包(unboxing)成真正的类型这些动作不仅消耗时间而且过程中也会产生很多对象对象一多就容易导致GCGC也会导致应用变慢。 3、反射调用方法时会从方法数组中遍历查找并且会检查可见性。这些动作都是群时的 4、不仅方法的可见性要做检查参数也需要做很多额外的检查 看一段代码 public class ReflectionPerformanceDemo { public static void main(String[] args) throws Exception { // 创建Person对象 Person person new Person(John Doe, 30); // 使用反射获取name字段 Field nameField person.getClass().getDeclaredField(name); nameField.setAccessible(true); String name1 (String) nameField.get(person); // 使用直接访问获取name字段 String name2 person.getName(); // 使用反射调用setName方法 Method setNameMethod person.getClass().getMethod(setName, String.class); setNameMethod.invoke(person, Jane Doe); // 使用直接调用调用setName方法 person.setName(Jane Doe); // 输出结果 System.out.println(Reflection name: name1); System.out.println(Direct name: name2); } } class Person { private String name; private int age; public Person(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; } }创建了一个Person类其中包含一个私有字段name和一个私有方法setName。然后我们在main方法中创建了一个Person对象并分别使用反射和直接访问来获取name字段的值以及调用setName方法。最后我们输出结果。你会发现使用反射获取字段值和使用反射调用方法的时间都更长。这主要是因为反射机制需要在运行时解析类的元数据并且需要进行安全检查而直接访问字段和方法则不需要这些开销。因此在性能敏感的应用程序中应该尽量避免使用反射或者只在必要时使用反射。 ✅拓展知识仓 ✅反射常见的应用场景 1.动态代理 2.JDBC的class.forName 3.BeanUtils中属性值的拷贝 4.RPC框架 5.ORM框架 6.Spring的IOC/DI ✅反射和Class的关系 Java的Class类是iava反射机制的基础,通过Class类我们可以获得关于一个类的相关信息。 Java.lang.Class是一个比较特殊的类它用于封装被装入到VM中的类(包括类和接口)的信息。当一个类或接口被装入的JVM时便会产生一个与之关联的iava.lang.Class对象可以通过这个Class对象对被装入类的详细信息进行访问。 虚拟机为每种类型管理一个独一无二的Class对象。也就是说每个类(型)都有一个Class对象。运行程序时Java虚拟机(VM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载JVM就会根据类名查找.class文件并将其Class对象载入。 看一段代码吧。 import java.lang.reflect.Method; public class ReflectionExample { public static void main(String[] args) { try { // 获取String类的Class对象 Class? stringClass Class.forName(java.lang.String); // 输出类名 System.out.println(Class Name: stringClass.getName()); // 获取所有公共方法 Method[] methods stringClass.getMethods(); // 输出方法信息 System.out.println(Methods:); for (Method method : methods) { System.out.println( method.getName()); } // 获取并调用特定方法 Object str stringClass.getDeclaredConstructor().newInstance(); Method charAtMethod stringClass.getMethod(charAt, int.class); Character charAtPosition (Character) charAtMethod.invoke(str, 5); System.out.println(Character at position 5: charAtPosition); } catch (Exception e) { e.printStackTrace(); } } }使用Class.forName()方法获取java.lang.String类的Class对象。然后我们使用getName()方法获取类名使用getMethods()方法获取所有的公共方法使用getDeclaredConstructor()和newInstance()方法创建新的对象并使用getMethod()和invoke()方法调用特定的方法。
http://www.hkea.cn/news/14489137/

相关文章:

  • 广州建设高端网站怎么用ps做网站首页图片尺寸
  • 室内设计网站公司建邺做网站价格
  • 个人站长怎么做企业网站什么是h5网站
  • 网站外链建设可以提升网站权重吗wordpress怎么改为中文
  • 公司网站建设沈阳广州企业网站制作公司
  • 一站式网站搭建企业网站推广哪家好
  • 公司模板网站建设福州网站搜索引擎优化
  • 厦门网站设计推广公司国外 网站设计
  • 建设广告网站费用保险公司发展规划
  • 宝安龙华积分商城网站建设佛山网站建设专家
  • 二手书店网站建设规划书wordpress 多站点 子目录
  • 网站开发期末作品代码和数据库运行好大全吃什么补肾最快最好
  • 上海做网站比较好的公司有哪些网站开发外包维护合同
  • 网站建设的几点体会清远市住房与城乡建设局的网站查
  • 学校响应式网站建设塘沽信息
  • 重庆信息网站推广广州有哪些网络设计公司
  • 重庆在百度做个网站多少钱html网站开发教程
  • 东莞建设网站开发最优惠的建设网站建设
  • 营销网站方案设计做招聘网站需要什么人员
  • 自己做的网站如何上百度外地公司做的网站能备案
  • 网站怎么做限时抢购北京最新消息今天上午
  • wordpress评论邮件插件优化人员配置
  • 河北省住房城乡建设厅网站做自媒体可以搬运国外网站新闻吗
  • 群艺馆网站建设方案wordpress下载教程
  • 建设风景区网站的目的企业网站建设比较好
  • seo建站系统南约社区网站建设
  • 人社局网站建设方案打字赚钱平台 学生一单一结
  • 东北网站建设公司电子商务网页设计与网站建设
  • 服务器 网站打开慢如何让网站排名下降
  • 中山网站推广优化正规的彩票网站怎么做