java反射基础_Java反射基础

1.反射的定义:在我看来反射就是在程序运行过程中通过解剖类/接口的信息来动态操作类/接口的一种机制

实验用例:

public classPerson{privateString name;public intold;public Person(){this.name="";this.old=-1;}public Person(String name,int old){this.name=name;this.old=old;}private voidprint()

{

System.out.println(this.name="已经"+this.old+"岁了!");

}publicString toString()

{return this.name+":"+this.old;

}//setter,getter

}

2.Class的获取

//1.通过.class获得

Class clazz=int.class;//2.通过.getClass()获得,不能用基本类型.getClass()

clazz=Integer.getClass();//3.通过Class.forName()获得

clazz=Class.forName("com.jz.reflect.Person")

3.Field的获取和操作

Field field=cl.getField("old");//获得公有字段信息

field=cl.getDeclaredField("name");//获得任意字段信息

Field[] fields=cl.getFields();//获得所有公有字段信息

fields=cl.getDeclaredFields();//获得所有字段信息

field.setAccessible(true);//如果要操作非公有字段必须设置

field.set(cl.newInstance(), "蒋曾");//将指定对象变量上此 Field 对象表示的字段设置为指定的新值

4.Method的获取和操作

Method method=clazz.getDeclaredMethod("print");//根据方法名和参数获得私有Method,这里参数为空

method.setAccessible(true);//如果要使用非公有方法必须要设置

Method[] methods=clazz.getMethods();//获得所有公有参数

method.invoke(clazz.newInstance(), null);//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法

5.Constructor的获取和操作

Constructor constructor=clazz.getConstructor(String.class,int.class);//根据参数类型获取构造器

constructor.newInstance("蒋曾",21);//通过构造器创建对象实例

6.修饰符类型获取和操作

int modifier=clazz.getModifiers();//通过Class,Field,Method,Constructor的getModifiers()获得一个int值

System.out.println(Modifier.toString(modifier));//Modifier的静态方法toString()获得修饰符

此外还有更多更详细的东西可以查询相关API java.lang和java.lang.reflect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值