反射获取属性、方法、构造器
一、获取属性
@Test
public void test01() {
Class<Person> personClass = Person.class;
Field[] fields = personClass.getFields();
for (Field f : fields) {
System.out.println(f);
}
Field[] declaredFields = personClass.getDeclaredFields();
for (Field f : declaredFields) {
System.out.println(f);
}
}
@Test
public void test02() {
Class<Person> personClass = Person.class;
Field[] declaredFields = personClass.getDeclaredFields();
for (Field f : declaredFields) {
int modifier = f.getModifiers();
System.out.print(Modifier.toString(modifier) + "\t");
Class<?> type = f.getType();
System.out.print(type + "\t");
String name = f.getName();
System.out.print(name);
System.out.println();
}
}
二、方法
@Test
public void test03() {
Class<Person> personClass = Person.class;
Method[] methods = personClass.getMethods();
for (Method m : methods) {
System.out.println(m);
}
System.out.println();
Method[] declaredMethods = personClass.getDeclaredMethods();
for (Method m : declaredMethods) {
System.out.println(m);
}
}
@Test
public void test04() {
Class<Person> personClass = Person.class;
Method[] declaredMethods = personClass.getDeclaredMethods();
for (Method m : declaredMethods) {
Annotation[] annotations = m.getAnnotations();
for (Annotation a : annotations) {
System.out.println(a);
}
System.out.print(Modifier.toString(m.getModifiers()) + " ");
System.out.print(m.getReturnType().getName() + " ");
System.out.print(m.getName() + "(");
Class<?>[] types = m.getParameterTypes();
if (!(types == null || types.length == 0)) {
for (int i = 0; i < types.length; i++) {
if (i == types.length - 1) {
System.out.print(types[i] + " args_" + i);
} else {
System.out.print(types[i] + " args_" + i + ",");
}
}
}
System.out.print(")");
Class<?>[] exceptionTypes = m.getExceptionTypes();
if (!(exceptionTypes == null || exceptionTypes.length == 0)) {
System.out.print("throws ");
for (int i = 0; i < exceptionTypes.length; i++) {
if (i != exceptionTypes.length - 1) {
System.out.print(exceptionTypes[i].getName() + ",");
} else {
System.out.print(exceptionTypes[i].getName());
}
}
}
System.out.println();
}
}
三、构造器
@Test
public void test05(){
Class<Person> personClass = Person.class;
Constructor<?>[] constructors = personClass.getConstructors();
for(Constructor c : constructors){
System.out.println(c);
}
Constructor<?>[] declaredConstructors = personClass.getDeclaredConstructors();
for(Constructor c : declaredConstructors){
System.out.println(c);
}
}
四、父类
@Test
public void test06() {
Class<Person> personClass = Person.class;
Class<? super Person> superclass = personClass.getSuperclass();
System.out.println(superclass);
}
@Test
public void test07() {
Class<Person> personClass = Person.class;
Type genericSuperclass = personClass.getGenericSuperclass();
System.out.println(genericSuperclass);
ParameterizedType parameterizedType = (ParameterizedType) genericSuperclass;
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
for (int i = 0; i < actualTypeArguments.length; i++) {
System.out.println(actualTypeArguments[i]);
}
}
五、接口
@Test
public void test08() {
Class<Person> personClass = Person.class;
Class<?>[] interfaces = personClass.getInterfaces();
for (int i = 0; i < interfaces.length; i++) {
System.out.println(interfaces[i]);
}
Class<?>[] interfaces1 = personClass.getSuperclass().getInterfaces();
for (int i = 0; i < interfaces1.length; i++) {
System.out.println(interfaces1[i]);
}
}
六、包
@Test
public void test09() {
Class<Person> personClass = Person.class;
Package aPackage = personClass.getPackage();
System.out.println(aPackage);
}
七、类声明的注解
@Test
public void test10() {
Class<Person> personClass = Person.class;
Annotation[] annotations = personClass.getAnnotations();
for (int i = 0; i < annotations.length; i++) {
System.out.println(annotations[i]);
}
}