首页 / JAVA / Java总结篇系列:Java 反射
Java总结篇系列:Java 反射
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java总结篇系列:Java 反射,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5412字,纯文字阅读大概需要8分钟。
内容图文
Java反射:
1
package
com.corn;
2
3
import
java.lang.reflect.Constructor;
4
import
java.lang.reflect.Field;
5
import
java.lang.reflect.InvocationTargetException;
6
import
java.lang.reflect.Method;
7
8
public
class
TestReflect {
9
10
public
static
void
main(String[] args) {
11
12
//
获取“类类型对象” 方法1
13 Class<?> c0 = User.class;
14 15// 获取“类类型对象” 方法2 16 User user1 = new User();
17 Class<?> c1 = user1.getClass();
18 19 User user2 = new User();
20 Class<?> c2 = user2.getClass();
21 22 System.out.println("user class instance 0:" + c0); //user class instance 0:class com.corn.User 23 System.out.println("user class instance 1:" + c1); //user class instance 1:class com.corn.User 24 System.out.println("user class instance 2:" + c2); //user class instance 2:class com.corn.User
25 26//c0 == c1 :true, c1 == c2 :true 27 System.out.println("c0 == c1 :" + (c0 == c1) + ", c1 == c2 :" + (c1 == c2));
28 29try {
30// 获取“类类型对象” 方法3 31 Class<?> c3 = Class.forName("com.corn.User");
32 System.out.println("user class c3:" + c3); //user class c3:class com.corn.User 33 34try {
35 User user3 = (User) c3.newInstance();
36 37//Constructor public com.corn.User(int,java.lang.String,int)
38//Constructor public com.corn.User(int,java.lang.String)
39//Constructor public com.corn.User() 40 Constructor<?>[] cons = c3.getConstructors();
41for (int i = 0; i < cons.length; i++) {
42// 一次返回类定义中所有public修饰符修饰的“构造器对象”,其与类定义中的构造器顺序不一定相同 43 System.out.println("Constructor " + cons[i]);
44 }
45 46try {
47 User user4 = (User) cons[1].newInstance(51, "corn");
48//user instance 4:user instance uid:51 name:corn 49 System.out.println("user instance 4:" + user4);
50 51// 返回特定参数类型的“构造器对象”所新建的实例 52 User user40;
53 user40 = (User) c3.getConstructor(int.class, String.class).newInstance(520, "corn0");
54//user instance 40:user instance uid:520 name:corn0 55 System.out.println("user instance 40:" + user40);
56 57// 返回该类“类类型对象”的所有的父类“类类型对象” 58 Class<?> father = c3.getSuperclass();
59//father class instance class com.corn.Person 60 System.out.println("father class instance " + father);
61 62//返回类对象所有的接口对象(其实也是类类型对象)数组 63 Class<?>[] interfaceArray = c3.getInterfaces();
64//interface class instance 0 interface com.corn.Workable
65//interface class instance 1 interface com.corn.Thinkable 66for (int i = 0; i < interfaceArray.length; i++) {
67// 与implements中接口顺序相同 68 System.out.println("interface class instance " + i + " " + interfaceArray[i]);
69 }
70 71 } catch (IllegalArgumentException e) {
72 e.printStackTrace();
73 } catch (InvocationTargetException e) {
74 e.printStackTrace();
75 }
76 77 } catch (InstantiationException e) {
78 e.printStackTrace();
79 } catch (IllegalAccessException e) {
80 e.printStackTrace();
81 }
82 } catch (ClassNotFoundException e) {
83 e.printStackTrace();
84 } catch (Exception e) {
85 e.printStackTrace();
86 }
87 88// 返回“类类型对象”所具有的全部属性实例/对象 89 Field[] fieldArray = c0.getDeclaredFields();
90//filed 0 private int com.corn.User.uid
91//filed 1 private java.lang.String com.corn.User.name
92//filed 2 private int com.corn.User.age 93for (int i = 0; i < fieldArray.length; i++) {
94 System.out.println("filed " + i + " " + fieldArray[i]);
95 }
96 97 User u = new User(12, "yumidi", 99);
98 99try {
100// 直接获取private/私有属性的值101 Field nameField = c0.getDeclaredField("name");
102//取消Java对访问修饰符的检查 103 nameField.setAccessible(true);
104 String nameValue = (String) nameField.get(u);
105//name:yumidi106 System.out.println("name:" + nameValue);
107108// 直接改变private/私有属性的值109 nameField.set(u, "corn");
110//new name:corn111 System.out.println("new name:" + u.getName());
112113 } catch (NoSuchFieldException e) {
114 e.printStackTrace();
115 } catch (SecurityException e) {
116 e.printStackTrace();
117 } catch (Exception e) {
118 e.printStackTrace();
119 }
120121//访问私有方法122try {
123 Method method = c0.getDeclaredMethod("getResult");
124//取消Java对访问修饰符的检查125 method.setAccessible(true);
126int result = (int) method.invoke(u);
127//result:1000128 System.out.println("result:" + result);
129130 } catch (NoSuchMethodException e) {
131 e.printStackTrace();
132 } catch (SecurityException e) {
133 e.printStackTrace();
134 } catch (Exception e) {
135 e.printStackTrace();
136 }
137138 }
139}
140141class User extends Person implements Workable, Thinkable {
142143privateint uid;
144private String name;
145privateint age;
146147public User() {
148149 }
150151private User(int uid) {
152this.uid = uid;
153 }
154155protected User(String name) {
156this.name = name;
157 }
158159public User(int uid, String name) {
160this.uid = uid;
161this.name = name;
162 }
163164public User(int uid, String name, int age) {
165this.uid = uid;
166this.name = name;
167this.age = age;
168 }
169170publicint getUid() {
171return uid;
172 }
173174publicvoid setUid(int uid) {
175this.uid = uid;
176 }
177178public String getName() {
179return name;
180 }
181182publicvoid setName(String name) {
183this.name = name;
184 }
185186publicint getAge() {
187return age;
188 }
189190publicvoid setAge(int age) {
191this.age = age;
192 }
193194privateint getResult() {
195return 1000;
196 }
197198 @Override
199public String toString() {
200return "user instance uid:" + this.uid + " name:" + this.name;
201 }
202203}
204205class Person {
206207}
208209interface Workable {
210211}
212213interface Thinkable {
214215 }
原文:http://www.cnblogs.com/lwbqqyumidi/p/4107011.html
内容总结
以上是互联网集市为您收集整理的Java总结篇系列:Java 反射全部内容,希望文章能够帮你解决Java总结篇系列:Java 反射所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。