java反射机制

java反射机制

1、实体类

package com.xsl.entity;


public class UserEntity {
    public String  name;
    protected String address;
    String tel;
    private String password;

    public UserEntity() {
    }

    @Override
    public String toString() {
        return "UserEntity{" +
                "name='" + name + '\'' +
                ", address='" + address + '\'' +
                ", tel='" + tel + '\'' +
                ", password='" + password + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public UserEntity(String name, String address, String tel, String password) {
        this.name = name;
        this.address = address;
        this.tel = tel;
        this.password = password;
    }

    public void printf(){
        System.out.println(name+address);
    }

    private void printf1(){
        System.out.println(name+address);
    }

    private UserEntity(String name){
        this.name = name;
    }

}

2、获取Class对象的方式

/**
     * 三种获取class对象方式
     * @throws ClassNotFoundException
     */
    @Test
    public void testReflect1() throws Exception {
        //1、通过全限定类名获取
        Class aClass = Class.forName("com.xsl.entity.UserEntity");
        UserEntity userEntity = new UserEntity();
        //2、通过类名.class获取
        Class aClass1 = userEntity.getClass();
        //3、通过对象.getClass获取
        Class aClass2 = new UserEntity().getClass();
    }

3、获取所有public修饰的字段、构造器、方法

/**
     * 所有的public修饰的字段、构造器、方法获取
     * @throws Exception
     */
    @Test
    public void testReflect2() throws Exception {
        Class aClass = Class.forName("com.xsl.entity.UserEntity");
        //获取所有的public修饰的类名
        System.out.println("================字段==================");
        Field[] fields = aClass.getFields();
        for (Field field: fields) {
            System.out.println("getFields遍历"+field);
        }
        System.out.println("===================构造器===============");
        //获取所有的公有构造器
        Constructor[] constructors = aClass.getConstructors();
        for (Constructor c : constructors) {
            System.out.println(c);
        }
        System.out.println("==================方法================");
        //获取所有的公有方法
        Method[] methods = aClass.getMethods();
        for (Method method :methods) {
            System.out.println(method);
        }
    }

4、指定public修饰的字段、构造器、方法的获取与使用

/**
     * 指定公有修饰的字段、构造器、方法获取及使用
     */
    @Test
    public void testReflect3() throws Exception {
        UserEntity userEntity = new UserEntity();
        userEntity.setName("肖生亮");
        Class aClass = Class.forName("com.xsl.entity.UserEntity");
        System.out.println("================字段==================");
        //获取单个公有字段
        Field name = aClass.getField("name");
        //利用这个类获取对象的值
        Object o = name.get(userEntity);
        System.out.println(o);
        //利用这个类设置对象的值
        name.set(userEntity,"肖生亮1");
        System.out.println(name.get(userEntity));
        System.out.println("=================构造器=================");
        //空参构造
        Constructor<UserEntity> constructor = aClass.getConstructor();
        UserEntity userEntity1 = constructor.newInstance();
        System.out.println(userEntity1);
        //全参构造
        Constructor<UserEntity> constructor1 = aClass.getConstructor(String.class, String.class, String.class, String.class);
        UserEntity userEntity2 = constructor1.newInstance("张海", "东软慧聚", "1231241", "zh123");
        System.out.println(userEntity2);
        System.out.println("=================方法=================");
        Method printf = aClass.getMethod("printf");
        printf.invoke(userEntity2);
    }

5、获取所有的字段、构造器、方法

/**
     * 所有字段、构造器、方法获取
     * @throws Exception
     */
    @Test
    public void testReflect4() throws Exception {
        Class aClass = Class.forName("com.xsl.entity.UserEntity");
        //获取所有的字段
        System.out.println("================字段==================");
        Field[] fields = aClass.getDeclaredFields();
        for (Field field: fields) {
            System.out.println("getFields遍历"+field);
        }
        System.out.println("===================构造器===============");
        //获取所有的构造器
        Constructor[] constructors = aClass.getDeclaredConstructors();
        for (Constructor c : constructors) {
            System.out.println(c);
        }
        System.out.println("==================方法================");
        //获取所有的方法
        Method[] methods = aClass.getDeclaredMethods();
        for (Method method :methods) {
            System.out.println(method);
        }
    }

6、指定所有的字段、构造器、方法的获取与使用

/**
     * 单个非公有字段、构造器、方法的获取及使用
     * @throws Exception
     */
    @Test
    public void testReflect5() throws Exception {
        Class aClass = Class.forName("com.xsl.entity.UserEntity");
        Constructor<UserEntity> constructor = aClass.getConstructor();
        UserEntity userEntity = constructor.newInstance();
        System.out.println("================字段==================");
        //获取私有字段
        Field password = aClass.getDeclaredField("password");
        //设置访问权限为可访问
        password.setAccessible(true);
        password.set(userEntity,"zh123");
        System.out.println(userEntity);
        Object o = password.get(userEntity);
        System.out.println(o);
        System.out.println("================构造器==================");
        Constructor<UserEntity> declaredConstructor = aClass.getDeclaredConstructor(String.class);
        declaredConstructor.setAccessible(true);
        UserEntity userEntity1 = declaredConstructor.newInstance("xsl");
        System.out.println(userEntity1);
        System.out.println("================方法==================");
        Method printf1 = aClass.getDeclaredMethod("printf1");
        printf1.setAccessible(true);
        printf1.invoke(new UserEntity("xsl","东软慧聚","123456","xsl123"));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值