A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 明月刀割芳草 中级黑马   /  2015-7-28 13:50  /  853 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有没有一些易懂的资料,通俗易懂的,大白话形式的,贴合生活实际的

5 个回复

倒序浏览
本帖最后由 lizhichao 于 2015-7-28 18:47 编辑

Class类的获取
1:  Class.Forname();
2:  Person.class
3:  P.getClass();
Class方法
1 newInstance
2 getConstrutor();

3 Field    getDeclaredField("name");//暴li获取字符段
4 Field  getField(" ");获取字符段

Construtor(XX.class,XX.class);
        newInstance(xx,xx);
----------------------------------------------
Field

        构造Field("name");
        set(对象,"");
        setAccessible(true);去掉访问权限;


Class 字节码对象
一 ‘关于对象构造(实例化)
        方法
        1,newinstance();
        返回空参的构造的对象(吧反射的对象实例化),注意需要进行一次强                转。

        2.getConstructor(String.class,int,class);
        Constructor
        方法
        1 对应的对象  newInstance("张三",23);虚要强转

二关于对象字段获取与改变
        Class
        方法1:
        getField
       
        Field方法
        1set(Person," ");

三关于方法
        Class
        方法
        getMethod(“方法名”,<>.class);
       
        Method
       
        invoke(对象):空参的方法:
       





/**
         * @param args
         * 反射
         * 反射获取的三种方式
         * Class.forName()读取配置文件
         * Person.class当作锁对象
         * p.getClass()判断是否是同一个字节码对象
         * @throws ClassNotFoundException
         */
        public static void main(String[] args) throws ClassNotFoundException {
                Class clazz1 = Class.forName("cn.itcast.bean.Person");                //第一种Class.forName获取
                Class clazz2 = Person.class;                                                                //第二种字节码对象获取
               
                Person p = new Person();
                Class clazz3 = p.getClass();                                                                //第三种通过对象反向获取
               
                System.out.println(clazz1 == clazz2);
                System.out.println(clazz3 == clazz2);
        }

}





Class<?> cla = Class.forName("it.cn.Person");
                  Person person = (Person)cla.newInstance();
                 System.out.println(person);
                 Field f = cla.getDeclaredField("name");
                 f.setAccessible(true);
                 f.set(person,"nihao");
                 System.out.println(person);

没有案例如果需要我会发给你
回复 使用道具 举报
lizhichao 发表于 2015-7-28 18:45
Class类的获取
1:  Class.Forname();
2:  Person.class

上面所有的自己敲一遍代码就全都会了
??熟练了就好
回复 使用道具 举报
反射是挺难的!!!
回复 使用道具 举报
反射就是知道某个人有某种能力但是不知道他的名字。所以通过旁敲侧击获取这个人的字节码对象。然后通过字节码对象的规则去叫他帮自己干活。

比如你是一个公司的老板你想让某个员工做某件事(你要知道她能干的)。但是呢?你不知道她叫什么名字。于是你只好找到他们的主管然后跟主管说。主管呢就去叫那个人干那件事。
回复 使用道具 举报
huizi1992 发表于 2015-7-28 18:54
反射是挺难的!!!

再帮你一把
1.反射获取空参构造
2.反射获取有参构造
3.通过反射获取有效字段
4.通过反射调用方法;
从这四个1方面入手。
那个不熟或者不会我们讨论讨论
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马