JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
自己一个简单的应用:(实践过程中的一个错误,利用带参数构造函数获取实例的时候,抛出NoSuchMethodException,原因是我的购造函数里面用的是int,是一个类型,不是一个对象,改成Integer就没问题。)
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package net.kingbit.javaLearn;
import java.awt.Button;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Hashtable;
/**
*
* @author yankang <yankang.nd@163.com>
*/
public class ReflectionTest {
public static void main(String[] args) throws Exception {
Class cls=Class.forName("net.kingbit.javaLearn.TestBean");
// TestBean ts=(TestBean) cls.newInstance();
// System.out.println("cls name:"+cls.getName());
// Method[] methods=cls.getMethods();
// for(int i=0;i<methods.length;i++)
// {
//
// if(methods[i].getName().equalsIgnoreCase("setS"))
// {
// System.out.println("methods["+i+"]: "+methods[i].getName());
// methods[i].invoke(ts,new Object[]{"oo"});
// System.out.println("ts s:"+ts.getS());
//
// }
// if(methods[i].getName().equalsIgnoreCase("getS"))
// {
// System.out.println("methods["+i+"]: "+methods[i].getName());
// System.out.println("get s: "+methods[i].invoke(ts));
//
//
// }
// }
//
// Field[] fiels=cls.getDeclaredFields();//这个方法可以获取私有成员属性
// System.out.println("fiels length: "+fiels.length);
// for(int i=0;i<fiels.length;i++)
// {
// System.out.println("fiels["+i+"]: "+fiels[i].getName());
// }
// Field field=fiels[0];
//
// TestBean tb=new TestBean();
// System.out.println("className:"+tb.getClass().getName());
// ReflectionTest rt=new ReflectionTest();
// rt.getProperty(tb, "str");
int i=4;
String s="yk";
Object[] parameters=new Object[]{s,i};
Class[] classTypes=new Class[parameters.length];
for(int l=0;l<parameters.length;l++)
{
classTypes[l]=parameters[l].getClass();
System.out.println("classTypes["+l+"] :"+classTypes[l]);
}
Constructor con=cls.getConstructor(classTypes);
TestBean tb1=(TestBean) con.newInstance(parameters);
System.out.println("tb1 s:"+tb1.getS());
System.out.println("tb1 i: "+tb1.getI());
}
public Object getProperty(Object ownerClass,String fieldName) throws NoSuchFieldException, IllegalArgumentException, IllegalAccessException
{
Class cls=ownerClass.getClass();
Field[] fields=cls.getDeclaredFields();
Field field=null;
for(int i=0;i<fields.length;i++)
{
if(fields[i].getName().equalsIgnoreCase(fieldName))
{
System.out.println("fiels["+i+"]: "+fields[i].getName());
field=fields[i];
break;
}
}
Object property=field.get(ownerClass);
System.out.println("property :"+property);
return property;
}
}
class TestBean{
private String s;
private Integer i;
//public TestBean()
//{}
public TestBean(String s,Integer i)
{
this.s=s;
this.i=i;
}
public Integer getI() {
return i;
}
public void setI(Integer i) {
this.i = i;
}
public String getS() {
return s;
}
public void setS(String s) {
this.s = s;
}
}
分享到:
相关推荐
Java Reflection in Action is unique in presenting a clear account of all the cool things you can do with reflection, and at the same time pro- viding the sound conceptual basis that developers need to...
java reflection in action 2005 英文版
JAVA REFLECTION IN ACTION
Minning - A book talked about Java Reflection in details.
Java Reflection In Action(英文版)
Java Reflection in Action 英文书 pdf和文中源代码
Java反射经典实例 Java Reflection Cookbook[1].docx.pdf
Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性。例如,使用它能获得 Java 类中各成员的名称并显示出来。 Java 的这一能力在...
java reflection in action(2005)
Java Reflection in Action Java Reflection in Action is unique in presenting a clear account of all the cool things you can do with reflection, and at the same time providing the sound conceptual basis...
Java 反射(Reflection)是Java编程语言的一个重要特性,它允许程序在运行时动态地获取类的信息(如类名、方法、字段等)并直接操作对象的内部属性。这为开发者提供了强大的灵活性,能够在不预先知道具体类的情况下...
基于Java Reflection自动逆向生成类间方法关系图的解析器.pdf
"基于Java Reflection的数据库访问通用模型设计与实现" 本文提出了基于Java Reflection机制和面向接口的编程思想,设计并实现了一款Java数据库访问通用模型,该模型具有适用范围广、轻量级、可扩展性好等特点,可以...
Java Reflection (JAVA反射.mht
之前上课的时候老师总结的JavaReflection反射学习资料,内容简单易懂,浅显易懂,适合小白入手学习。。