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

网站开发 微信收款微信小游戏开发工具

网站开发 微信收款,微信小游戏开发工具,淘宝怎么推广,网站建设网站图片放哪个1. Java的反射机制是什么#xff1f; 反射(reflection) 当我们谈及反射#xff0c;可以将其比作正在照镜子的行为。就像你可以在禁止中看到自己的反射一样#xff0c;程序在运行时可以检查自身的机构和行为。这意味这程序可以动态地了解自己地组成部分#xff0c;比如类、…1. Java的反射机制是什么 反射(reflection) 当我们谈及反射可以将其比作正在照镜子的行为。就像你可以在禁止中看到自己的反射一样程序在运行时可以检查自身的机构和行为。这意味这程序可以动态地了解自己地组成部分比如类、方法和字段并且可以在运行时修改这些组成部分。这种能力使得程序可以更加灵活和动态地适应不同的需求和情况。 从概念上理解反射是一种程序在运行时可以检查和修改自身结构的能力。Java反射机制的主要特点和用法 获取Class对象通过类的全限定名、对象的 getClass() 方法或 Class 类的静态方法获取类的 Class 对象。实例化对象可以使用 Class 对象的 newInstance() 方法来实例化一个类的对象。在 Java 9 中newInstance() 方法已经被标记为废弃deprecated推荐使用其他方式来实例化对象。获取字段信息可以使用 Class 对象的 getFields()、getDeclaredFields() 方法获取类的公共和所有字段信息并使用 Field 对象来访问和修改字段的值。获取方法信息可以使用 Class 对象的 getMethods()、getDeclaredMethods() 方法获取类的公共和所有方法信息并使用 Method 对象来调用方法。调用方法可以使用 Method 对象的 invoke() 方法来调用一个方法。访问私有成员通过 setAccessible(true) 方法可以访问类的私有成员。泛型操作可以通过 Class 对象获取类的泛型信息。动态代理反射机制可以用于实现动态代理可以在运行时动态地创建代理类并处理方法调用。性能问题反射操作会带来一定的性能开销应该谨慎使用尽量避免在性能敏感的代码中过度使用反射。 2. 反射的核心Class类 看看JAVA源码中Class类中的注解 Instances of the class Class represent classes and interfaces in a running Java application. An enum type and a record type are kinds of class; an annotation type is a kind of interface. Every array also belongs to a class that is reflected as a Class object that is shared by all arrays with the same element type and number of dimensions. 类 Class 的实例表示运行中的 Java 应用程序中的类和接口。枚举类型和记录类型是类的一种注解类型是接口的一种。每个数组也属于一个类该类被反映为一个 Class 对象该对象由具有相同元素类型和维数的所有数组共享。 The primitive Java types (boolean, byte, char, short, int, long, float, and double), and the keyword void are also represented as Class objects. 原始 Java 类型boolean、byte、char、short、int、long、float 和 double以及关键字 void 也表示为 Class 对象。 Class has no public constructor. Instead a Class object is constructed automatically by the Java Virtual Machine when a class loader invokes one of the defineClass methods and passes the bytes of a class file. Class 没有公共构造函数。相反当类加载器调用 defineClass 方法之一并传递类文件的字节时Java 虚拟机会自动构造一个 Class 对象。 The methods of class Class expose many characteristics of a class or interface. Most characteristics are derived from the class file that the class loader passed to the Java Virtual Machine. A few characteristics are determined by the class loading environment at run time, such as the module returned by getModule(). Class 类的方法公开了类或接口的许多特征。大多数特征都源自类加载器传递给 Java 虚拟机的类文件。一些特征由运行时的类加载环境决定例如由 getModule() 返回的模块。 Some methods of class Class expose whether the declaration of a class or interface in Java source code was enclosed within another declaration. Other methods describe how a class or interface is situated in a nest. A nest is a set of classes and interfaces, in the same run-time package, that allow mutual access to their private members. The classes and interfaces are known as nestmates. One nestmate acts as the nest host, and enumerates the other nestmates which belong to the nest; each of them in turn records it as the nest host. The classes and interfaces which belong to a nest, including its host, are determined when class files are generated, for example, a Java compiler will typically record a top-level class as the host of a nest where the other members are the classes and interfaces whose declarations are enclosed within the top-level class declaration. Class 类的一些方法公开了在 Java 源代码中类或接口的声明是否被包含在另一个声明中。其他方法描述了类或接口如何位于一个嵌套中。嵌套是一个类和接口的集合在相同的运行时包中允许彼此访问其私有成员。这些类和接口被称为嵌套成员。一个嵌套成员充当嵌套主机并枚举属于嵌套的其他嵌套成员每个嵌套成员依次将其记录为嵌套主机。属于嵌套的类和接口包括其主机在生成类文件时确定例如Java 编译器通常会将顶级类记录为嵌套的主机其中其他成员是声明被包含在顶级类声明内部的类和接口。 总结一下上面内容 Class类的作用表示运行中的Java引用程序的类和接口通过Class对象可以获取和操作类的信息。 Class对象的获取可以通过类的全限定名类似字符串形式获取对应的Class对象也可以通过类的实例对象‘getClass’方法获取。 Class对象的构造Class类没有公共构造函数而是由虚拟机在需要时自动构造。 Class对象的特征Class对象的方法可以获取类或接口的特征这些特征大部分来自于类加载器加载类文件时传递给虚拟机的信息。换句话说类加载器在加载类文件时会提供一些关于类的信息这些信息包括类的结构、方法、字段等而这些信息可以通过class对象的方法获取。 Class对象和嵌套Class对象的一些方法可以用来描述类或接口在嵌套中的情况嵌套是一组允许互相访问私有成员的类和接口的集合。 在Java中嵌套是指一组类和接口它们在同一个运行时包runtime package中并且允许彼此访问私有成员private members。这些类和接口被称为嵌套成员nest members其中一个嵌套成员充当嵌套主机nest host并且枚举了属于该嵌套的其他嵌套成员。通过Class对象的方法我们可以了解类或接口在嵌套中的位置和关系以及它们之间如何互相访问私有成员。 举个例子 当一个类A中包含了另一个类B而类B又包含了类C这种情况就构成了嵌套结构。在这个例子中类A就是嵌套结构的主要部分而类B和类C是嵌套在类A中的成员。 public class A {private class B {private class C {public void methodC() {System.out.println(This is methodC);}}} }在这个例子中类A包含了类B类B包含了类C。现在我们可以使用反射来探索这个嵌套结构 public class Main {public static void main(String[] args) throws Exception {Class? classA A.class;Class? classB A.B.class;Class? classC A.B.C.class;System.out.println(Class A: classA.getName());System.out.println(Class B: classB.getName());System.out.println(Class C: classC.getName());// 获取类B中的所有成员类嵌套成员Class?[] nestMembersOfB classB.getNestMembers();System.out.println(Nest members of B:);for (Class? member : nestMembersOfB) {System.out.println(- member.getName());}// 获取类C的嵌套主机即类BClass? nestHostOfC classC.getNestHost();System.out.println(Nest host of C: nestHostOfC.getName());} }3. 整理一下问题 我们可以通过Class类做什么 Class类主要作用是允许程序在运行时获取类信息并通过反射机制实例化对象、访问和修改类的字段、调用类的方法等。 我们要怎么获取Class类的对象 使用.class语法 调用对象的getClass()方法 使用Class.forName()方法。 怎么修改一个字段值 import java.lang.reflect.Field;public class Main {public static void main(String[] args) throws Exception {MyClass myObject new MyClass(Hello, world!);System.out.println(Before modification: myObject.getMyField());Field field MyClass.class.getDeclaredField(myField);field.setAccessible(true); // 设置字段为可访问因为 myField 是私有字段field.set(myObject, Modified value);System.out.println(After modification: myObject.getMyField());} } 这段代码通过getDeclaredField()获取了私有字段 myField 的 Field 对象并通过 setAccessible(true) 方法设置了字段的可访问性因为 myField 是私有字段。最后我们使用 field.set(myObject, “Modified value”) 将 myField 的值修改为 “Modified value”。 Class类的常用方法 getName()获取类的名称。getModifiers()获取类的修饰符。getSuperclass()获取类的父类。getInterfaces()获取类实现的接口数组。getField(String name)获取指定名称的公共字段。getMethod(String name, Class?… - parameterTypes)获取指定名称和参数类型的公共方法。newInstance()通过无参构造方法实例化一个对象已过时。 怎么通过反射调用方法 使用 Method 对象的 invoke() 方法来调用一个方法。 反射机制用在动态代理 动态代理是一种利用反射机制在运行时创建代理类的技术。在 Java 中可以使用 java.lang.reflect.Proxy 类来创建动态代理。动态代理通常用于在不修改源代码的情况下对方法调用进行额外的处理比如添加日志、性能监控、事务管理等。 下面是一个简单的示例展示了如何使用动态代理 import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;// 定义一个接口 interface MyInterface {void myMethod(); }// 实现接口的类 class MyClass implements MyInterface {public void myMethod() {System.out.println(Real object method);} }// 实现 InvocationHandler 接口用于处理方法调用 class MyInvocationHandler implements InvocationHandler {private Object target;public MyInvocationHandler(Object target) {this.target target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(Before method call);Object result method.invoke(target, args);System.out.println(After method call);return result;} }public class Main {public static void main(String[] args) {MyClass realObject new MyClass();MyInterface proxyObject (MyInterface) Proxy.newProxyInstance(realObject.getClass().getClassLoader(),realObject.getClass().getInterfaces(),new MyInvocationHandler(realObject));proxyObject.myMethod();} } 在这个示例中我们定义了一个接口 MyInterface 和一个实现类 MyClass。然后我们使用 Proxy.newProxyInstance() 方法创建了一个动态代理对象 proxyObject并通过 MyInvocationHandler 来处理方法调用。在 MyInvocationHandler 中我们在调用实际方法前后添加了额外的逻辑。最后我们通过动态代理对象调用方法实际上会调用到 MyInvocationHandler 中的 invoke 方法从而实现了对方法调用的动态处理。 注意事项 反射操作影响性能谨慎使用newInstance() 方法在 Java 9 中被标记为废弃deprecated建议使用其他方式来实例化对象比如通过获取构造方法并调用构造方法来实现。
http://www.dnsts.com.cn/news/18674.html

