java反射机制学习(三):通过反射获取实体类的属性、方法、接口和父类信息

使用的实体类Person:
interface China {
	public static final String NATIONL="中国";//国籍
	public static final String NAME="wjl";//姓名
	
	public void getBasicInfo();
	public String setBasicInfo(String userName,String pwd);
}

public class Person implements China{
	private String userName; 
	private String passWord;
	
	//构造方法
	public Person(){}
	public Person(String userName) {
		this.userName = userName;
	}
	public Person(String userName, String passWord) {
		this(userName);//调用一个参数的构造方法
		this.passWord = passWord;
	}
	//父类方法
	public void getBasicInfo() {
		System.out.println("国籍:"+NATIONL+",姓名:"+NAME);
	}
	public String setBasicInfo(String userName, String pwd) {
		return "用户名:"+userName+",密码:"+pwd;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getPassWord() {
		return passWord;
	}
	public void setPassWord(String passWord) {
		this.passWord = passWord;
	}
}
1、获取接口信息和父类信息
public static void main(String[] args) {
	Class<?> c = null;
	try{
		c = Class.forName("com.wjl.reflect.Person");
		
		//1、获取所有的接口信息
		Class<?> interfaces[] = c.getInterfaces();
		System.out.println("\n接口:");
		for(int j=0;j<interfaces.length;j++){
			System.out.println(interfaces[j].getName());
		}
		
		//2、获取父类信息
		Class<?> parentClass = c.getSuperclass();
		System.out.println("\n父类信息:\n"+parentClass);
		
	}catch(Exception e){
		e.printStackTrace();
	}
}

2、获取属性

public static void main(String[] args) {
	try{
		Class<?> c = Class.forName("com.wjl.reflect.Person");
		Field field[] = c.getDeclaredFields();//获取公用属性
		System.out.println("本类中的属性:");
		for(int i=0;i<field.length;i++){
			System.out.println("系统:"+field[i]);
			System.out.print("自定义:");
			getFieldInfo(field[i]);
		}
		
		//公共属性
		Field fields[] = c.getFields();
		System.out.println("\n公共属性:");
		for(int i=0;i<fields.length;i++){
			System.out.println("系统:"+fields[i]);
			System.out.print("自定义:");
			getFieldInfo(fields[i]);
		}
	}catch(Exception e){
		e.printStackTrace();
	}
}

//该方法用来获取各个属性信息
public static void getFieldInfo(Field field){
	System.out.print(Modifier.toString(field.getModifiers())+" ");//修饰符
	System.out.print(field.getType().getName()+" ");//数据类型
	System.out.print(field.getName());//方法名称
	System.out.println(";");
}

3、获取方法

public static void main(String[] args) {
	Class<?> c = null;
	try{
		c = Class.forName("com.wjl.reflect.Person");
		//1、获取本类中的所有方法
		Method[] methods = c.getDeclaredMethods();
		System.out.println("\n本类中的所有方法:");
		for(int i=0;i<methods.length;i++){
//			System.out.println("系统:"+methods[i]);
			System.out.print("自定义:");
			getMethodInfo(methods[i]);
		}
		
		//2、输出全部方法:本类中的方法+父类中的方法
		Method[] methodes = c.getMethods();
		System.out.println("\n本类和父类的所有方法:");
		for(int i=0;i<methodes.length;i++){
			System.out.println("系统:"+methodes[i]);
			System.out.print("自定义:");
			getMethodInfo(methodes[i]);
		}
	
	}catch(Exception e){
		e.printStackTrace();
	}
}

//获取方法信息
public static void getMethodInfo(Method method){
	System.out.print(Modifier.toString(method.getModifiers())+" ");//修饰符
	System.out.print(method.getReturnType().getName()+" ");//返回值类型
	System.out.print(method.getName());//方法名称
	//各个参数
	Class<?> parames[] = method.getParameterTypes();
	System.out.print("(");
	for(int i=0;i<parames.length;i++){
		System.out.print(parames[i].getName()+" arg"+i);//参数名称
		if(i<parames.length-1){//添加逗号隔开
			System.out.print(",");
		}
	}
	System.out.print(")");
	
	//获取异常信息
	Class<?> ex[] = method.getExceptionTypes();
	if(ex.length>0){//说明有异常
		System.out.print(" throws ");
		for(int j=0;j<ex.length;j++){
			System.out.print(ex[j].getName());
			if(j<ex.length-1) System.out.print(",");
		}
	}
	System.out.println();
}

猜你喜欢

转载自1017401036.iteye.com/blog/2343706