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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© duluhuang 中级黑马   /  2015-12-15 22:48  /  342 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

反射的基本步骤:
1,获得Class对象,就是获取到指定的名称的字节码文件对象。
2.实例化对象,获得类的属性,方法或构造函数。
3.访问属性,调用方法,调用构造函数创建对象。

获取Class对象的三个方法:
//1.第一种方式获取Class对象,根据getClass();
                Object obj=new Person();
                Class clazz1=obj.getClass();
//2.每一个基本数据类型都有一个class属性。
                Class clazz2=Person.class;
//3.forname方法
                String classname="cn.itcast.domain.Person";//来自配置文件                Class clazz3=Class.forName(classname);
//1.反射没有参数的方法。
                Class clazz=Person.class;
                Method method1=clazz.getMethod("sing",null);
                Object obj=clazz.newInstance();
                method1.invoke(obj,null);
                //2.反射静态方法。
                Method method2=clazz.getMethod("eat",null);
                method2.invoke(null, null);
                //3.反射多参数的方法。
                Method method3=clazz.getMethod("study",String.class,int.class);
                method3.invoke(obj, "李强",23);

//1.反射空参数的构造函数
                Class clazz=Person.class;
                Constructor c=clazz.getConstructor(null);
                System.out.println(c.newInstance(null));
                //2.反射有参数的构造函数
                Constructor c1=clazz.getConstructor(String.class,String.class);
                System.out.println(c1.newInstance("23","黎明").toString());
//1.反射所有属性
                Class clazz=Person.class;
                Field[] field=clazz.getDeclaredFields();
                for(Field f:field)
                {
                        System.out.println(f.getName());
                }
                //2.反射属性
                Person p=new Person();
                Field f=clazz.getDeclaredField("age");
                f.setAccessible(true);//暴力反射
                f.set(p, "23");
                System.out.println(p.getAge());

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马