java反射机制

定义

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

用途

在日常的第三方应用开发过程中,经常会遇到某个类的某个成员变量、方法、构造方法是私有的或是只对系统内开放,这时就可以利用java的反射机制通过反射来获取所需的私有方法和属性;但是也不是所有的的都适合反射,对于没有权限的应用返回值是没有任何意义的缺省值;

反射机制的相关类

  • class类:代表类的实体,在运行的java应用程序中表示类和接口;
  • field类:代表类的成员变量(成员变量也称为类的属性)
  • method类:代表类的方法;
  • constructor类:代表类的构造方法;

class类

获得类相关的方法

  • asSubclass(Class<U> clazz)把传递的类的对象转换成代表其子类的对象;
  • cast 把对象转换成代表类或是接口的对象;
  • getClassLoader() 获得类的加载器;
  • getClasses() 返回一个数组,数组中包含该类中所有公共类和接口类的对象;
  • getDeclaredClasses() 返回一个数组,数组中包含该类中的所有类和接口类的对象;
  • forName(String className) 根据类名返回类的对象;
  • getName() 获得类的完整路径名字;
  • newInstance() 创建类的实例;
  • getPackage()获得类的包;
  • getSimpleName() 获得类的名字;
  • getSuperclass() 获得当前类继承的父类的名字;
  • getInterfaces() 获得当前类实现的类或是接口;

获得类中属性相关的方法

  • getField(String name) 获得某个共有的属性对象;
  • getFields() 获得所有共有的属性对象;
  • getDeclaredField(String name) 获得某个属性对象;
  • getDeclaredFields() 获得所有属性对象;

获得类中注解相关的方法;

  • getAnnotation(Class<U> annotationClass) 返回该类中与参数类型相匹配的共有注解对象;
  • getAnnotations() 返回该类中所有的共有注解对象;
  • getDeclaredAnnotation(Class<U> annotationClass) 返回该类中于参数类型匹配的注解对象;
  • getDeclaredAnnotations() 返回该类中所有的注解对象;

获得类中构造器相关的方法;

  • getConstructor(Class..<?> parameterTypes)获得该类中与参数类型匹配的共有构造方法;
  • getConstructors() 获得该类的所有共有构造方法;
  • getDeclaredContructor(Class..<?> parameterTypes) 获得该类中与参数类型匹配的构造方法;
  • getDeclaredConstructor()获得该类中所有构造方法;

获得类中方法的相关方法;

  • getMethod(String name,Class..<U> parameterTypes) 获得该类中的某个共有方法;
  • getMethods() 获得该类中的所有共用方法;
  • getDeclaredMethod(String name,Class..<U> parameterTypes) 获得该类中的某个方法;
  • getDeclaredMethods() 获得该类中的所有方法;

类中其他的重要方法;

  • isAnnotation()如果是注解类型则返回true;
  • isAnnotationPresent(Class<? extends Annotation> annotationClass)如果是指定类型的注解则返回true;
  • isAnonymousClass() 如果是匿名内部类则返回true;
  • isArray() 如果是一个数组类型则放回true;
  • isEnum()如果是枚举类型则返回true;
  • isInstance(Object obj)如果是obj是当前类的实例则返回true;
  • isInterface()如果当前类是接口类型则返回true;
  • isLocalClass()如果是局部类则返回true;
  • isMemberClass() 如果是内部类则返回true;

filed类

  • equals(Object obj)属性和obj相等则返回true;
  • get(Object obj)获取obj中对应的属性值;
  • set(Object obj,Object value)设置obj中对应属性的值

Method 类

  • invoke(Object obj,Object... args)传递object对象及参数调用该对象的方法;

constructor类

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

推荐阅读更多精彩内容