Java第十六章

一.反射

众所周知,所有 Java 类均继承了 Object 类,在 Object 类中定义了一个geClass0方法,该方法返回一个类型为Class的对象。例如下面的代码:

JTextField textField = new JTextField();
Class textFieldC = textField.getClass();

1.访问构造方法

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

getConstructors()

getConstructor(Class<?>...parameterTypes)

getDeclaredConstructors()

getDeclaredConstructor(Class<?>...parameterTypes)

 

 

例1.

2.访问成员变量 

在通过下列一组方法访问成员变量时,将返回 Field 类型的对象或数组。每个 Field 对象代表一个成员变量,利用 Field 对象可以操纵相应的成员变量:

getFields()

getField(String name)

getDeclaredFields()

getDeclaredField(String name)

 

例2.

 

3.访问成员方法 

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

getMethods()

getMethod(String name, Class<?>...parameterTypes)

getDeclaredMethods()

getDeclaredMethod(String name, Class<?>...parameterTypes)

 

例3.

 

课堂: 

二.Annotation注解功能

1.内置注解

@Override:限定重写父类方法,作用范围成员方法

@SupperessWarnings:抑制编译器警告,作用范围、成员属性、成员方法

@Deprecated:标示已过时,作用范围类、成员属性、成员方法

2.定义Annotation类型

在定义Annotation 类型时,也需要用到用来定义接口的 interface 关键字,但需要在 imertace 关制加一个“@”符号,即定义 Annotation 类型的关键字为@interface,这个关键字的隐含意思是继承java.lang.annotation.Annotation 接口。例如,下面的代码就定义了一个 Annotation类型:

public @interface NoMemberAnnotation {

}

在定义 Annotation 类型时,还可以通过 Annotation 类型@Target 来设置 Annotation 类型适用的程序元素种类。如果未设置@Target,则表示适用于所有程序元素。枚类 ElementType 中的枚举常量用来设置@Targer

例4. 

3.访问Annotation信息

如果在定义Annotaiton类型时将@Retention设置为RetentionPolicy.RUNTIME,那么在运行程序时通过反射就可以获取到相关的Annotaiton信息,如获取构造方法、字段和方法的Annotaiton信息。Constructor类、Field类和Method类均继承了AccessibleObject类,在AccessibleObject类中定义了三个关于Annotaiton的方法。其中,方法isAnnotaitonPresent(Class<? extends Annotaiton>annotaitonClass)用来查看是否添加了指定类型的Annotaiton,如果是则返回true,否则返回false;方法getAnnotaiton(Class<T>annotaitonClass)用来获得指定类型的Annotaiton,如果存在则返回相应的对象,否则返回null;方法getAnnotaiton()用来获得所有Annotaiton,该方法将返回一个Annotaiton数组。

在Constructor类和Method类中还定义了方法getParameterAnnotaitons(),用来获得为所有参数添加的Annotaiton,将以Annotaiton类型的二维数组返回,在数组中的顺序与声明的顺序相同。如果没有参数返回一个长度为0的数组;如果存在未添加Annotaiton的参数,将用一个长度为0的嵌套数组占位。
 

例5.

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值