各自努力,最高处见!加油!
示例代码:
import org.testng.annotations.Test; import java.lang.annotation.Annotation; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; //如何通过反射获取类的结构信息 public class ReflectionUtils { public static void main(String[] args) { } //第一组方法API @Test public void api_01() throws ClassNotFoundException, NoSuchMethodException { // 得到Class对象 Class<?> personCls = Class.forName("com.xmtedu.Person"); // getName:获取全类名 System.out.println(personCls.getName());//com.xmtedu.Person // getSimpleName:获取简单类名 System.out.println(personCls.getSimpleName());//Person // getFields:获取所有public修饰的属性,包含本类以及父类的 Field[] fields = personCls.getFields(); for (Field i : fields) { System.out.println("本类及父类的public属性"+i.getName()); } // getDeclaredFields:获取本类中所有属性 Field[] declaredFields = personCls.getDeclaredFields(); for (Field f : declaredFields) { System.out.println("本类所有属性:"+f.getName()); } // getMethods:获取所有public修饰的方法,包含本类以及父类的(Object中的方法也会包含在内) Method[] methods = personCls.getMethods(); for (Method method : methods) { System.out.println(""+method.getName()); } // getDeclaredMethods:获取本类中所有方法 Method[] declaredMethods = personCls.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { System.out.println("本类中所有方法:"+declaredMethod.getName()); } // getConstructors: 获取本类所有public修饰的构造器 Constructor<?>[] constructors = personCls.getConstructors(); for (Constructor<?> c : constructors) { System.out.println("public修饰的构造器:"+c.getName()); } // getDeclaredConstructors:获取本类中所有构造器 Constructor<?>[] declaredConstructors = personCls.getDeclaredConstructors(); for (Constructor<?> declaredConstructor : declaredConstructors) { System.out.println("获取本类中所有构造器:"+declaredConstructor.getName()); } // getPackage:以Package形式返回 包信息 System.out.println(personCls.getPackage()); // getSuperClass:以Class形式返回父类信息 Class<?> superclass = personCls.getSuperclass(); System.out.println("父类的class对象:"+superclass); // getInterfaces:以Class[]形式返回接口信息 Class<?>[] interfaces = personCls.getInterfaces(); for (Class<?> anInterface : interfaces) { System.out.println("接口信息"+anInterface.getName()); } // getAnnotations:以Annotation[] 形式返回注解信息 Annotation[] annotations = personCls.getAnnotations(); System.out.println("返回注解信息:"+annotations.getClass()); } }
被测试的类
public class Person extends A implements IA,IB{ public Person(String hobby, String name) { super(hobby); this.name = name; } public String name; protected int age; String job; private double sal; public void m1(){ } protected void m2(){ } void m3(){ } private void m4(){ } } interface IA{ } interface IB{ } class A{ public String hobby; public int hand; public A(String hobby) { this.hobby = hobby; } private A(int hand){ this.hand=hand; } public void father(){ } }
示例代码
@Test public void m2() throws ClassNotFoundException { Class<?> personCls = Class.forName("com.xmtedu.Person"); Field[] declaredFields = personCls.getDeclaredFields(); for (Field f : declaredFields) { System.out.println("本类所有属性:"+f.getName()+"该属性修饰符值:"+f.getModifiers()+"该属性类型:"+f.getType()); } }
@Test public void m3()throws ClassNotFoundException{ Class<?> personCls = Class.forName("com.xmtedu.Person"); Method[] declaredMethods = personCls.getDeclaredMethods(); for (Method declaredMethod : declaredMethods) { System.out.println("方法"+declaredMethod.getName()+"该方法的访问修饰符:"+declaredMethod.getModifiers()+ "该方法的返回值类型"+declaredMethod.getReturnType()); } }