您的位置:首页 > 职场人生

黑马程序员之反射

2015-09-06 20:47 477 查看
——- android培训java培训、期待与您交流! ———-

Java反射机制主要提供了以下功能:

1,在运行时判断任意一个对象所属的类;

2,在运行时构造任意一个类的对象;

3,在运行时判断任意一个类所具有的成员变量和方法;

4,在运行时调用任意一个对象的方法;生成动态代理。

1、 得到对象的属性

public Object getProperty(Object owner, String fieldName) throws Exception {
Class ownerClass = owner.getClass();  //获取字节码对象
Field field = ownerClass.getField(fieldName);  //获取类声明的属性
Object property = field.get(owner);     //得到该属性的实例
return property;
}


2. 得到类的静态属性

public Object getStaticProperty(String className, String fieldName)       throws Exception {
Class ownerClass = Class.forName(className);   //获取字节码对象
Field field = ownerClass.getField(fieldName);    //获取类声明的属性
Object property = field.get(ownerClass);      //得到该属性的实例
return property;
}


3. 执行对象的方法

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++) {   //配置参数的Class数组,作为寻找Method的条件
argsClass = args.getClass();
}
Method method = ownerClass.getMethod(methodName, argsClass);
return method.invoke(owner, args);
}


4. 新建实例

public Object newInstance(String className, Object[] args) throws Exception {

Class newoneClass = Class.forName(className);

Class[] argsClass = new Class[args.length];

for (int i = 0, j = args.length; i < j; i++) {

argsClass = args.getClass();
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}

public Object newInstance(String className, Object[] args) throws Exception {
Class newoneClass = Class.forName(className);
Class[] argsClass = new Class[args.length];
for (int i = 0, j = args.length; i < j; i++) {
argsClass = args.getClass();
}
Constructor cons = newoneClass.getConstructor(argsClass);
return cons.newInstance(args);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: