Java反射机制
获取类对象
类对象
类对象,用于描述这种类,都有什么属性,什么方法的
获取类对象
- 
Class.forName(); 
- 
Hero.class (注:Hero是自定义类的类名) 
- 
new Hero().getClass() 
在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的类对象,都是一样的。
| 1 | String className = "charactor.Hero"; | 
获取类对象,会导致类属性的初始化
无论什么途径获取类对象,都会导致静态属性被初始化,而且只会执行一次。
(除了直接使用 Class c = Hero.class 这种方式,这种方式不会导致静态属性被初始化)
创建类对象
使用反射机制创建类对象,3个步骤
- 获取类对象
- 获取构造器
- 通过构造器实例化
| 1 | //使用反射的方式创建对象 | 
属性访问
用法
使用反射机制获取并修改类对象属性(也叫字段Field),4个步骤
- 导包
- 获取类对象
- 获取属性(字段)—— getDeclaredField
- 修改指定对象的属性值—— set
| 1 | import java.lang.reflect.Field; | 
区分 getField 与 getDeclaredField
- 
这两个方法都是用于获取字段 
- 
getField只能获取public的,包括从父类继承来的字段。
- 
getDeclaredField可以获取本类所有的字段,包括private的,但是不能获取继承来的字段。注: 这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true) 
 
          
          
          
         
          
         
          
        