16_2.反射相关
通过反射调用类的完整结
-
实现的全部接口
public Class<?>[] getInterfaces()
确定此对象所表示的类或接口实现的接口。 -
所继承的父类
public Class<? Super T> getSuperclass()
返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的 Class。 -
全部的构造器
-
public Constructor
[] getConstructors()
返回此 Class 对象所表示的类的所有public构造方法。 -
public Constructor
[] getDeclaredConstructors()
返回此 Class 对象表示的类声明的所有构造方法。 -
Constructor类中:
- 取得修饰符: public int getModifiers();
- 取得方法名称: public String getName();
- 取得参数的类型:public Class<?>[] getParameterTypes();
4.全部的方法
- public Method[] getDeclaredMethods()
返回此Class对象所表示的类或接口的全部方法 - public Method[] getMethods()
返回此Class对象所表示的类或接口的public的方法
Method run = clazz.getMethod("run");
System.out.println(run.getReturnType());//void
- Method类中:
- public Class<?> getReturnType()取得全部的返回值
- public Class<?>[] getParameterTypes()取得全部的参数
- public int getModifiers()取得修饰符
- public Class<?>[] getExceptionTypes()取得异常信息
- 全部的Field
- public Field[] getFields()
返回此Class对象所表示的类或接口的public的Field。 - public Field[] getDeclaredFields()
返回此Class对象所表示的类或接口的全部Field。
Field name = clazz.getDeclaredField("name");
-
Field方法中:
-
public int getModifiers() 以整数形式返回此Field的修饰符
-
public Class<?> getType() 得到Field的属性类型
-
public String getName() 返回Field的名称。
-
- Annotation相关(注解)
- get Annotation(Class
annotationClass) - getDeclaredAnnotations()
- 泛型相关
- 获取父类泛型类型:Type getGenericSuperclass()
- 泛型类型:ParameterizedType
- 获取实际的泛型类型参数数组:getActualTypeArguments()
- 类所在的包
Package getPackage()
package com.test;
import org.junit.Test;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import static sun.misc.PostVMInitHook.run;
public class ClassTest {
@Test
public void newTest() throws ClassNotFoundException, IllegalAccessException, InstantiationException, NoSuchFieldException, NoSuchMethodException {
Class clazz = Class.forName("com.test.Person");
Object person = clazz.newInstance();
Field name = clazz.getDeclaredField("name");
name.setAccessible(true);
name.set(person,"lisi");
System.out.println(person);
//哪个类加载器加载
System.out.println(clazz.getClassLoader());//sun.misc.Launcher$AppClassLoader@70dea4e
System.out.println(Arrays.toString(clazz.getInterfaces()));//[interface com.test.Per]
System.out.println(clazz.getSuperclass());//class com.test.PerC
Method run = clazz.getMethod("run");
System.out.println(run.getReturnType());//void
}
}
interface Per{
void run();
}
class PerC{
protected String sex;
}
class Person extends PerC implements Per{
private String name;
private String sex;
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public void run() {
System.out.println();
}
}