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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梦想的小草 中级黑马   /  2016-8-30 22:17  /  472 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

获取Class对象的方式:
1.正向加载:我们直接new一个对象,由jvm产生Class对象和我们new的类的对象;
    反射(反向加载):我们让jvm先产生Class对象,然后我们程序直接去访问这个Class对象内部,间接的获取这个

类的内部信息,并进行访问.
2.获取Class对象的三种方式:
    1).调用对象的getClass()方法;
        Student stu = new Student();//1.产生Class对象;2.产生Student对象;
        Class stuClass1 = stu.getClass();
    2).通过对象的class静态属性属性,Java中任何数据类型(包括基本数据类型),都有一个静态的属性;class;
        Class stuclass2 = Student.class
(常用)    3).调用Class类的静态方法;forName(String className)方法获取;注:className必须带包名;
    Class stuClass3 = Class.forName("cn.itcast.Student");
   
获取Class对象后,我们可以获取某个类的内部信息;
1.构造方法:
    1).批量获取:   
        public Constructor[] getConstructors():表示此类公共构造方法的Constuctor的对象数组.
        public Constructor[] getDeclarConstructors():获取所有的构造方法,包括私有
    2).获取单个构造方法:
        public Constructor getConstructor(Class ... parameterTyoes):获取某个共有的构造方法(通过

参数的类型区分具体是哪个)
            public Constructor getDeclarConstructor(Class ... parameterTyoes):获取某个构造

方法,包括私有
        
        调用构造方法,创建对象:
        Constructor --> newInstance();
        调用私有构造方法时,需要先设置暴力访问:
        Constructor --> setAccessible(true)再
        Constructor --> newInstance();
        
2.成员属性:
    1).批量获取:
        public Field[] getFields();获取所有的共有成员属性
        public Field[] getDeclaredFiels();获取所有成员属性,包括私有
        
    2).获取单个
        public Field getField(String fieldName):根据属性名获取某个共有成员属性;
        public Field getDeclaredFiel(String fieldName);获取某个属性,包括私有.
        
        为属性赋值:
        Field --> set(Object obj,Object value)
        注意:为私有属性赋值时,需要先设置暴力访问:
        Field -->  setAccessible(true)
        
3.获取成员方法并调用:
    1).批量获取:
        Method[] getMethods();获取所有公有成员方法,包含了继承的
        Method[] getDecaredMethods();获取所有的成员方法,包括私有,不包括继承
    2).获取单个:
        Method getMethod(String methodName , Class ... params):获取methodName的公有方法,参数为

params的Class类型
        Method getDeclaredMethod(String methodName , Class ... params);获取某个方法,包括私有
    调用方法:
        Method --> invoke(Object obj);
        私有方法调用时:
        需要设置暴力访问:
        Method --> setAccessible(true);

5 个回复

倒序浏览
学习了!
回复 使用道具 举报
总结的非常好
回复 使用道具 举报
fan


反射没有学
回复 使用道具 举报
学习了,赞一个楼主
回复 使用道具 举报
顶顶顶顶顶顶顶顶顶顶顶
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马