java 类反射2

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;

import org.junit.Test;

public class ReflectDecompose {
	//解剖普通方法
	@Test
	public void fetchMethods() throws Exception{
		Class<?> c=Class.forName("cn.hncu.reflect.fetch.User");
		Method ms[]=c.getMethods(); //获取当前类及其父类的所有public方法
		//Method ms[]=c.getDeclaredMethods();//只是获取当前类自己定义的所有方法(包括private及其它权限)
		for(int i=0;i<ms.length;i++){
			Method m=ms[i];
			System.out.println("name: "+m.getName()); //方法名
			//System.out.println("annotation: "+ m.getAnnotations() );
			System.out.println("ReturnType: "+ m.getReturnType() ); //方法返回值类型
			//该方法对象m 是在哪个类中声明的
			System.out.println("DeclaringClass:"+ m.getDeclaringClass());
			
			/*获取泛型*/
			Type type=m.getGenericReturnType();//返回类型中的泛型--Class
			System.out.println(type);
			//m.getExceptionTypes(); //异常中的泛型--Class[]
			//m.getGenericParameterTypes(); //参数中的泛型 ---Class[]
			
			
			//解剖出参数类型
			Class<?> paramTypes[]=m.getParameterTypes();
			for(Class<?> clazz:paramTypes){
				System.out.println("param>> "+clazz);
			}
			
			//解剖出异常类型
			Class<?> exs[] = m.getExceptionTypes();
			for(int j=1;j<=exs.length;j++){
				System.out.println("Execption"+j+":: "+ exs[j-1]);
			}
			
			
			//解剖出修饰符
			int mod=m.getModifiers();
			System.out.println("modifiers1:"+mod);
			System.out.println("modifiers2:"+ Modifier.toString(mod));
			
			System.out.println("///");
		}
	}
  
	
	@Test
	public void  fetchConstructors() throws Exception{
		Class<?> clazz=Class.forName("cn.hncu.reflect.fetch.User");
		//Constructor cons[] = clazz.getConstructors(); //获取当前类及其父类的所有public构造器	
		Constructor<?> cons[]=clazz.getDeclaredConstructors();//只是获取当前类自己定义的所有构造器(包括private及其它权限)
		for(int i=0;i<cons.length;i++){
			Constructor<?> con = cons[i];
			System.out.println("name: "+ con.getName() ); //构造器的名字
			//System.out.println("annotation: "+ con.getAnnotations() );
		
			
			/*获取泛型
			con.getExceptionTypes(); //异常中的泛型--Class[]
			con.getGenericParameterTypes(); //参数中的泛型 ---Class[]
			*/
			
			//解剖出参数类型
			Class<?> paramTypes[]=con.getParameterTypes();
			for(Class<?> c:paramTypes){
				System.out.println("param>> "+c);
			}
			
			//解剖出异常类型
			Class<?> exs[] = con.getExceptionTypes();
			for(int j=1;j<=exs.length;j++){
				System.out.println("Execption"+j+":: "+ exs[j-1]);
			}
			
			System.out.println("DeclaringClass:"+ con.getDeclaringClass());
			
			//解剖出修饰符
			int mod = con.getModifiers();
			System.out.println("modifiers1:"+mod);
			System.out.println("modifiers2:"+ Modifier.toString(mod));	
			System.out.println("--------------------");
		}
	}
	
	//解剖属性变量
    @Test
    public void fetchFields() throws Exception{
    	Class<?> cls = Class.forName("cn.hncu.reflect.fetch.User");
		//Field flds[] = cls.getFields(); //获取当前类及其父类的所有public属性	
		Field flds[] = cls.getDeclaredFields(); //只是获取当前类自己定义的所有属性(包括private及其它权限)
		for(int i=0;i<flds.length;i++){
			Field fld = flds[i];
			System.out.println("name: "+fld.getName());
			System.out.println("DeclaringClass: "+fld.getDeclaringClass());
			System.out.println("type: "+ fld.getType());
			
			//解剖出修饰符
			int mod = fld.getModifiers();
			//System.out.println("modifiers1:"+mod);
			System.out.println("modifiers2:"+ Modifier.toString(mod));
			System.out.println("-----------------");
		}
    	
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值