注解和反射13-动态创建对象执行方法

本文展示了如何使用Java反射API来动态创建对象,包括通过Class.forName获取类信息,使用构造器newInstance创建实例,调用方法及修改私有属性。还强调了setAccessible(true)在访问私有成员时的重要性。
摘要由CSDN通过智能技术生成

小结

  • 在实际操作中,取得类的信息的操作代码,并不会经常开发
  • 一定要熟悉java.lang.reflect包的作用,反射机制
  • 如何获取属性,方法,构造器的名称,修饰符等

在这里插入图片描述


package com.kuang.reflection;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

//动态创建队形 通过反射
public class Test09 {
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException, NoSuchFieldException {
        Class c1  = Class.forName("com.kuang.reflection.User");
        //构造一个对象
//        User user = (User) c1.newInstance();//本质调用了类的无参构造器
//        System.out.println(user);

        //通过构造器创建对象
//        Constructor declaredConstructor = c1.getDeclaredConstructor(String.class, int.class,int.class);
//        User user2 = (User) declaredConstructor.newInstance("王志伟", 001, 18);
//        System.out.println(user2);
        //通过反射调用普通方法
        User user3 = (User)c1.newInstance();
        Method setName = c1.getDeclaredMethod("setName", String.class);
        //invoke激活
        //(对象,"方法的值")
        setName.invoke(user3,"wzw");
        System.out.println(user3.getName());
        //通过反射操作属性
        User user4 = (User)c1.newInstance();
        Field name = c1.getDeclaredField("name");

        //不能直接操作私有属性,关掉程序的安全检测,属性或者方法的额setAccessible(true)
        name.setAccessible(true);//关掉检测
        name.set(user4,"wzw2");
        System.out.println(user4.getName());

    }
}


在这里插入图片描述


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值