当前位置: 首页 > 后端技术 > Java

重温经典api——Java的反射API接口

时间:2023-04-02 01:13:21 Java

Java的反射机制是使其动态化的一个非常关键的机制,也是JavaBean中广泛使用的一个特性。使用JavaBean最常见的问题是:根据指定的类名、类字段名和对应的数据,得到该类的实例。Java的反射的作用是让我们在运行时加载、检测和使用在编译过程中完全未知的类。换句话说,Java程序可以加载一个在运行时已知名称的类,了解其完整结构(但不包括方法定义)并生成其对象实体,或为其字段设置值,或调用其方法1。反射与“正交”?既然有反射,就有“正交”?比较:?有一个无参构造方法的类Test?获取实例的比较:?“正”:直接从类中使用关键字new要获取的类名语法:newTest()反射:未知类名运行时获取类型名:例如:ClassnewoneClass=Class.forName(args[i]);Objecto=newoneClass.newInstance();args[i]=“test”参数当然也可以从配置文件中获取。反射与“正交”?既然有反射,就有“正交”?比较:?有类Test没有无参构造或者不准备使用无参构造来实例化?比较获取实例:?"Positive":使用关键字new获取类名直接给定的参数语法:newTest(objectargs[])?反射:未知类名的未知构造函数(必须是public构造函数)获取类型名以及运行时构造参数:例如:首先获取类类型:ClassnewoneClass=Class.forName(args[i]);然后从参数类型列表中获取要调用的构造函数:Constructorcon=newoneClass.getConstructor(ClassArgs);然后从构造方法中获取实例:Objecto=con.newInstance(objectargs[]);当然也可以从配置文件中获取参数。直接调用参数:obj.methodname(objectargs[])此时方法名已知,参数类型已知?反射:未知方法名参数个数调用的方法m=?newOneClass.getMethod(“methodname”,类参数);然后给对应的实参调用:m.invoke(obj,objectargs[]);