十六——反射与注射

1反射

1.1访问构造方法

通过Jave反射机制,可以在程序中访问已经装载到JVM中的Java对象的描述,实现访和修改描述Jave对象本身信息的功能。Java 反射机制的功能十分强大,在java.langreflect包对该功能的支持。

在通过下列一组方法访问构造方法时,将返回 Constructor 类型的对象或数组。每个Constuetor对代表一个构造方法,利用 Constructor 对象可以操纵相应的构造方法;

例题1

demo

package com.mr;

public class Demo1 {

1.2访问成员变量

例题2 

demo2

1.3访问成员方法

demo3

 

2Annotation注解功能

2.1定义Annotation类型

在定义Annotation 类型时,也需要用到用来定义接口的 interface 关键字,但需要在 imertace 关制加一个“@”符号,即定义 Annotation 类型的关键字为@interface,这个关键字的隐含意思是继承java.lang.annotation.Annotation 接口。例如,下面的代码就定义了一个 Annotation类型:
public @interface NoMemberAnnotation ({
上面定义的Annotation类型@NoMemberAnnotation 未包含任何成员,这样的Amotation类型被称为markerannotation。下面的代码定义了一个只包含一个成员的Annotation类型:
public @interface OneMemberAnnotation [String value();

String: 成员类型。可用的成员类型有 String、 Class、 primitive、 enumerated和 amnotation,及所列类型的数组。
区 value:成员名称。如果在所定义的 Annotation 类型中只包含一个成员,通常将成员名称命名为 value。
下面的代码定义了一个包含多个成员的 Annotation 类型:public @interface MoreMemberAnnotation {String describe();Class type();
0-国、
aw.exe(20:
在为Annotation 类型定义成员时,也可以为成员设置默认值。例如,下面的代码在定义Amnotation类型时就为成员设置了默认值:
public @interface DefaultValueAnnotation (String describe() default "<默认值>"Class type() default void.class;
在定义 Annotation 类型时,还可以通过 Annotation 类型@Target 来设置 Annotation 类型适用的程序t素种类。如果未设置@Target,则表示适用于所有程序元素。枚类 ElementType 中的教举常量用来道@Targer,如表 16.6所示。

2.2访问Annotation信息

如果在定义Annotation 类型时将@Retention 设置为 RetentionPolicy.RUNTIME,那么在运行超通过反射就可以获取到相关的 Annotation 信息,如获取构造方法、字段和方法的 Annotation信息Constructor 类、Field 类和 Method 类均继承了 AccessibleObject 类,在 AccessibleObject中定个关于 Annotation 的方法。其中,方法 isAnnotationPresent(Class<? extends Annotation> annotatio0用来查看是否添加了指定类型的 Annotation,如果是则返回 true,否则返回 false; 方法 etAmotut(Class<T>annotationClass)用来获得指定类型的 Annotation,如果存在则返回相应的对象,否则返目方法getAnnotations0用来获得所有的 Annotation,该方法将返回一个 Annotation 数组。
在 Constructor 类和 Method 类中还定义了方法 getParameterAnnotations0,用来获得为所有参的 Annotation,将以 Annotation 类型的二维数组返回,在数组中的顺序与声明的顺序相同。如果数则返回一个长度为0的数组

课堂

 代码+结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值