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

高清免费爱做网站企业网址怎么注册

高清免费爱做网站,企业网址怎么注册,深圳房地产网站建设,java动态网站开发心得✅ 什么是反射机制?为什么反射慢? ✅典型解析✅拓展知识仓✅反射常见的应用场景✅反射和Class的关系 ✅典型解析 反射机制指的是程序在运行时能够获取自身的信息。在iava中,只要给定类的名字,那么就可以通过反射机制来获得类的所有…

在这里插入图片描述

✅ 什么是反射机制?为什么反射慢?

  • ✅典型解析
  • ✅拓展知识仓
    • ✅反射常见的应用场景
    • ✅反射和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)成真正的类型,这些动作不仅消耗时间,而且过程中也会产生很多对象,对象一多就容易导致GC,GC也会导致应用变慢。


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.ds6.com.cn/news/15298.html

相关文章:

  • 做网站有什么意义世界十大网站排名
  • 临沂国际外贸网站建设站长之家网站模板
  • 做网站是怎么收费的是按点击率百度信息流推广是什么意思
  • 临平建设局网站优化网站最好的刷排名软件
  • 做电影网站怎么挣钱广告投放优化师
  • 学院网站设计方案站长之家官网
  • 保健品企业网站比优化更好的词是
  • 自己做的网站图片挡住了导航栏免费做网站怎么做网站链接
  • 网站建设翻译seo关键字排名优化
  • 佛山建设专业网站怎么推广产品
  • 百科wordpress整站seo服务
  • 郑州网站推广公司排名优化大师官网登录入口
  • wordpress utc时间差12个小时抖音seo排名优化软件
  • 广东三网合一网站建设报价推广引流图片
  • 官方网站建设投标书每日关键词搜索排行
  • 焦作市住房和城乡建设局网站seo教学网站
  • 网站建设平台best网络推广平台
  • 网站平台建设方案站长之家排行榜
  • 我的世界怎么做充值点卷网站网络优化排名培训
  • 什么是纯动态网站互联网广告推广是做什么的
  • 那些网站可以找得到做货代的长尾关键词什么意思
  • 衡东网页设计百度快照优化
  • 手机网站域名解析怎么做网络营销推广方法
  • 一个人做两个博客网站百度关键词相关性优化软件
  • 域名网站建设方案湖南网站seo营销
  • 西宁好的网站建设百度云网页版登录入口
  • 护肤品网站建设的意义青岛seo整站优化招商电话
  • 网站地址栏图标制作服务营销论文
  • 部队网站建设建议抖音seo培训
  • 做网站用什么版本系统武汉网站seo德升