1.Class.forName("全类名"):将字节码文件加载进内存,返回Class对象
Class cls1 = Class.forName("com.ujiuye.reflect.Person");
多用于配置文件,将类名定义在配置文件中,读取文件,加载类
2.类名.class:通过类名的属性class获取
Class cls2 = Person.class;
多用于参数的传递
3.对象.getClass():getClass()方法在Object类中定义着
Person person = new Person();
Class cls3 = person.getClass();
多用于对象的获取字节码的方式
结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方式获取的class对象都是同一个
class对象功能:
1.获取成员变量们
Field[] getFields(): 获取所有的public修饰的成员变量
Field getField(String name): 获取指定名称的 public修饰的成员变量
参数:String name 属性的名称
返回值:表示一个成员变量对象,所属的类型
Field a = perClass.getField("a");
Field[] getDeclaredFields():获取所有的成员变量,不考虑修饰符
Field getDeclaredField(String name)
成员变量对象.set(Object obj, Object value);
用于给成员变量赋值
成员变量对象.get(Object obj);
用于得到成员变量值