一.获取字节码Class对象的三种方式
1.用于源码阶段,Class.forName("全类名"):类加载器会将字节码文件加载进内存,返回Class对象,一般用于配置文件
例如:Class cls = Class.forName("cn.itylm.domian.User");
2.用于Class类对象阶段,类名.class:通过类名的属性class获取,一般用于参数传递
例如:Class cls = User.class
3.Runtime运行时阶段,对象.getClass():通过实例化的对象的方法获取,一般用于对象的获取字节码的方式
例如:User user = new User();
Class cls = user.getClass();
注意:
同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的Class对象都是同一个。
二.使用Class对象
* 获取功能:
1. 获取成员变量们
* Field[] getFields() :获取所有public修饰的成员变量
* Field getField(String name) 获取指定名称的 public修饰的成员变量
* Field[] getDeclaredFields() 获取所有的成员变量,不考虑修饰符
* Field getDeclaredField(String name)
2. 获取构造方法们
* Constructor<?>[] getConstructors()
* Constructor<T> getConstructor(类<?>... parameterTypes)
* Constructor<T> getDeclaredConstructor(类<?>... parameterTypes)
* Constructor<?>[] getDeclaredConstructors()
3. 获取成员方法们:
* Method[] getMethods()
* Method getMethod(String name, 类<?>... parameterTypes)
* Method[] getDeclaredMethods()
* Method getDeclaredMethod(String name, 类<?>... parameterTypes)
4. 获取全类名
* String getName()