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("-----------------");
}
}
}
java 类反射2
原创
©著作权归作者所有:来自51CTO博客作者wx639ab1ba8473b的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:java I/O加强
下一篇:杭电acm P2019数列有序
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Java反序列化-反射
java反序列化之-反射
java 反序列化 web安全 -
java反射2
<br />JAVA反射机制定义: <br /> JAVA反射机制是在运行状态中,对于任意一个
java class object constructor methods -
java 反射class类 java类的反射
目录一、java反射的概念二、Class对象 获取方法三、获取构造方法(1)public类(2)不区分访问权限四、如何使用反射操作类中方法 (1)获取构造方法信息  
java 反射class类 java 反射 构造方法 访问权限