Java反射4
来源:互联网 发布:手机通话记录软件 编辑:程序博客网 时间:2024/06/06 10:57
1.3. 反射机制的功能
JAVA反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
4.在运行时调用任意一个对象的方法(*****注意:前提都是在运行时,而不是在编译时)
1.3.1.在运行时判断任意一个对象所属的类
1.3.2.在运行时构造任意一个类的对象
想生成对象的实体,在反射动态机制中有两种方法,
一个针对无变量的构造方法,
一个针对带参数的构造方法,如果想调用带参数的构造方法,就比较的麻烦,不能直接调用Class类中的newInstance(),而是调用Constructor类中newInstance()方法,首先准备一个Class[]作为Constructor的参数类型。然后调用该Class对象的getConstructor()方法获得一个专属的Constructor的对象,最后再准备一个Object[]作为Constructor对象昂的newInstance()方法的实参。
在这里需要说明的是 只有两个类拥有newInstance()方法,分别是Class类和Constructor类,Class类中的newInstance()方法是不带参数的,而Constructro类中的newInstance()方法是带参数的,需要提供必要的参数。
例:
Class c=Class.forName("DynTest");
Class[] ptype=new Class[]{double.class,int.class};
Constructor ctor=c.getConstructor(ptypr);
Object[] obj=new Object[]{new Double(3.1415),new Integer(123)};
Object object=ctor.newInstance(obj);
System.out.println(object);
1.3.3.在运行时调用类所具有的成员变量和方法
变更Field不需要参数和自变量,首先调用Class的getField()并指定field名称,获得特定的Field对象后便可以直接调用Field的 get(Object obj)和set(Object obj,Object value)方法
或使用java.beans.PropertyDescriptor类,例如:
属性赋值:
private static void setPropertyValue (String name,String value,Object object) throws Exception{
PropertyDescriptor property = new PropertyDescriptor(name, object.getClass());
if (property != null){
property.getWriteMethod().invoke(object, new Object[]{value});
}
}
获取属性值:
private static Object getPropertyValue(String name,String value,Object object) throws Exception{
PropertyDescriptor property = new PropertyDescriptor(name, object.getClass());
Object value = property.getReadMethod().invoke(entity, new Object[0]);
return vclaue;
}
1.3.4.在运行时调用任意一个对象的方法
这个动作首先准备一个Class[]{}作为getMethod(String name,Class[])方法的参数类型,接下来准备一个Obeject[]放置自变量,然后调用Method对象的invoke(Object obj,Object[])方法。
注意,在这里调用
public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception
{
Class ownerClass = owner.getClass();
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass[i] = args[i].getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}
- java反射(4)反射赋值
- Java反射4
- java反射4
- JAVA反射(4)
- 【反射】JAVA反射机制
- java反射详解(4)
- Java学习笔记4-反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- 我的RMI服务端为什么启动不了??
- 吃面要吃大碗的,找团队要找志同道合的!!!!!
- java反射机制reflect
- ubuntu显示中文文本乱码解决方法
- c++中的宏使用
- Java反射4
- JQuery选择器
- 从m中取n个元素-抽牌算法
- 在非纯色背景上,叠加背景透明的BUTTON和STATIC_TEXT控件
- 踏入C++中的雷区——C++内存管理详解(转)
- 单片机移位运算
- 新一代数据访问工具(三)--ObjectDataSource
- HWND和CWnd的关系及互相转换
- IE8中如何获得窗口的分辨率