java 框架之反射

反射:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。

//定义一个实体类
public class Test1 {
   private int i;
   private String str;
   private int dou;
public int getI() {
	return i;
}
public void setI(int i) {
	this.i = i;
}
public String getStr() {
	return str;
}
public void setStr(String str) {
	this.str = str;
}

public String toString()
{
	return str+" "+dou+" "+i;
}
public String getstr(String s,String s1)
{
	return s+" "+s1;
}
public Test1(int i, String str, int dou) {
	super();
	this.i = i;
	this.str = str;
	this.dou = dou;
}
public int getDou() {
	return dou;
}
public void setDou(int dou) {
	this.dou = dou;
}
public Test1() {
	super();
}
}
       //获得对象(有三种方式)
    	Test1 te=new Test1();
		//Class<? extends Test1> class1 = te.getClass();//通过对象名访问
    	Class<?> forName = Class.forName("test.Test1");//通过包名.类名
		//Class<? extends Class> class2 = Test1.class.getClass();//通过类名
//得到构造方法的集合
		Constructor<?>[] constructors = forName.getConstructors();
		for (Constructor<?> cou : constructors) {
			System.out.println(cou);
		}

运行结果:

public test.Test1()
public test.Test1(int,java.lang.String,int)

//创建无参数构造方法
		Constructor<?> cou = forName.getConstructor();
		cou.newInstance();
	     
		//创建有参数的构造方法
	    Constructor<?> cou1 = forName.getConstructor(int.class,String.class,int.class);
		cou1.newInstance(1,"23asdf",2);

也是获得同样的结果

public test.Test1()
public test.Test1(int,java.lang.String,int)

//获得属性(有两种方式)
		//1,新建一个实例
		Test1 nc2 = (Test1) forName.newInstance();
		nc2.setDou(321);
		nc2.setI(123);
		nc2.setStr("123asdf");
		
		//2,通过得到每一个属性
        Field i = forName.getDeclaredField("i");
        Field str = forName.getDeclaredField("str");
        Field dou = forName.getDeclaredField("dou");
        i.setAccessible(true);//true可以更改
        str.setAccessible(true);
        dou.setAccessible(true);
        i.set(te, 123);
        str.set(te, "123");
        dou.set(te, 12);
//得到方法
Test1 nc3 = (Test1) forName.newInstance();
Method method = forName.getMethod("getstr",String.class,String.class);//方法名称和参数字节码
Object inv = method.invoke(nc3, "123","abc");
System.out.println(inv);

结果

123 abc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值