java 内省 反射_Java的反射和内省

1.反射

反射是指在运行过程中,可以获取任意类的属性和方法信息;

对于任意对象,都可以获取调用其任意方法;

这种动态获取类信息和动态调用对象方法的方式称为Java语言的反射机制;

public class ReflectTest {

public static void main(String[] args) {

User user = new User();

try {

Field nameField = user.getClass().getDeclaredField("name");//获取属性name的对象

nameField.setAccessible(true);//解除权限检查

nameField.set(user,"xiaomi");//设置属性值

String name = (String)nameField.get(user);//获取属性值

System.out.println(name);

} catch (Exception e) {

e.printStackTrace();

}

}

}

2.内省

标准JavaBean类,属性值的操作是由其get和set方法来操作的;

内省(Introspector)是Java语言对JavaBean类属性、事件的处理方法;

Java提供了一套API来访问某个属性的getter/setter方法,这些API存放在java.beans中;

public class IntrospectorTest {

public static void main(String[] args) {

User user = new User();

try {

//操作指定属性名称的属性

PropertyDescriptor pd = null;

pd = new PropertyDescriptor("name", User.class);

Method w = pd.getWriteMethod();//获取属性的set方法

w.invoke(user, "mini");

Method r = pd.getReadMethod();//获取属性的get方法

r.invoke(user, null);

System.out.println(user.toString());

//操作所有属性

BeanInfo bi = Introspector.getBeanInfo(User.class);

PropertyDescriptor[] pds = bi.getPropertyDescriptors();

for(PropertyDescriptor p : pds){

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值