基础框架技术反射

1.1java反向概述

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

1.1.1 什么是反射

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

       java反射有以下3个动态特性

      1.运行时创建实例

      2.运行期间调用方法

      3.运行时更改属性

1.1.2 java反射常用的APL

      使用java反射技术,常用的类如下。

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

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

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

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

1.2 放射的应用

      在java程序中使用反射的基本步骤如下。

    (1)导入java.lang.reflect包中的相关类。

    (2)获得需要操作的类的Class实例

    (3)调用Class实例的方法获取Field、Method等实例。

    (4)使用反射API操作实例成员。

1.2.1 获取类的信息

      1.获取Class实例

    (1)调用类或接口实例的getClass()方法

    (2)调用类或接口的class

    (3)使用Class。forName()方法

      2.从Class示例获取信息方法

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

方法说明

String getName()

以字符串形式返回该类型的名称
String getSimpleName()以字符串形式返回该类型的简称(类名)
Package getPackage()获取该类型所在的包
Class getSuperclass()获取该类型的超类的 class 实例
Classll getlnterfaces() 返回该类型所实例的全部接口的 class 实例
int getModifiers()返回该类型的所有修饰符,由 public、protected、private、final、static、abstract 等对应的 int 常量组成,返回的整数应使用Modifier 工具类来解码,才可以判断修饰符的构成。
Class[] getDeclaredClasses()返回该类型中包含的全部内部类的 Class 实例
Class getDeclaringClass()返回该类型所在的外部类的 Class 实例

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

方法说明
Constructor getConstructor(Class... params)

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

Constructorl] getConstructors()返回该类型的所有 public 构造方法
Constructor getDeclaredConstructor(Class... params)

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

级别不限        

Constructorl] getDeclaredConstructors()返回该类型的所有构造方法,访问级别不限
Constructor getDeclaredConstructor()获取该类型的无参构造函数

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

方法说明
Field getField(String name)返回该类型中指定名称的 public 属性,name参数用于指定属性名称。例如:clz.getField("age"); //cz 为某 Class对象,age 为属性名
Field getFields()返回该类型中所有 public 属性
Field getDeclaredField(String name)返回该类型中指定名称的属性,与属性的访问级别无关
Fieldl getDeclaredFields()返回该类型中的全部属性,与属性的访问级别无关

访问类包含方法的方法

方法说明
Method getMethod(
String name Class... params)
返回该实例中指定的 public 方法,name 参数用于指定方法名称,params参数指定参数列表
Methodl getMethods()返回该实例中所有 public 方法
Method getDeclaredMethod(
String name, Class... params)
返回该实例中指定的方法,与方法的访问级别无关        
Methodl getDeclaredMethods()返回该实例中的全部方法,与方法的访问级别无关

1.2.3 通过反射来创建java类型的实例有如下两种方式

      通过反射来创建java类型的实例有如下两种方式

      1.使用Class实例的newInstance()方法创建相关类型的实例。

      2.使用Constructor实例创建相关类型的实例

访问属性的方法

方法说明
xxx getXxx(Object obj)xx表示8种基本数据类型之一,如 int getlnt(Object obj)obj 为该属性所在类的实例。假设 instance 表示 A 类的实例,field 表示 A类中的属性 a,则 field.getlnt(instance)表示 以int 类型返回 instance中属性a的值。若 Field 实例表示的是一个静态属性,则 obi 可以设置为null
Object get(Object obj)以object类型返回obj中相关属性的值
void setXox(Object obj, xxx val)将obj中相关属性的值设置为val。xxx为8种基本数据类型之-
void set(Object obj, Object val)将obj中相关属性的值设置为 val
void setAccessible(boolean flag)对相关属性设置访问权限。设置为 true 可以禁止 Java 语言访问检查

1.2.6 调用类的方法

      Method 类中包含一个invoke()方法,通过invoke()方法,Method实例可以调用java类的实例方法和静态方法。invoke()方法定义如下

      Object invoke(Object obj,Object... args);

      其中,obj是执行该方法的对象,args是执行该方法时传入的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值