美文网首页
反射机制

反射机制

作者: ticktackdong | 来源:发表于2018-04-16 22:01 被阅读0次
    类对象
        所有的类都存在一个类对象,这个类对象用于提供类本身的信息,比如都有什么属性什么方法
        在一个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, "盖伦");
    

    相关文章

      网友评论

          本文标题:反射机制

          本文链接:https://www.haomeiwen.com/subject/qetykftx.html