Java中利用反射将类或接打印输出

中间有写的不好的地方,以后也会相应的更新,还望各位大佬多多指教

其中只能打印出方法的,不能打印出方法里面的内容。

public class Test001 {

	public static void main(String[] args) {
		//Object是要打印的类
		Class class1 = Object.class;

		// 获取类的包
		Package package1 = class1.getPackage();
		String packageName = package1.getName();
		// 打印包
		System.out.println(packageName);
		System.out.println();

		// 创建一个buffer拼接第一行
		StringBuffer buffer1 = new StringBuffer();
		// 获取类的修饰权限
		String classModifier = Modifier.toString(class1.getModifiers());
		buffer1.append(classModifier + " ");
		// 获取类的名字
		String className = class1.getSimpleName();
		if (!class1.isInterface()) {
			buffer1.append("class " + className + " ");
		}else {
			buffer1.append(className+" ");
		}
		// 获取继承的类
		if (class1.getSuperclass() != null) {
			String superClassName = class1.getSuperclass().getSimpleName();
			buffer1.append("extends " + superClassName + " ");
		}
		// 获取实现的接口
		Class[] interfacesNames = class1.getInterfaces();
		for (int i = 0; i < interfacesNames.length; i++) {
			if (i == 0) {
				buffer1.append("implements " + interfacesNames[i].getSimpleName());
			} else {
				buffer1.append("," + interfacesNames[i]);
			}
		}
		buffer1.append("{");
		// 打印出类的第一行
		System.out.println(buffer1.toString());
		System.out.println();

		// 获取类中的所有字段权限、类型和名字并打印
		Field[] classFields = class1.getDeclaredFields();
		for (int i = 0; i < classFields.length; i++) {
			System.out.println(Modifier.toString(classFields[i].getModifiers()) + " "
					+ classFields[i].getType().getSimpleName() + " " + classFields[i].getName() + ";");
		}
		System.out.println();

		// 获取所有的构造方法
		Constructor[] declaredConstructors = class1.getDeclaredConstructors();
		for (int i = 0; i < declaredConstructors.length; i++) {
			StringBuffer buffer2 = new StringBuffer();
			Constructor constructor = declaredConstructors[i];
			// 获取方法的权限并拼接
			buffer2.append(Modifier.toString(constructor.getModifiers()));
			buffer2.append(" " + className + "(");

			//
			Class[] constructorParameterTypes = constructor.getParameterTypes();
			Parameter[] parameters = constructor.getParameters();
			for (int j = 0; j < constructorParameterTypes.length; j++) {
				String constructorParameterName = constructorParameterTypes[j].getSimpleName();
				if (j == 0) {
					buffer2.append(constructorParameterName + " " + parameters[j].getName());
				} else {
					buffer2.append("," + constructorParameterName + " " + parameters[j].getName());
				}
			}
			buffer2.append("){" + System.getProperty("line.separator") + System.getProperty("line.separator"));

			String genericString = constructor.toGenericString();
			buffer2.append("}");
			System.out.println(buffer2.toString());
		}
		System.out.println();

		// 方法的获取与打印
		StringBuffer buffer3 = new StringBuffer();
		Method[] methods = class1.getMethods();
		for (int i = 0; i < methods.length; i++) {
			String mothodModifer = Modifier.toString(methods[i].getModifiers());
			buffer3.append(mothodModifer + " ");

			Class mothodReturnType = methods[i].getReturnType();
			String simpleName = mothodReturnType.getSimpleName();
			buffer3.append(simpleName + " ");

			String mothodName = methods[i].getName();
			buffer3.append(mothodName + " (");

			Class[] parameterTypes = methods[i].getParameterTypes();
			Parameter[] parameters = methods[i].getParameters();
			for (int j = 0; j < parameterTypes.length; j++) {
				String simpleName2 = parameterTypes[j].getSimpleName();
				String name = parameters[j].getName();
				if (j == 0) {
					buffer3.append(simpleName2 + " " + name);
				} else {
					buffer3.append("," + simpleName2 + " " + name);
				}
			}
			buffer3.append("){" + System.getProperty("line.separator"));

			buffer3.append("}" + System.getProperty("line.separator"));

			System.out.println(buffer3.toString());
			buffer3.delete(0, buffer3.length());
		}

	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值