资讯专栏INFORMATION COLUMN

Java知识点总结(反射-通过反射操作类的属性和方法 )

jlanglang / 1906人阅读

摘要:知识点总结反射通过反射操作类的属性和方法知识点总结反射使用反射操作类的属性和方法通过反射调用构造方法,构造对象其实调用无参构造器张三调用有参构造器李四通过反射调用普通方法获取方法激活方法王武王武通过反射操作属性是属性,如果不写会这个私有属

Java知识点总结(反射-通过反射操作类的属性和方法 )

@(Java知识点总结)[Java, 反射]

使用反射操作类的属性和方法:

</>复制代码

  1. import java.lang.reflect.Constructor;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.InvocationTargetException;
  4. import java.lang.reflect.Method;
  5. public class Test03 {
  6. // 通过反射API调用构造方法,构造对象
  7. public static void getInstance(Class clazz){
  8. Student student;
  9. try {
  10. student = (Student) clazz.newInstance(); // 其实调用无参构造器
  11. student.setName("张三");
  12. System.out.println(student.getName());
  13. } catch (InstantiationException | IllegalAccessException e) {
  14. e.printStackTrace();
  15. }
  16. try {
  17. Constructor c = clazz.getDeclaredConstructor(int.class, String.class);// 调用有参构造器
  18. Student student2 = (Student) c.newInstance(1, "李四");
  19. System.out.println(student2.getName());
  20. } catch (NoSuchMethodException | SecurityException | InstantiationException |
  21. IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
  22. e.printStackTrace();
  23. }
  24. }
  25. // 通过反射API调用普通方法
  26. public static void method(Class clazz) {
  27. try {
  28. Student student = (Student) clazz.newInstance();
  29. // 获取方法
  30. Method method = clazz.getDeclaredMethod("setName", String.class);
  31. // 激活方法
  32. method.invoke(student, "王武"); // student.setName("王武");
  33. System.out.println(student.getName());
  34. } catch (InstantiationException | IllegalAccessException
  35. | NoSuchMethodException | SecurityException | IllegalArgumentException | InvocationTargetException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. //通过反射API操作属性
  40. public static void field(Class clazz){
  41. try {
  42. Student student = (Student) clazz.newInstance();
  43. Field f1 = clazz.getDeclaredField("name");
  44. // name 是private属性,如果不写会:IllegalAccessException
  45. f1.setAccessible(true); // 这个私有属性不用做安全检查了,可以直接访问
  46. f1.set(student, "赵六");
  47. Field f2 = clazz.getDeclaredField("sex"); // sex 是public 属性,不用忽略安全检查
  48. f2.set(student, "男");
  49. for (Field f : clazz.getDeclaredFields()) {
  50. f.setAccessible(true);
  51. System.out.println(f.get(student)); //注意参数是对象名,而不是属性名
  52. }
  53. } catch (NoSuchFieldException | SecurityException |
  54. IllegalArgumentException | IllegalAccessException | InstantiationException e) {
  55. e.printStackTrace();
  56. }
  57. }
  58. public static void main(String[] args) {
  59. String path = "com.gs.Student";
  60. try {
  61. Class clazz = Class.forName(path);
  62. //getInstance(clazz);
  63. //method(clazz);
  64. field(clazz);
  65. } catch (Exception e) {
  66. e.printStackTrace();
  67. }
  68. }
  69. }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71577.html

相关文章

  • Java识点总结反射-介绍)

    摘要:知识点总结反射介绍知识点总结反射反射程序在运行状态中,可以动态加载一个只有名称的类动态调用类的所有属性和方法加载完类之后,在堆内存中,就产生了一个类型的对象一个类只有一个对象。 Java知识点总结(反射-介绍) @(Java知识点总结)[Java, 反射] 反射 程序在 运行状态中 ,可以动态加载一个只有名称的类 (动态调用类的所有属性和方法)Class c = Class.for...

    msup 评论0 收藏0
  • Java识点总结反射-获取类的信息)

    摘要:知识点总结反射获取类的信息知识点总结反射应用反射的,获取类的信息类的名字属性方法构造器等获取类名类的全路径名称类名获取属性信息只能获取的属性获取所有的属性根据属性名称获取属性根据属性名称获取属性获取方法信息获取所有的方法,包括父类的方法获 Java知识点总结(反射-获取类的信息) @(Java知识点总结)[Java, 反射] 应用反射的API,获取类的信息(类的名字、属性、方法、构造器...

    shiweifu 评论0 收藏0
  • 1、类加载器 2、反射构造方法 3、反射成员变量 4、反射成员方法 5、反射配置文件运行类中的方法

    摘要:通过反射获取无参构造方法并使用得到无参构造方法获取所有的修饰的构造方法。如果方法没有返回值,返回的是反射获取空参数成员方法并运行代码演示反射获取成员方法并运行获取对象中的成员方法获取的是文件中的所有公共成员方法包括继承的类是描述 01类加载器 * A.类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。  ...

    Profeel 评论0 收藏0
  • Java反射详细介绍

    摘要:通过反射获取带参无返回值成员方法并使用设置安全检查,访问私有构造函数必须创建实例这种不行,注意和方法需要传递参数测试复制这个功能获取私有方法,同样注意和的区别赋予访问权限调用方法。 反射 目录介绍 1.反射概述 1.1 反射概述 1.2 获取class文件对象的三种方式 1.3 反射常用的方法介绍 1.4 反射的定义 1.5 反射的组成 1.6 反射的作用有哪些 2.反射的...

    ingood 评论0 收藏0
  • 最最最常见的Java面试题总结——第二周

    摘要:与都继承自类,在中也是使用字符数组保存字符串,,这两种对象都是可变的。采用字节码的好处语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。 String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? String和StringBuffer、StringBuilder的区别 可变性...

    yearsj 评论0 收藏0

发表评论

0条评论

jlanglang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<