Reflect in Java

java反射的使用:

  1 package com.test.struts2;
2
3 import java.lang.reflect.Constructor;
4 import java.lang.reflect.Field;
5 import java.lang.reflect.Method;
6
7 import com.opensymphony.module.sitemesh.util.ClassLoaderUtil;
8
9 public class TestReflect {
10
11 private String userName;
12
13 private String passWord;
14
15 public String userNamePublic;
16
17 public String passWordPublic;
18
19 private ClassLoader classLoader;
20
21 public static void main(String[] args) throws Exception {
22
23 Class clazz = Class.forName("com.test.struts2.TestReflect");
24
25 // 通过线程获取ClassLoder
26 Class clazz1 = Thread.currentThread().getContextClassLoader()
27 .loadClass("com.test.struts2.TestReflect");
28
29 // 通过.class获取ClassLoder(TestReflect参数只可以使自己包中命名的类)
30 Class clazz2 = TestReflect.class.getClassLoader().loadClass(
31 "com.test.struts2.TestReflect");
32
33 // Struts2中的ClassLoaderUtil类,对线程获取进行了分装
34 Class clazz3 = ClassLoaderUtil.loadClass(
35 "com.test.struts2.TestReflect", String.class);
36
37 // 新建实例(newInstance建立)
38 TestReflect testReflect = (TestReflect) clazz.newInstance();
39
40 // 属性(所有的的属性)
41 Field[] fields = clazz.getDeclaredFields();
42 System.out.println("---------所有属性 ");
43 for (Field field : fields) {
44 System.out.println(field.getName());
45 }
46
47 // 属性(public的属性)
48 System.out.println("---------public属性 ");
49 Field[] fieldsPublic = clazz.getFields();
50 for (Field field : fieldsPublic) {
51 System.out.println("public属性: " + field.getName());
52 }
53
54 // 通过getXXX和setXXX方法访问八个基本类型的值
55 // 如果该属性类型是引用类型则直接使用get(Object obj)
56 Field f = clazz.getDeclaredField("userName");
57 testReflect.setUserName("Hello");
58 System.out.println(f);
59 f.setAccessible(true);
60 f.set(testReflect, "111");
61 System.out.println(testReflect.getUserName());
62 System.out.println("调用了该方法:" + f.get(testReflect));
63
64 System.out.println("---------所有方法 ");
65 // 所有的方法
66 Method[] methods = clazz.getDeclaredMethods();
67 for (Method method : methods) {
68 System.out.println(method.getName());
69 }
70
71 System.out.println("---------public方法 ");
72 // public的方法
73 Method[] methodsPublic = clazz.getDeclaredMethods();
74
75 for (Method method : methodsPublic) {
76 System.out.println("public方法: " + method.getName());
77 }
78
79 // 方法的调用
80 for (Method method : methodsPublic) {
81 System.out.println("调用了方法: " + method.getName());
82 // method.invoke(obj, args);
83 }
84
85 System.out.println("---------构造器 ");
86 // 构造器
87 Constructor[] Constructors = clazz.getConstructors();
88 for (Constructor constructor : Constructors) {
89 System.out.println("构造器: " + constructor.getName());
90 }
91
92 if (testReflect instanceof TestReflect) {
93 System.out.println("YES: 我是TestReflect实例变量");
94 } else {
95 System.out.println("YES: 我不是TestReflect实例变量");
96 }
97
98 // 通过构造器实例化(),默认构造器
99 Constructor constructor = clazz.getConstructor(new Class[] {});
100 testReflect = (TestReflect) constructor.newInstance();
101 if (testReflect instanceof TestReflect) {
102 System.out.println("YES: 我是TestReflect实例变量");
103 } else {
104 System.out.println("YES: 我不是TestReflect实例变量");
105 }
106
107 // 通过构造器实例化(),默认构造器
108 Constructor constructorss = clazz.getConstructor(new Class[] {
109 String.class, String.class, String.class, String.class });
110 testReflect = (TestReflect) constructorss.newInstance(new Object[] {
111 "a", "b", "c", "4" });
112 if (testReflect instanceof TestReflect) {
113 System.out.println("YES: 我是TestReflect实例变量");
114 } else {
115 System.out.println("YES: 我不是TestReflect实例变量");
116 }
117 System.out.println("密码为:" + testReflect.getPassWord());
118
119 // 测试方法的调用
120 Method method = clazz.getDeclaredMethod("setUserName",
121 new Class[] { String.class });
122 method.invoke(testReflect, new Object[] { "good" });
123
124 method = clazz.getDeclaredMethod("getUserName", null);
125 System.out.println(method.invoke(testReflect, null));
126 }
127
128 public String getUserName() {
129 return userName;
130 }
131
132 public void setUserName(String userName) {
133 this.userName = userName;
134 }
135
136 public String getPassWord() {
137 return passWord;
138 }
139
140 public void setPassWord(String passWord) {
141 this.passWord = passWord;
142 }
143
144 public ClassLoader getClassLoader() {
145 return classLoader;
146 }
147
148 public void setClassLoader(ClassLoader classLoader) {
149 this.classLoader = classLoader;
150 }
151
152 public String getUserNamePublic() {
153 return userNamePublic;
154 }
155
156 public void setUserNamePublic(String userNamePublic) {
157 this.userNamePublic = userNamePublic;
158 }
159
160 public String getPassWordPublic() {
161 return passWordPublic;
162 }
163
164 public void setPassWordPublic(String passWordPublic) {
165 this.passWordPublic = passWordPublic;
166 }
167
168 public TestReflect(String userName, String passWord, String userNamePublic,
169 String passWordPublic) {
170 super();
171 this.userName = userName;
172 this.passWord = passWord;
173 this.userNamePublic = userNamePublic;
174 this.passWordPublic = passWordPublic;
175 }
176
177 public TestReflect() {
178 super();
179 }
180
181 }



I believe that we are who we choose to be. Nobody‘s going to come and save you, you‘ve got to save yourself. 我相信我们成为怎样的人是我们自己的选择。没有人会来拯救你,你必须要自己拯救自己。
原文地址:https://www.cnblogs.com/caroline/p/2382555.html