已知一个Person类。
1、获取类变量
//第一种,任何一个类都有一个隐含的静态成员变量class
Class c1 = Person.class;
//第二种,已经知道该类的对象,通过getClass()获得
Class c2 = person.getClass();
//第三种,Class类的forName()方法
Class c3 = Class.forName("Person");
2、创建java对象实例:
Person personA = new Person(); //直接new一个实例
Person personB = Person.class.newInstance(); //通过newInstance()方法获得Person的实例
Class.forName("包名+类名").newInstance(); //需要注意的是,在使用newInstance()方法的前提是该类必须要有无参构造方法
3、其他常用方法
Class c = Class.forName("包名+类名");
c.getName();
//getMethods方法获得所有public的方法,包括继承而来
Method[] ms = c.getMethods();
//getDeclaredMethods是获取该类自己的声明的方法
Method[] ms = c.getMethods();
//得到方法的返回值类型的类类型 Class returnType = ms[i].getReturnType();
//得到方法的名称 ms[i].getName();
//获取参数类型 Class[] paramTypes = ms[i].getParameterTypes();
Field[] fs = c.getDeclaredFields();
for(Field field:fs) {
//得到成员变量类型的类类型
Class fieldType = field.getType();
String typeName = fieldType.getName();
//得到成员变量的名称
String fieldName = field.getName();
}
Constructor[] cs = c.getConstructors();
Constructor singleCs = cs[i];
//获取构造函数参数列表----->参数列表的参数类型
Class[] paramType = constructor.getParameterTypes();
Class class = paramType[i];
class.getName();
a.通过对象获取到类或者其他方式获取到类
Class c = 对象引用.getClass();
b.获取到方法
Method m = c.getDeclaredMethod("myPrint"); //参数:方法名
c.使用invoke调用方法
//方法的反射操作
//对象.myPrint();方法的反射操作,用m来进行方法调用和前者效果一致
Object obj = m.invoke(对象引用,方法参数); //如果方法有返回值返回值,没有就null