Java学习笔记-反射-分析类的能力

本文深入探讨Java反射机制,重点解析Constructor、Method及Field类的功能与使用。通过具体代码示例,展示如何获取类的构造器、方法和域信息,以及如何读取修饰符和参数类型。

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

在Java.lang.reflect包中有四个类Class,Constructor,Method以及Field。我们称之为Class类、构造器类、方法类以及域类。其中Class类我们已经说过了,今天我们来谈一谈类的反射中,分析类能力的核心三类Constructor,Method,以及Field类。它们分别用于描述类的构造器方法以及。这是Java反射机制的三大核心类。我们还将涉及一个类:Modifier类,我们使用getModifiers()方法获得修饰符,并使用Modifier.toString()以字符串输出修饰符。

Class类中的getFields、getMethods、getConstructors方法分别返回类提供的public域、方法以及构造器数组,如果此类继承于某个超类,同时也包括超类的public部分。
Class类中的getDeclareFields、getDeclareMethods、geDeclaretConstructors方法将返回类中声明的全部域、方法以及构造器数组,其中包括私有和受保护成员,但是不包括超类的成员。

1.Constructor

public static void printConstructors(Class cl){//输出构造器
		Constructor[] constructors=cl.getDeclaredConstructors();//构建构造器类的数组
		for(Constructor c:constructors){//遍历数组
			String name=c.getName();//构造器的名字
			String modifiers=Modifier.toString(c.getModifiers());//返回修饰符
			if(modifiers.length()>0){
				System.out.print(modifiers+" ");
			}
			System.out.print(name+"(");
			Class[] paramTypes=c.getParameterTypes();//返回参数
			for(int j=0;j<paramTypes.length;j++){
				if(j>0)
					System.out.print(",");
				System.out.print(paramTypes[j].getName());
			}
			System.out.print(")");
		}
	}

重要API:

Constructor[] Class.getDeclaredConstructors()//获得Class类的构造器类数组
int Constructor.getModifiers()//获得构造器类的修饰符(用int表示)
String Modifier.toString()//以字符串输出修饰符
Class[] Constructor.getParameterTypes()//获得构造器类的参数Class类数组

2.Method

public static void printMethods(Class cl){//输出方法
	Method[] methods=cl.getDeclaredMethods();//构建方法类的数组
	for(Method c:methods){//遍历数组
		String name=c.getName();//方法的名字
		String modifiers=Modifier.toString(c.getModifiers());//返回修饰符
		if(modifiers.length()>0){
			System.out.print(modifiers+" ");
		}
		System.out.print(name+"(");
		Class[] paramTypes=c.getParameterTypes();//返回参数
		for(int j=0;j<paramTypes.length;j++){
			if(j>0)
				System.out.print(",");
			System.out.print(paramTypes[j].getName());
		}
		System.out.print(")");
	}		
}

重要API:

Method[] Class.getDeclaredMethods()//获得Class类的方法类数组
int Method.getModifiers()//获得方法类的修饰符(用int表示)
String Modifier.toString()//以字符串输出修饰符
Class[] Method.getParameterTypes()//获得方法类的参数Class类数组

3.Field

public static void printFields(Class cl){//输出域
		Field[] fields=cl.getDeclaredFields();//构建域类的数组
		for(Field c:fields){//遍历数组
			String name=c.getName();//域参数的名字
			String modifiers=Modifier.toString(c.getModifiers());//返回修饰符
			if(modifiers.length()>0){
				System.out.print(modifiers+" ");
			}
			System.out.print(name);
		}
	}

重要API:

Field[] Class.getDeclaredFields()//获得Class类的域类数组
int Field.getModifiers()//获得域类的修饰符(用int表示)
String Modifier.toString()//以字符串输出修饰符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值