Java反射

本文深入介绍了Java反射机制的基本原理及应用。重点讲述了如何利用反射获取类的字段信息,并提供了多种获取反射实例的方法。同时,文章还展示了如何通过反射来获取和修改属性值,以及如何将对象序列化为JSON。

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

很多自动化的功能都是通过反射完成的,这对很多框架是非常重要的,因为很多框架就是做顶层抽象处理公用的逻辑,所以对于实现层的东西是不清楚的,有了反射机制,框架就可以在运行时获取到自己需要的实现层的一些信息
Java的的反射包java.lang.reflect中提供的最常用且重要的几个类就是Field、Method、Constructor这3个类了
Field提供如下几种方法:

  • Class.getDeclaredField(String name);返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括私有成员)。
  • Class.getDeclaredFields();返回 Field 对象的一个数组,该数组包含此 Class 对象所表示的类或接口所声明的所有字段(包括私有成员)

我们先定义一个普通类

	public class Person 
	{
		public String name;
		private Integer age;
		private String sex;
		...
	}

在使用的时候

	Person person =new Person();
	//通过Class.getDeclaredField(String name)获取类或接口的指定已声明字段。
	Field f1=person.getClass().getDeclaredField("name");
	Field []f2=person.getClass().getDeclaredFields();

打印出结果为

	-----Class.getDeclaredField(String name)用法-------
	public java.lang.String com.xx.test.Person.name
	-----Class.getDeclaredFields()用法-------
	public java.lang.String com.xx.test.Person.name
	private java.lang.Integer com.xx.test.Person.age
	private java.lang.String com.xx.test.Person.sex

获取反射的三种方式

	   //方式一 :通过对象的getClass()方法
		Class<?> clazz1 = str.getClass();
		
		//方式二:通过类的class属性
		Class<?> clazz2 = String.class;
		
		//方式三:通过Class类的静态方法forName(String className)
		Class<?> clazz3 = Class.forName("java.lang.String");

获取属性的属性值并修改属性值

获取属性的值用get(Object obj)的方法,但是获取私有属性的时候必须先设置Accessible为true,然后才能获取。

	Person person =new Person();
	Field f1=person.getClass().getDeclaredField("name");
	System.out.println(f1.get(person));

对象序列化成json

在序列化的时候,先利用反射找到对象类的所有get方法,接下来去get,然后小写化,作为json的每个key值,而get方法的返回值作为value。接下来再反射field,添加到json中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值