一、Class类的使用
1、万事万物皆对象(静态成员不是面向对象的,静态对象是属于类的),所以创建的每个类都是java.lang.Class类的对象,但是这些对象是不可以new的,因为java.lang.Class的构造函数是私有的;
2、通过反射获取类类型的方法有一下三种类型(Student类):
Class cls1 = Student.Class; //通过类名获取
Class cls2 = student.getClass(); //通过类对象获取
Class cls3 = Class.forName("**.**.Student"); //通过完整的路径和类名获取
注: Student stu = cls1.newInstance(); //Student类中必须要有无参的构造函数,否则会抛 java.lang.InstantiationException
3、动态加载,只有运行时才会加载,编译时不加载;
二、获取方法信息
Method[] m = obj.getMethods(); //获取类的全部public 方法,包括父类的public方法;
Method[] m = obj.getDeclaredMethods(); //获取自己类的全部方法,不限访问权限;
m.getName(); //获取方法名称,返回String;
m.getReturnType(); //获取方法的返回类型,返回Class;
m.getParameterTypes(); //获取方法的参数类型,返回Class[];
三、获取类属性(成员变量)
Field[] fs = obj.getFields(); //获取类的全部public 属性,包括父类的public属性;
Field[] fs = cla.getDeclaredFields(); //获取自己类的全部属性,不限访问权限;
fs.getName(); //获取属性名称,返回String;
fs.getType(); //获取属性类型,返回 Class ; fs.getType().getName(); //获取类型名称,返回String;
四、获取构造函数
Constructor[] cs = obj.getConstructors(); //方法获取所有的public的构造函数
Constructo[] cs = obj.getDeclaredConstructor(); //获取自己的构造函数;
五、方法反射基本操作
//方法如果没有返回值,返回null,如果有返回值返回Object类型,然后再强制类型转换为原函数的返回值类型
m.invoke(对象,参数列表);