java反射

什么是反射机制

java反射机制是在运行状态中,对于任意一个类,都能知道这个类的所有属性和方法。对于任意一个对象,都能调用它的任意一个方法和属性。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

反射基础

·Class:Class对象是一个特殊的对象,java实例对象是通过Class对象创建的,每个类运行时的类信息就是用Class对象来表示的,即后缀名为class的文件。
·Field:Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权限。反射的字段可能是一个类(静态)字段或实例字段,即类的成员变量。
·Method:Method方法提供了关于单个方法的信息和访问在类或接口上。反射的方法可能是类方法或者是一个实例方法(包括一个抽象的方法)。
·Constructor:Constructor提供了关于类的构造方法。
·Array:提供了动态创建数组,以及访问数组的元素的静态方法。

反射中的相关方法

  1. 获取Class对象的方法
private void demo(){
        LocateBean locateBean = new LocateBean();
        //第一种方法
        Class c1 = LocateBean.class;//任何一个类都有一个隐含的静态成员变量class。不执行静态块和动态构造块
        //第二种方法
        Class c2 = locateBean.getClass();//已有实例对象,可通过getClass()来获取Class对象。静态块和动态块都会执行
        //第三种方法
        Class c3 = Class.forName("com.lxxl.ailayout.LocateBean");//通过全路径拿到Class对象,只执行静态块
        
    }

对于类LocateBean来说,locateBean就是类LocateBean的实例化对象。
对于类Class来说,LocateBean就是类Class的实例化对象。

2.成员变量的反射,即类的属性

       c3.getField("fieldName");//只能获取public修饰的字段
       c3.getFields();//获取所有public修饰的字段Field数组
       c3.getDeclaredField("fieldName");//可以获得所有字段
       c3.getDeclaredFields();//获取所有字段的Field数组

成员变量也是对象,是java.lang.reflect.Field类得对象,也就是说,Field类封装了关于成员变量得所有操作。

3.方法Method的反射

        c3.getMethod("methodName");//只能获取public修饰的方法名称
        c3.getMethods();//获取所有public修饰的方法的Method数组
        c3.getDeclaredMethods();//可以获得所有方法
        c3.getDeclaredMethod("methodName");//指定方法

4.构造方法的反射

        c3.getConstructor(); //只能获取public修饰的方法名称
        c3.getConstructors();// 获取所有public修饰的构造方法的数组
        c3.getDeclaredConstructor(); //可以获得指定构造方法
        c3.getDeclaredConstructors(); //获取所有构造方法的数组

构造函数也是对象,是java.lang.Constructor类的对象,也就是说,Constrctor中封装了构造函数的信息。

5.数组的反射

 //使用Array.newInstance创建数组
        //第一个参数代表数组元素类型
        //第二个参数代表数组长度
       int[] intArray = (int[]) Array.newInstance(int.class,4);
       //设置数组元素
       Array.set(intArray,1,111);
       //获取数组元素
        Array.get(intArray,1);

数组也是对象,是java.lang.reflect.Array的对象。也就是说,Array中封装了数组信息。

注意事项

当操作的对象用private修饰的时候需要用method.setAccessible(true)来设置可以访问到
然后调用method.invoke(Object obj,参数),这个Object的对象必须是该类的对象。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339