Java 反射篇——获取构造方法
2022/3/27 20:22:47
本文主要是介绍Java 反射篇——获取构造方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java 反射篇——获取构造方法
1、简介
通过反射来获取一个类的构造器可以分为以下两步:
- 获取该类的字节码对象(类对象 Class)
- 从这个字节码对象去获取需要的构造器
2、代码实现
// 使用类对象 Class<?> myClass = Class.forName("com.zhang.reflect.Student"); // new Student() 无参构造方法 Object myObject = myClass.getDeclaredConstructor().newInstance(); // 获取有参数的构造方法 Object o = myClass.getDeclaredConstructor(String.class, String.class).newInstance("张三", "Tom"); // 获取所有的构造方法 Constructor<?>[] declaredConstructors = myClass.getDeclaredConstructors(); // 获取类的路径名字 System.out.println("类的全类名: " + myClass.getName()); System.out.println("类的简单类名: " + myClass.getSimpleName());
// 获取类对象 Class<?> myClass = Class.forName("com.zhang.reflect.Student"); // 获取所有的构造方法 ; 结果为构造方法数组 Constructor<?>[] constructors = myClass.getDeclaredConstructors(); // 迭代器获取数组里面构造方法数组里面每一个构造方法对象 for (Constructor constructor : constructors){ System.out.println(constructor.getName()); // 构造方法的名 System.out.println(constructor.getModifiers()); // 获取构造方法的修饰符 System.out.println(Modifier.toString(constructor.getModifiers())); // 人性化表达(默认为数字表达,对开发者不友好) // 获取构造方法所以的参数(每一个参数也是一个对象) Parameter[] parameters = constructor.getParameters(); for (Parameter parameter : parameters){ // 获取参数的名parameter.getName()[实际没有] parameter.getType()获得参数的类型返回的是一个对象,在获取参数类型对象的名字 // String.format() 格式化输出,第一个参数是格式化模式,后面的参数为格式化模式里面 %s(占位符)的个数 System.out.println(String.format("\t参数: %s %s", parameter.getType().getTypeName(),parameter.getName())); // 对程序来说参数名字没有意义 // parameter.getName()相当于 int index = 0; System.out.println("arg" + index); index ++;(满足你的需要) // 对于一个方法来说需要获取的东西有: - 修饰符 - 方法名 - 参数的个数 - 每个参数类型(反射全部可以做到)
3、思考
myClass = Class.forName("cn.jxufe.test.Cat"); 代码A:Object myObject = myClass.getDeclaredConstructor().newInstance(); 代码B:Object myObject = myClass.newInstance(); 请从个人理解的角度对代码A、B的异同进行评述
- 代码A 可以获取有参数的构造方法也可以获取无参数的构造方法
- 代码B 默认为使用无参数的构造方法
- 相同 : 都可以通过反射获取类对象且实例化
行者不止,打之无疆
这篇关于Java 反射篇——获取构造方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?