java 技术之反射

一、通过反射获取对象的方式

1、如果知道一个class的完整类名,可以通过静态方法Class.forName()获取:

 Class<?> clazz = Class.forName("com.ahui.pojo.User");

 2、如果我们有一个实例变量,可以通过该实例变量提供的getClass()方法获取:        

    User user = new User();
    Class<? extends User> aClass = user.getClass();

3、直接通过一个class的静态变量class获取:

 Class<User> userClass = User.class;

二、对象属性的操作

1、获取对象属性的方法:

        getDeclaredFields():该方法可以获取到所有的属性包括private修饰的的属性
 //获取所有的成员属性
 Field[] fields = clazz.getDeclaredFields();
       getDeclaredField(String name):该方法通过属性名称获取到属性包括private修饰的的属性
 Field usernamme = clazz.getDeclaredField("usernamme");

                getFields() : 该方法只能获取public修饰的属性

Field[] fields = clazz.getFields();

                 getField(String name) :该方法可以通过属性名称获取到属性,对属性进行其他操作

 Field username = clazz.getField("username");

对象属性的相关操作


//获取所有的成员属性
Field[] declaredFields = clazz.getDeclaredFields();
for (Field declaredField : declaredFields) {
//获取属性类型
String type = declaredField.getType().toString();
//获取属性名
String name = declaredField.getName();
System.out.println("类型:"+ type);
System.out.println("名称:"+ name);
int modifiers = declaredField.getModifiers();
System.out.println("修饰符:" + modifiers);
}

2、获取对象构造方法:

        getDeclaredConstructors():该方法可以获取到所有的构造方法
Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors()
        getDeclaredConstructor(Integer.class, String.class):该方法根据参数类型、个数获取对应的构造方法
Constructor declaredConstructor = clazz.getDeclaredConstructor(Integer.class, String.class);

根据上面获取到的构造方法可以获取到构造方法的所有参数类型:

构造方法名.getParameterTypes();

 Class<?>[] parameterTypes = declaredConstructor.getParameterTypes();
        for (Class<?> parameterType : parameterTypes) {
            System.out.println(parameterType);
        }

 3、构造方法实例化对象:

构造方法是private修饰的所有在通过构造方法实例化对象时,需要将构造方法设置允许访问操作

declaredConstructor.setAccessible(true);//将方法设置允许访问操作

构造方法名.newInstance(1, "zhangsan"); //用newInstance(参数)实例化对象

 Object o = declaredConstructor.newInstance(1, "zhangsan");
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值