反射获取Class对象的三种方式

本文详细介绍了在Java中使用反射获取Class对象的三种常见方式:通过类名.class,对象.getClass()以及Class.forName()。内容涵盖各自用法、应用场景及注意事项,帮助开发者深入理解Java反射机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@Test
    void contextLoads1() throws Exception {
        //获取class对象的三种方式
        //user.class 直接.class获取对象
        //new Class 创建对象获取对象
        //user.forName forName获取对象 这种方式需要包的全路径.对象的属性或者方法


        Class<User> userClass = User.class;
        //反射拿类的属性
        Field[] declaredField = userClass.getDeclaredFields();
        for (Field field : declaredField) {
            System.out.println(field);
        }
        //反射获取类中的方法
        Method[] declaredMethods = userClass.getDeclaredMethods();
        for (Method declaredMethod : declaredMethods) {
            System.out.println(declaredMethod);
        }
        //反射获取类中的构造方法
        Constructor<?>[] declaredConstructors = userClass.getDeclaredConstructors();
        for (Constructor<?> declaredConstructor : declaredConstructors) {
            System.out.println(declaredConstructor);
        }
        //获取其他信息
        Package aPackage = userClass.getPackage();
        String simpleName = userClass.getSimpleName();
        System.out.println(aPackage+":"+simpleName);

        //创建对象
        User user = (User) userClass.newInstance();
        System.out.println(user);
        //指定构造创建
        Constructor<User> declaredConstructor = userClass.getDeclaredConstructor(Integer.class, String.class);
        //生成对象
        User user1 = declaredConstructor.newInstance(1, "张三");
        System.out.println(user1);
        //给属性赋值
        //获得指定的属性

        Field name = userClass.getDeclaredField("name");
        //private修饰的属性是不可访问的,反射是可以访问的,需要我们添加设置
        name.setAccessible(true);
        name.set(user1,"李四");
        System.out.println(user1);

        //可以执行的方法
        //获取需要执行的方法
        Method getName = userClass.getDeclaredMethod("getName");
        String nameValue = (String)getName.invoke(user1);
        System.out.println(nameValue);

        Method setName = userClass.getDeclaredMethod("setName", String.class);

        setName.invoke(user1,"刘浩");
        System.out.println(user1.getName());
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值