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

东莞网站建设排行小米的网站设计

东莞网站建设排行,小米的网站设计,软件界面,天津网站app建设✅ 什么是反射机制#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.dnsts.com.cn/news/276294.html

相关文章:

  • 网站的原型怎么做网站开发前后端分离是主流吗
  • 沧州市网站设计做最好的色书网站
  • 网站建设公司dyfwzx上海企业网站制作哪家好
  • 郑州做网站优化公毕业设计开题报告网站开发
  • 廊坊推广seo霸屏清远网站seo
  • 网站开发实验报告总结北京医疗网站建设
  • 大连模板网建站wordpress幻灯片教程视频教程
  • wordpress小说网站主题微信营销平台源码下载
  • 有什么网站可以做商品展示的吗网站设计导航栏高度
  • 公益 建网站WordPress更新时间
  • 网站建设项目策划wordpress添加端口访问不了
  • 公司建设网站需要注意什么wordpress免费图床插件
  • 有关网页设计与网站建设的文章网站建设安全制度图片
  • 网站上传文件不存在电子商务网站建设与管理试卷6
  • 网站设计尺寸1920万网域名注册登录
  • 网站充值平台怎么做的宁波网站建设服务商
  • 做网站官网需多少钱安徽专业做网站的大公司
  • 娱乐网wordpress主题对网站进行优化
  • WordPress微博图片5000元网站seo推广
  • 网站建设方案是什么wordpress 主题上传
  • 网站搭建推广优化WordPress用户名怎么泄露的
  • 如何建设股权众筹网站网站的备案流程图
  • wordpress建站资源有免费建站的网站吗
  • 工作牌绍兴seo排名收费
  • 烟台网站推广如何安装wordpress博客
  • 电子商务网站建设品牌可信网站行业验证必须做吗
  • 安卓毕业设计代做网站网站访问工具
  • 网站用的服务器多少钱wordpress上传函数
  • 相亲网站如何做wordpress网站制作教程
  • 深圳网站建设及优化济南网站建设培训