Java 反射与注解学习总结

news/2024/5/19 5:19:49 标签: java, 反射, jvm

反射与注解

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

反射

功能:

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

包:

java.lang.reflect

getClass()方法:

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

java">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)
java">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

java">public @interface MorememberAnnotation{
	String values();
}

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

为成员设置默认值:

java">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中,有效范围最大

http://www.niftyadmin.cn/n/1717686.html

相关文章

Java 数据库操作,JDBC学习总结

数据库 数据库基础 1.什么是数据库 数据库是一种储存结构&#xff0c;他允许使用各种格式输入、处理和检索数据&#xff0c;不必在每次需要数据时重新输入。 特点&#xff1a; 实现数据共享。所有用户可以在数据库中同时存取数据。减少数据的冗余度。数据的独立性。包括数据…

Java创建线程的几种方式

文章目录 一、继承Thread类二、实现Runnable接口三、使用匿名类实现Runnable接口四、使用Callable和Future 一、继承Thread类 通过继承Thread类并重写run()方法来创建线程。然后&#xff0c;可以通过创建Thread对象并调用start()方法来启动线程。 class MyThread extends Thr…

Java连接池druid导入IDEA操作以及配置,简单使用(我绝对是写的所有相关内容中最详细的一篇了)

Druid1.2.6&#xff08;德鲁伊&#xff09;导入IDEA1.下载2.导入3.配置文件注意&#xff1a;4.简单使用测试1.下载 首先我们访问一下下载地址&#xff1a; https://repo1.maven.org/maven2/com/alibaba/druid/1.2.6/ 将压缩文件放置到一个集合目录下 2.导入 进入目录复制…

前端(html[5],css[3])学习总结+参考手册下载

前端&#xff08;html[5],css[3]学习总结&#xff09;开发工具工具设置VScode:VScode使用&#xff08;html文档的生成&#xff1a;&#xff09;VScode快捷键html基础标签分类基础标签&#xff08;常用&#xff09;(*表示我常用)html参考文档下载CSS基础CSS常用CSS参考文档下载开…

Tomcat10.0.1下载,安装,启动,关闭,配置

Tomcat10.0.0下载安装启动错误解决方法问题一解决&#xff1a;问题二解决&#xff1a;注意&#xff1a;关闭配置测试下载 https://tomcat.apache.org/ 安装 找到文件夹直接解压就行 启动 打开bin文件夹找到startup.bat双击 错误解决方法 出现闪退问题 说明很有可能是…

centos8下载,安装,简单配置使用

centos8下载&#xff0c;安装&#xff0c;简单配置使用下载安装配置centos8安装中文包以及输入法安装gcc安装vmtools下载 https://mirrors.cqu.edu.cn/CentOS/8.4.2105/isos/x86_64/ 选择这个9G的完整版&#xff01; 安装 ①打开VMware ② ③ ④ 后面继续下一步 看到安装位置…

前端设计(动态,渐变)

前端设计属性(常用)属性说明(基于手册)1.background:2.color(文字颜色)3.filter&#xff08;只列出我常用的&#xff09;4.flex5.transform6. justify-content7.align-items8.align-content9.box-shadow10.text-shadow11.float12.animation13.display14.content练习解释说明渐变…

c语言srand函数用法,srand

srand函数是随机数发生器的初始化函数。原型&#xff1a;voidsrand(unsigned int seed);srand和rand()配合使用产生伪随机数序列。外文名srand含 义属 性原 型void srand(unsigned int seed);用 途编程srand简介编辑语法&#xff1a;void srand (unsigned seed)&am…