相关文章:

  • 在58同城做网站怎么样小说网站得广告怎么做
  • 网站界面尺寸大小韩国最新新闻消息
  • 网站推广目标计划济南网站建设维护
  • 清丰网站建设中国哪里建设最多
  • 万网定制网站怎么样网站搜索算法
  • 中国建设银行云浮分行网站WordPress怎么做CMS
  • 公司注销的网站备案注册代理记账
  • 网站开发是什么工作html公益网站模板
  • 手机网站免费模板下载百度精简版网页入口
  • 上海seo网站建设上传网站再备案
  • 做侵权网站用哪里的服务器上海网络推广工资
  • 我想弄个网站品牌推广策划方案
  • 网站建设在会计里算什么资产外国风格网站建设价格
  • 虚拟空间是什么意思公司优化是什么意思?
  • 厦门微网站建设邯郸匿豪网络科技有限公司
  • 网站建设验收报告模板网站网页制作的步骤是什么
  • a站网址是什么电子商务平台的特点
  • dedecms视频网站模板外贸网络推广平台
  • wordpress手机图片站php能区别电脑网站和手机网站吗怎么嵌入到phpcms
  • 郑州做网站首选九零后网络网站后台视频
  • 公司网站建设提纲页面设计时最好用多少种颜色
  • 房产中介网站建设管理优秀网站制作
  • 邢台123网站模板广州市工商注册查询系统
  • 网站优化软件开发您没有足够的权限访问该页面 wordpress
  • 哪个网站可以做电子档的邀请函网站seo主要是做什么的
  • 用户体验 网站游戏开发和网站开发哪个好玩
  • 衡水建网站电子商务网站环境建设
  • 陈村大良网站建设成功案例
  • php语言做购物网站外贸谷歌优化
  • 天津做网站哪个公司好网推所是什么意思