获取Class对象的方式:
1.正向加载:我们直接new一个对象,由jvm产生Class对象和我们new的类的对象;
反射(反向加载):我们让jvm先产生Class对象,然后我们程序直接去访问这个Class对象内部,间接的获取这个
类的内部信息,并进行访问.
2.获取Class对象的三种方式:
1).调用对象的getClass()方法;
Student stu = new Student();//1.产生Class对象;2.产生Student对象;
Class stuClass1 = stu.getClass();
2).通过对象的class静态属性属性,Java中任何数据类型(包括基本数据类型),都有一个静态的属性;class;
Class stuclass2 = Student.class
(常用) 3).调用Class类的静态方法;forName(String className)方法获取;注:className必须带包名;
Class stuClass3 = Class.forName("cn.itcast.Student");
获取Class对象后,我们可以获取某个类的内部信息;
1.构造方法:
1).批量获取:
public Constructor[] getConstructors():表示此类公共构造方法的Constuctor的对象数组.
public Constructor[] getDeclarConstructors():获取所有的构造方法,包括私有
2).获取单个构造方法:
public Constructor getConstructor(Class ... parameterTyoes):获取某个共有的构造方法(通过
参数的类型区分具体是哪个)
public Constructor getDeclarConstructor(Class ... parameterTyoes):获取某个构造
方法,包括私有
调用构造方法,创建对象:
Constructor --> newInstance();
调用私有构造方法时,需要先设置暴力访问:
Constructor --> setAccessible(true)再
Constructor --> newInstance();
2.成员属性:
1).批量获取:
public Field[] getFields();获取所有的共有成员属性
public Field[] getDeclaredFiels();获取所有成员属性,包括私有
2).获取单个
public Field getField(String fieldName):根据属性名获取某个共有成员属性;
public Field getDeclaredFiel(String fieldName);获取某个属性,包括私有.
为属性赋值:
Field --> set(Object obj,Object value)
注意:为私有属性赋值时,需要先设置暴力访问:
Field --> setAccessible(true)
3.获取成员方法并调用:
1).批量获取:
Method[] getMethods();获取所有公有成员方法,包含了继承的
Method[] getDecaredMethods();获取所有的成员方法,包括私有,不包括继承
2).获取单个:
Method getMethod(String methodName , Class ... params):获取methodName的公有方法,参数为
params的Class类型
Method getDeclaredMethod(String methodName , Class ... params);获取某个方法,包括私有
调用方法:
Method --> invoke(Object obj);
私有方法调用时:
需要设置暴力访问:
Method --> setAccessible(true);
|
|