博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java反射机制
阅读量:6172 次
发布时间:2019-06-21

本文共 2112 字,大约阅读时间需要 7 分钟。

Java -- 浅入Java反射机制

http://www.cnblogs.com/wjtaigwh/p/6640748.html

 

API中给我们提供了一下方法

getName():获得类的完整名字。

getFields():获得类的public类型的属性。
getDeclaredFields():获得类的所有属性。
getMethods():获得类的public类型的方法。
getDeclaredMethods():获得类的所有方法。
getMethod(String name, Class[] parameterTypes):获得类的特定方法,name参数指定方法的名字,parameterTypes 参数指定方法的参数类型。
getConstructors():获得类的public类型的构造方法。
getConstructor(Class[] parameterTypes):获得类的特定构造方法,parameterTypes 参数指定构造方法的参数类型。
newInstance():通过类的不带参数的构造方法创建这个类的一个对象。

获取类中全部属性

Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");

//获取本类中的全部属性
Field[] field = clazz.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
//权限修饰符
String priv = Modifier.toString(field[i].getModifiers());
//属性类型
Class<?> type = field[i].getType();
System.out.println("修饰符:" + priv + ",属性类型:" + type.getName());
}
//获取实现的接口或者父类的属性
Field[] fild1 = clazz.getFields();

for (int i = 0; i <fild1.length ; i++) {

int mo = fild1[i].getModifiers();
String priv = Modifier.toString(mo);
// 属性类型
Class<?> type = fild1[i].getType();
System.out.println(priv + " " + type.getName() + " " + fild1[i].getName() + ";");
}
获取类中的全部方法
Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");
Method method[] = clazz.getMethods();
for (int i = 0; i < method.length; i++) {
Class<?> returnType = method[i].getReturnType();
Class<?> para[] = method[i].getParameterTypes();
int temp = method[i].getModifiers();
System.out.println(method[i].getName() + "," + returnType.getName() + "," + Modifier.toString(temp));
for (int j = 0; j < para.length; j++) {
System.out.print(para[j].getName());
}
}

通过反射调用类中的方法

Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");

Method method = clazz.getMethod("getAge");

method.invoke(clazz.newInstance());

method = clazz.getMethod("setAge", int.class);
method.invoke(clazz.newInstance(), 20);

通过反射操作类中的属性(包括私有属性)

Class<?> clazz = Class.forName("com.qianmo.flowlayout.reflection.User");

User user = (User) clazz.newInstance();
Field field = clazz.getDeclaredField("age");
field.setAccessible(true);
field.set(user, 50);
System.out.print(field.get(user));

你可能感兴趣的文章
Django聚合数据
查看>>
Dictionary(一)
查看>>
Floyd算法(弗洛伊德算法)
查看>>
Eclipse项目中乱码问题的解决办法
查看>>
深度剖析:Java POJO Bean 对象与 Web Form 表单的自动装配
查看>>
ffmpeg-20160506-git-bin
查看>>
Verilog HDL基础语法讲解之模块代码基本结构
查看>>
【Tomcat】直接启动tomcat时为tomcat指定JDK 而不是读取环境变量中的配置
查看>>
CMake设置生成vs工程的动态库输出路径
查看>>
JS实现页面跳转 浏览器地址栏保持不变
查看>>
ATS项目更新(1) CC视图与备份路径同步
查看>>
世界上不存在完美的人性
查看>>
使用WIF实现单点登录Part I——Windows Identity Foundation介绍及环境搭建
查看>>
【转】UDID替代方案
查看>>
C#计算含中文字符串的长度
查看>>
ArrayList集合-JDK学习笔记
查看>>
为什么心跳包(HeartBeat)是必须的?
查看>>
ORM框架通过映射(反射)获取数据库的数据
查看>>
Lua读写文件
查看>>
springmvc集成swaggerui
查看>>