Java 反射与注解学习总结

181 篇文章 3 订阅

反射与注解

通过反射机制,程序员可以更加深入地控制程序的运行过程,Annotation注解功能建立于反射的机制之上。

反射

功能:

通过反射可以在程序中访问已经装载到JVM中的Java对象的描述,实现访问,检测,修改描述Java对象本身信息。

包:

java.lang.reflect

getClass()方法:

用于返回一个类型为Class的对象

JTextField tf = new JTextField();
Class tf_c = tf.getClass();

在这里插入图片描述

访问构造方法:

  1. getConstructors()。
  2. getConstructor(Class<?>…parameterTypes)
  3. getDeclaredConstructors()。
  4. getDeclaredConstructor(Class<?>…parameterTypes)。
Constructor类的常用方法
方法说明
isVarArgs()查看该构造方法是否允许带有可变数量的参数,如果允许则返回true,否则返回false
getParameterTypes()按照声明顺序以Class数组的形式获得该构造方法的各个参数的类型
getExpceptionTypes()以 Class数组的形式获得该构造方法可能抛出的异常类型
newInstance(Object…initargs)通过该构造方法利用指定参数创建一个该类的对象,如果未设置参数则表示采用默认无参数的构造方法
setAccessible(boolean flag)如果该构造方法的权限为 private,默认为不允许通过反射利用 newInstance(Object…initargs)方法创建对象。那么,先执行该方法,并将入口参数设为true,则允许创建
getModifiers()获得可以解析出该构造方法所采用修饰符的整数

访问成员变量

返回值:

Field类型的对象或数组,每个Field对象代表一个成员变量

  1. getFields()
  2. getFields(String name)
  3. getDeclaredFields()
  4. getDeclaredFields(String name)
object.getFields();
Field类常用方法
方法说明
getName()获得该成员变量的名称
getType()获得表示该成员变量类型的Class对象
set(Object obj,Object value)获得指定对象obj 中成员变量的值,返回值为Object型
getInt(Object obj)获得指定对象obj中类型为int的成员变量的值
setInt(Object obj,int i)将指定对象obj中类型为int的成员变量的值设置为i
getFloat(Object obj)获得指定对象obj中类型为float的成员变量的值
setFloat(Object obj,flaot f)将指定对象obj中类型为float的成员变量的值设置为f
getBoolean(Object obj)获得指定对象obj中类型为boolean的成员变量的值
setBoolean(Object obj,boolean b)将指定对象obj中类型为boolean 的成员变量的值设置为z
setAccessible(Object flag)此方法可以设置是否忽略权限限制直接访问private等私有权限的成员变量
getModifiers()获得可以解析出该成员变量所采用修饰符的整数

访问成员方法

返回值:

Method类型的对象或数组,每个Field对象代表一个成员方法

  1. getMethods()
  2. getMethods(String name,Class<?>…parameterTypes)
  3. getDeclaredMethods()
  4. getDeclaredMethods(String name,Class<?>…parameterTypes)
Method类的常用方法
方法说明
getName()获得该方法的名称
getParameterTypes()按照声明顺序以 Class数组的形式获得该方法的各个参数的类型
getReturnType()以 Class数组的形式获得该方法可能抛出的异常类型
getExceptionTypes()以 Class数组的形式获得该方法可能抛出的异常类型
invoke(Object obj,Object…args)利用指定参数args执行指定对象obj中的该方法,返回值为Obiect型
isVarArgs()查看该方法是否允许带有可变数量的参数,如果允许则返回true,否则返回false
getModifiers()获得可以解析出该方法所采用修饰符的整数

Annotation注解功能

用途:

不影响程序运行,作用于编译器警告等辅助工具

定义Annotation类型

定义时需要用到interface关键字,且在关键字前加一个@符号即:@interface

public @interface MorememberAnnotation{
	String values();
}

String:成员类型,有String,Class,primitive,enumerated,annotation
values:成员名称

为成员设置默认值:

public @interface DefaultValueAnnotation{
	String describe() default"<默认值>";
	Class type() default void.class;
}

定义时使用@Target来设置Annotation类型适用的程序元素种类,若未设置则适用于所有程序元素。
枚举类ElementType中的枚举常量用来设置@Targrt

ElementType中枚举常量:
枚举常量说明
ANNOTATION_TYPE表示用于Annotation类型
TYPE表示用于类,接口和枚举,以及Annotation类型
CONSTRUCTOR表示用于构造方法
FIELD表示用于成员变量和枚举常量
METHOD表示用于方法
PARAMETER表示用于参数
LOCAL_VARIABLE表示用于局部变量
PACKAGE表示用于包
枚举类RetentionPolicy中的枚举常量
枚举常量说明
SOURCE表示不编译Annotation到类文件中,有效范围最小
CLASS表示编译Annotation到类文件中,但是在运行时不加载Annotation到JVM中
RUNTIME表示在运行时加载Annotation打JVM中,有效范围最大
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值