反射

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

反射就是把java类中的各种成分映射成一个个的Java对象

反射(Reflection)机制是Java语言特性之一,是Java被视为动态(或准动态)语言的一个关键特性.

在计算机领域反射指一种能力,能够自描述和自控制,即在运行状态中,动态获取类信息及动态调用实例方法的能力.

Java反射机制能够探知类的基本结构,这种对Java类结构探知的能力,称为Java类的"自审".并且反射机制是构建框架技术的基础所在.

Java反射有以下3个动态特性.

                运行时创建实例

                运行期间调用方法

                运行时更改属性

Java程序执行过程  Person.java---编译器---Person.class---Java虚拟机---运行程序

Java反射常用API:

         反射技术常用的类如下:

                        Java.lang.Class<T>类:反射的核心类,反射所有的操作都是围绕该类来生成的.通过Class类可以获取类的属性,方法等内容信息.

                        Java.lang.reflect.Constructor<T>类:表示类的构造方法.

                        Java.lang.reflect.Field类:表示类的属性,可以获取和设置类中属性的值.

                        Java.lang.reflect.Method类:表示类的方法,可以用来获取类中方法的信息或执行方法.

获取对应类型基本信息的方法

方法

说明

String getName()

以字符串形式返回该类型的名称

String getSimpleName()

以字符串形式返回该类型的简称

Package getPackage()

获取该类型所在的包

Class getSuperclass()

返回该类型的超类的Class实例

Class[] getInterfaces()

返回该类型所实现的全部接口的Class实例

int getModifiers()

返回该类型的所有修饰符,由public,protected,private,final,staic,absstract等对应的int常量组成,返回的整数应使用Modifier工具类来解码,才可以判断修饰符的构成

Class[] getDeclaredClasses()

返回该类型中包含的全部内部类的Class实例

Class[] getDeclaringClass()

返回该类型所在的外部类的Class实例

获取对应类型所含构造方法的方法

方法

说明

Constructor   getConstructor(Class…params)

返回该类型指定参数列表的public构造方法,构造方法的参数列表与params所指定的类型列表所匹配.例如:

                  Constructor  co = clz.getConstructor(String.class,List.class);

                             其中,clz为某Class实例.

Constructor[]  getConstructors()

返回该类型的所有public构造方法

Constructor  getDeclaredConstructor(Class…params)

返回该类型指定的参数列表的构造方法,访问级别不限

Constructor[]  getDeclaredConstructors()

返回该类型的所有构造方法,访问级别不限

 

获取对应类型所含属性的方法

方法

说明

Field  getField(String name)

返回该类型中指定名称的public属性,name参数用于指定属性名称.例如:clz.getField("age"); //clz为某Class对象,age为属性名

Field[]  getFields()

返回该类型中所有public属性

Fleld  getDeclaredField(String name)

返回该类型中指定名称的属性,与属性的访问级别无关

Field[]  getDeclaredFields()

返回该类型中的全部属性,与属性的访问级别无关

访问类包含方法的方法

方法

说明

Method  getMethod(String name,Class…params)

返回该实例中指定的public方法,name参数用于指定方法名称,params参数指定参数列表.例如:

Clz.getMethod("info",String.class);  //clz为某Class实例.

Method[]  getMethods()

返回该实例中所有public方法

Method  getDeclaredMethod(String name,Class…params)

返回该实例中指定的方法,与方法的访问级别无关

Method[]  getDeclaredMethod()

返回该实例中的全部方法,与方法的访问级别无关

 

访问了的属性的方法

这里的调用者就是对象的属性

返回值        方法名                                描述

get(Object  obj)和set(Object  obj ,Object val)

这里set就是设置,get就是获取

obj表示的是将属性设置到那个实例(对象)中,val表示的就是值

xxx        getXXX(Object  obj)                

xxx表示8中基本数据类型之一 obj表示该属性所在类的实例(对象)

Object        get(Object obj)

以Object类型返回obj中相关属性的值

void        setXxx(Object  obj,xxx  val)        

将Obj中相关属性的值设置为val,Xxx为8中基本数据类型之一

void        set(Object  obj,Object  val)

将Obj中相关属性的值设置为val

void        setAccessible(boolean  flag)

对相关属性设置访问权限,设置为true可以禁止java语言访问检查(就是可以访问) 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值