反射机制

类对象
    所有的类都存在一个类对象,这个类对象用于提供类本身的信息,比如都有什么属性什么方法
    在一个JVM中只有一个Classloader,一个Classloader下一种类只有一个类对象
获取类对象有三种方式
           1.Class.forName(classname)
           2.Hero.class
           3.new Hero().getClass()
   获取类对象时会导致类属性被初始化
创建对象
    反射机制,会先拿到Hero的“类对象”,然后通过类对象获取“构造器对象” 再通过构造器对象创建一个对象
           //使用反射的方式创建对象
        String className = "charactor.Hero";
        //类对象
        Class pClass=Class.forName(className);
        //构造器
        Constructor c= pClass.getConstructor();
        //通过构造器实例化
        Hero h2= (Hero) c.newInstance();
通过反射机制修改对象的属性
            //获取类Hero的名字叫做name的字段
            Field f1= 
             h.getClass().getDeclaredField("name");
            //修改这个字段的值
            f1.set(h, "teemo");
        getField//只能获取public的,包括从父类继承来的字段
        getDeclaredField//可以获取本类所有字段,包括private字段但不能获取继承来的字段
       (注: 这里只能获取到private的字段,但并不能访问该private字段的值,除非加上setAccessible(true))
通过反射机制调用一个对象的方法
        // 获取这个名字叫做setName,参数类型是String的方法
        Method m = h.getClass().getMethod("setName", String.class);
        // 对h对象,调用这个方法
        m.invoke(h, "盖伦");

你可能感兴趣的:(反射机制)