全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📝 1 篇文章 20 道配套习题

反射与注解专题

专题说明

本专题系统讲解Java反射与注解的核心知识点,反射是Java动态特性的基础,注解是元数据机制,两者结合实现框架开发、动态代理、ORM等高级功能。

学习目标

  1. 理解反射机制的概念、应用场景与性能影响
  2. 掌握获取Class对象的三种方式及适用场景
  3. 熟练使用反射操作构造器、方法和字段
  4. 掌握注解的定义语法与元素类型限制
  5. 理解四种元注解的作用与使用方式
  6. 掌握运行时注解的反射获取方法
  7. 了解编译时注解与注解处理器的工作原理

学习内容

本专题涵盖十大核心知识点:

知识点核心内容
反射机制概述反射概念、应用场景、性能影响
Class对象获取三种获取方式、Class对象唯一性
构造器反射Constructor获取、newInstance创建对象
方法反射Method获取、invoke调用、方法重载处理
字段反射Field获取、get/set操作、私有字段访问
注解定义@interface语法、元素类型、默认值
元注解@Target、@Retention、@Documented、@Inherited
注解处理器AbstractProcessor、编译期代码生成
运行时注解反射获取注解、@Repeatable、注解继承
编译时注解SOURCE保留策略、Lombok原理

学习建议

  1. 理解动态特性:反射打破封装,可访问私有成员,但也带来性能开销
  2. 区分获取方法:getXxx获取公共成员,getDeclaredXxx获取所有成员
  3. 掌握元注解:@Retention决定注解生命周期,是理解注解处理的关键
  4. 注意异常处理:反射调用可能抛出InvocationTargetException,需解包获取实际异常

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
单选题

Java反射机制的主要作用是什么?

A

提高程序运行速度

B

在运行时动态获取类的信息并操作类的成员

C

减少代码编译时间

D

替代所有静态代码

2
填空题

Java反射的核心类位于_________________包中,主要类包括_____________________________

3
单选题

获取Class对象的三种主要方式,以下哪个不是正确的方式?

A

Class.forName("java.lang.String")

B

String.class

C

new String().getClass()

D

Class.getClass(String)

4
判断题

每个类在JVM中只有一个Class对象,无论通过哪种方式获取都是同一个对象。

A

B

5
填空题

获取Class对象的三种方式:_____________适用于动态加载类(如JDBC驱动);__________适用于编译时已知类名;_____________适用于运行时通过实例获取类型。

6
单选题

如何通过反射获取类的public无参构造器?

A

clazz.getConstructor()

B

clazz.getDeclaredConstructor()

C

clazz.getConstructors()[0]

D

clazz.newInstance()

7
判断题

getConstructor()只能获取public构造器,getDeclaredConstructor()可以获取所有构造器包括private。

A

B

8
填空题

Constructor类的主要方法:___________用于创建对象实例,_________________获取构造器参数类型数组,_____________设置是否允许访问私有构造器。

9
单选题

getMethod()和getDeclaredMethod()的主要区别是什么?

A

getMethod只返回public方法,getDeclaredMethod返回所有方法

B

getMethod包含继承的方法,getDeclaredMethod只返回本类声明的方法

C

getMethod只能获取public方法(包括继承),getDeclaredMethod获取本类声明的方法(包括private)

D

两者完全相同

10
判断题

Method.invoke()抛出的InvocationTargetException表示反射调用本身出错,而不是被调用的方法内部抛出异常。

A

B

11
单选题

如何获取类的私有字段?

A

clazz.getField("fieldName")

B

clazz.getDeclaredField("fieldName")

C

clazz.getFields("fieldName")

D

clazz.field("fieldName")

12
填空题

Field类访问字段值的方法:______获取字段值,______设置字段值,_______获取字段类型,_____________设置访问权限允许访问私有字段。

13
单选题

定义注解使用什么关键字?

A

class

B

interface

C

@interface

D

annotation

14
判断题

注解元素名为value()时,使用注解可以省略元素名称,直接写值。

A

B

15
填空题
16
单选题

@Retention元注解的作用是什么?

A

指定注解可以应用的目标(如类、方法、字段)

B

指定注解的生命周期(源码、编译、运行)

C

指定注解是否可以继承

D

指定注解是否会被文档化

17
填空题

Java的四种元注解:_______指定注解适用目标,__________指定注解生命周期,___________表示注解会被JavaDoc记录,__________表示注解可被子类继承。

18
单选题

如何通过反射获取类上的注解?

A

clazz.getAnnotation(MyAnnotation.class)

B

clazz.getAnnotations()

C

clazz.getDeclaredAnnotation(MyAnnotation.class)

D

以上都可以,视需求选择

19
填空题

运行时注解必须使用________________________)才能通过反射获取。Class、Method、Field都实现了________________接口,提供___________________________等方法获取注解。

20
判断题

编译时注解处理生成的代码比运行时注解反射调用性能更好,因为编译时生成代码是直接调用,无需反射开销。

A

B

← 上一个专题 JVM基础与内存模型专题
下一个专题 → 字符串专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库