初学反射

根据万物皆对象的思想,先创建要获取类的对象,在这里类就是我们的对象。我们要获取整个类的类名,属性,构造函数以及方法。

获取修饰符的方法是:
int modifiers=(class)c.getModifiers(),返回值是一个(int),使用 Modifier.toString(modifiers);

获取属性的方法:
Field[] fields = c.getDeclaredFields();
类型:field.getType();

获取方法的方法:
c.getDeclaredMethods();

获取构造函数的方法:
c.getDeclaredConstructors();

获取类

	Class c = Class.forName("com.pro.domain.Users");//
	StringBuilder bf=new StringBuilder();	

	//类的访问修饰符
	int modifiers = c.getModifiers();
	String classModif = Modifier.toString(modifiers);
	bf.append(classModif+" class "+c.getSimpleName()+"{");

类的名字是包名加类名:
在这里插入图片描述

获取属性

Field[] fields = c.getDeclaredFields();
	for (Field field : fields) {
		//取属性的访问修饰符
		String propertyModify=Modifier.toString(field.getModifiers());
		
		//取属性的类型
		Class propertyType = field.getType();
		String propertyTypeName = propertyType.getSimpleName();
		
		//取属性的名称
		String propertyName = field.getName();
		
		bf.append("\n\t"+propertyModify+" "+propertyTypeName+" "+propertyName+";");
	}

获取方法

//方法
	Method[] methods = c.getDeclaredMethods();
	for (Method method : methods) {
		//1,方法的访问修饰符
		String methodModify=Modifier.toString(method.getModifiers());
		
		//2,方法的返回类型
		Class returnType = method.getReturnType();
		String methodReturnTypeName = returnType.getSimpleName();
		
		//3
		String methodName = method.getName();
		bf.append("\n\t"+methodModify+" "+methodReturnTypeName+" "+methodName+"(");
		
		//4,方法参数
		Class[] parameterTypes = method.getParameterTypes();
		for(int i=0;i<parameterTypes.length;i++){
			if(i==parameterTypes.length-1){
				bf.append(parameterTypes[i].getSimpleName());
			}else{
				bf.append(parameterTypes[i].getSimpleName()+",");
			}
		}
		//4			
		bf.append("){\n\t}");
	}

获取构造函数

//构造
	Constructor[] constructors = c.getDeclaredConstructors();
	for (Constructor ct : constructors) {
		//1
		String constrModify=Modifier.toString(ct.getModifiers());
		
		//2
		String constrName = ct.getName();
		
		bf.append("\n\t"+constrModify+" "+constrName+"(){\n\t}");
		
	}
	
	
	bf.append("\n}");
	System.out.println(bf);

完整代码

private static void b() throws ClassNotFoundException {
		Class c = Class.forName("com.pro.domain.Users");
		
		StringBuilder bf=new StringBuilder();	
	
		//类的访问修饰符
		int modifiers = c.getModifiers();
		String classModif = Modifier.toString(modifiers);
		bf.append(classModif+" class "+c.getSimpleName()+"{");
		
		Field[] fields = c.getDeclaredFields();
		for (Field field : fields) {
			//取属性的访问修饰符
			String propertyModify=Modifier.toString(field.getModifiers());
			
			//取属性的类型
			Class propertyType = field.getType();
			String propertyTypeName = propertyType.getSimpleName();
			
			//取属性的名称
			String propertyName = field.getName();
			
			bf.append("\n\t"+propertyModify+" "+propertyTypeName+" "+propertyName+";");
		}
		
		//方法
		Method[] methods = c.getDeclaredMethods();
		for (Method method : methods) {
			//1,方法的访问修饰符
			String methodModify=Modifier.toString(method.getModifiers());
			
			//2,方法的返回类型
			Class returnType = method.getReturnType();
			String methodReturnTypeName = returnType.getSimpleName();
			
			//3
			String methodName = method.getName();
			bf.append("\n\t"+methodModify+" "+methodReturnTypeName+" "+methodName+"(");
			
			//4,方法参数
			Class[] parameterTypes = method.getParameterTypes();
			for(int i=0;i<parameterTypes.length;i++){
				if(i==parameterTypes.length-1){
					bf.append(parameterTypes[i].getSimpleName());
				}else{
					bf.append(parameterTypes[i].getSimpleName()+",");
				}
			}
			//4			
			bf.append("){\n\t}");
		}
		//构造
		Constructor[] constructors = c.getDeclaredConstructors();
		for (Constructor ct : constructors) {
			//1
			String constrModify=Modifier.toString(ct.getModifiers());
			
			//2
			String constrName = ct.getName();
			
			bf.append("\n\t"+constrModify+" "+constrName+"(){\n\t}");
			
		}
		
		
		bf.append("\n}");
		System.out.println(bf);
		
		/*	*/
	}

运行结果图

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值