java类的反射

即反编译,基本上都是框架会使用反射.比如Spring。
首先新建一个Person类,。

package com.hui.reflect;
public class Person {
	private String name;
	private String age;
	public Person() {
	}
	public Person(String name,String age) {
		this.name = name;
		this.age = age;
	}
	get...set...
	@Author({"lisi","zhangsan"})
	public void readBook(){}
	
	}

在测试类中实验:
反射步骤:
1、 获取类的全路径

String className = "com.hui.reflect.Person";

2、 获取类的字节码文件

Class<?> clazz= Person.class;
或者
Class<?> clazz = Class.forName(className);

3、获取Person的实例化对象p

// 走无参构造
Person p = (Person) clazz.newInstance(); 
System.out.println(p);
// 走有参构造
Constructor<?> constructor = clazz.getConstructor(String.class,String.class);// 参数的类型
Person p2 = (Person) constructor.newInstance("jack", "23");
System.out.println(p2.getName());

4、获取类中的字段

// Field[] fields = clazz.getFields(); //获取公有的所有字段
Field[] declaredFields = clazz.getDeclaredFields(); // 获取所有字段,包括私有
for (Field field : declaredFields) {
		// 设置权限强制访问
		field.setAccessible(true);
		String name = field.getName(); // 获取字段的名字
		String value = (String) field.get(p2); // 从p2对象中获取该字段的值
		System.out.println(name + ".." + value);
}

5、获取类中的方法

// Method[] declaredMethods = clazz.getDeclaredMethods(); //获取所有方法,包括私有,可以遍历
	Method getName = clazz.getDeclaredMethod("getName");//获取指定的方法
	String result = (String) getName.invoke(p2);//获取该方法的返回值
	System.out.println(result);

6、获取方法注解的值

Method readBook = clazz.getMethod("readBook");
	// Annotation[] annotations = readBook.getAnnotations(); //获取此方法的所有注解
	// for(Annotation anno:annotations){
	// System.out.println(anno.toString());
	// }
Annotation annotation = readBook.getAnnotation(Author.class);
	System.out.println(annotation.toString());
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值