JAVA通过反射获取类的类名、属性名、属性类型、方法、执行方法、构造函数

@Data
@NoArgsConstructor
@AllArgsConstructor
public class QueueTest {

	private String date = "2021";
	private int number;
		
}

public class GetBean {
	
	static String path = "com.test.queue.QueueTest"; 

	// 反射获取类的类名、属性名、属性类型、方法、执行方法、构造函数
	public static void start() throws Exception {
		
		Class clazz = Class.forName(path);
		
		/**
         * 	获取类名
         */
		// 获取完整类名com.skd.queue.QueueTest
        String strName01 = clazz.getName();
        // 直接获取类名 QueueTest
        String strName02 = clazz.getSimpleName();

        /**
         * 	获取属性
         */
        // 返回属性为public的字段
        Field[] field01 = clazz.getFields();
        // 返回所有的属性
        Field[] field02 = clazz.getDeclaredFields();
        // 获取属性为id的字段
        Field field03 = clazz.getDeclaredField("date");

        /**
         * 	获取普通方法
         */
        // 返回public方法
        Method[] Method01 = clazz.getDeclaredMethods();
        // 返回getDate这个方法,如果没有参数,就默认为null
        Method method = clazz.getDeclaredMethod("getDate", null);


        /**
         * 	获取构造方法
         */
        // 获取无参的构造函数这里的前提的保证类中应该有无参的构造函数
        QueueTest u1 = (QueueTest) clazz.newInstance();
        // 获取参数为(String,int)的构造函数
        Constructor c2 = clazz.getDeclaredConstructor(String.class, int.class);
        // 通过有参构造函数创建对象
        QueueTest u2 = (QueueTest) c2.newInstance("小小", 18);


        // 通过反射调用普通方法
        QueueTest u3 = (QueueTest) clazz.newInstance();
        Method method03 = clazz.getDeclaredMethod("setDate", String.class);
        // 把对象u3的date设置为8888
        method03.invoke(u3, "8888");
        
        
        // 通过反射操作普通的属性
        QueueTest u4 = (QueueTest) clazz.newInstance();
        Field f = clazz.getDeclaredField("date");
        // 设置属性可以直接的进行访问
        f.setAccessible(true); 
        f.set(u4, "石头");
        
	}
	
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值