一个例子让你了解Java反射机制
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个例子让你了解Java反射机制
JAVA反射机制:
通俗地说,反射机制就是可以把一个类,类的成员(函数,属性),当成一个对象来操作,希望读者能理解,也就是说,类,类的成员,我们在运行的时候还可以动态地去操作他们.
理论的东东太多也没用,下面我们看看实践 Demo ~
Demo:
1.package cn.lee.demo;
2.
3.import ng.reflect.Constructor;
4.import ng.reflect.Field;
5.import ng.reflect.InvocationTargetException;
6.import ng.reflect.Method;
7.import ng.reflect.Modifier;
8.import ng.reflect.TypeVariable;
9.
10.public class Main {
11. /**
12. * 为了看清楚Java反射部分代码,所有异常我都最后抛出来给虚拟机处
理!
13. * @param args
14. * @throws ClassNotFoundException
15. * @throws InstantiationException
16. * @throws IllegalAccessException
17. * @throws InvocationTargetException
18. * @throws IllegalArgumentException
19. * @throws NoSuchFieldException
20. * @throws SecurityException
21. * @throws NoSuchMethodException
22. */
23. public static void main(String[] args) throws ClassNotFoundException, Instanti
ationException, IllegalAccessException, IllegalArgumentException, InvocationTa rgetException, SecurityException, NoSuchFieldException, NoSuchMethodExcept ion {
24. // TODO Auto-generated method stub
25.
26. //Demo1. 通过Java反射机制得到类的包名和类名
27. Demo1();
28. System.out.println("========================================
=======");
29.
30. //Demo2. 验证所有的类都是Class类的实例对象
31. Demo2();
32. System.out.println("========================================
=======");
33.
34. //Demo3. 通过Java反射机制,用Class 创建类对象[这也就是反射存在
的意义所在],无参构造
35. Demo3();
36. System.out.println("========================================
=======");
37.
38. //Demo4: 通过Java反射机制得到一个类的构造函数,并实现构造带参
实例对象
39. Demo4();
40. System.out.println("========================================
=======");
41.
42. //Demo5: 通过Java反射机制操作成员变量, set 和 get
43. Demo5();
44. System.out.println("========================================
=======");
45.
46. //Demo6: 通过Java反射机制得到类的一些属性:继承的接口,父类,
函数信息,成员信息,类型等
47. Demo6();
48. System.out.println("========================================
=======");
49.
50. //Demo7: 通过Java反射机制调用类中方法
51. Demo7();
52. System.out.println("========================================
=======");
53.
54. //Demo8: 通过Java反射机制获得类加载器
55. Demo8();
56. System.out.println("========================================
=======");
57.
58. }
59.
60. /**
61. * Demo1: 通过Java反射机制得到类的包名和类名
62. */
63. public static void Demo1()
64. {
65. Person person = new Person();
66. System.out.println("Demo1: 包
名: " + person.getClass().getPackage().getName() + ","
67. + "完整类名: " + person.getClass().getName());
68. }
69.
70. /**
71. * Demo2: 验证所有的类都是Class类的实例对象
72. * @throws ClassNotFoundException
73. */
74. public static void Demo2() throws ClassNotFoundException
75. {
76. //定义两个类型都未知的Class , 设置初值为null, 看看如何给它们赋值
成Person类
77. Class> class1 = null;
78. Class> class2 = null;
79.
80. //写法1, 可能抛出 ClassNotFoundException [多用这个写法]
81. class1 = Class.forName("cn.lee.demo.Person");
82. System.out.println("Demo2:(写法1) 包
名: " + class1.getPackage().getName() + ","
83. + "完整类名: " + class1.getName());
84.
85. //写法2
86. class2 = Person.class;
87. System.out.println("Demo2:(写法2) 包
名: " + class2.getPackage().getName() + ","
88. + "完整类名: " + class2.getName());
89. }
90.
91. /**
92. * Demo3: 通过Java反射机制,用Class 创建类对象[这也就是反射存在的
意义所在]