全部学科
Python全栈
python
NodeJS全栈
nodejs

JAVA反射与注解专题测试

21 题 45 分钟 难度:★★

考察知识点

本试卷涵盖以下核心知识点:

反射机制概述(4题)

  • 反射的概念与作用(运行时操作类)
  • 反射的核心类:Class、Constructor、Method、Field
  • 反射打破封装访问私有成员
  • 反射的性能开销与使用场景

Class对象获取(3题)

  • Class.forName()动态加载类
  • 类名.class编译时获取
  • 对象.getClass()运行时获取
  • Class对象与类型信息

构造器反射(3题)

  • getConstructor()获取公共构造器
  • getDeclaredConstructor()获取所有构造器
  • newInstance()创建对象实例
  • 私有构造器访问

方法反射(3题)

  • getMethod()获取公共方法
  • getDeclaredMethod()获取所有方法
  • invoke()调用方法
  • 方法参数类型与返回值

字段反射(3题)

  • getField()获取公共字段
  • getDeclaredField()获取所有字段
  • get/set访问字段值
  • 私有字段访问

注解定义(3题)

  • @interface定义注解
  • 注解元素类型限制
  • 注解元素默认值
  • 注解本质是特殊接口

元注解(2题)

  • @Retention指定生命周期
  • @Target指定适用目标
  • @Documented、@Inherited
  • 元注解组合使用

注解处理器(1题)

  • 编译时注解处理器
  • 运行时注解处理器
  • AnnotatedElement接口
  • getAnnotation()获取注解

运行时注解(1题)

  • RetentionPolicy.RUNTIME保留策略
  • 通过反射获取注解信息
  • 注解在框架中的应用
  • 自定义注解实战
💡 参考答案在文末
判断题
1

@Inherited元注解表示注解可以被子类继承,但只对类级别的注解有效,方法注解和字段注解不会继承。

A

B

2

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

A

B

3

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

A

B

4

Java反射机制可以访问类的所有成员,包括私有成员,因此反射破坏了类的封装性。

A

B

单选题
5

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

A

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

B

String.class

C

new String().getClass()

D

Class.getClass(String)

6

ElementKind.TYPE表示什么类型的代码元素?

A

方法

B

字段

C

类或接口

D

参数

7

如何通过反射调用String.substring(int beginIndex, int endIndex)方法?

A

method.invoke(str, 0, 5)

B

method.invoke(str, new Object[]{0, 5})

C

method.invoke(str, new Integer(0), new Integer(5))

D

以上都可以

8

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

A

提高程序运行速度

B

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

C

减少代码编译时间

D

替代所有静态代码

9

为什么反射操作的性能比直接调用慢?

A

反射需要额外的安全检查和权限验证

B

反射调用涉及方法查找、参数类型匹配等额外步骤

C

JIT编译器难以优化反射调用

D

以上都是原因

10

如何获取基本类型int的Class对象?

A

Class.forName("int")

B

Integer.TYPE

C

int.class

D

以上B和C都正确

11

以下代码能否成功创建对象?

Java
Class clazz = Class.forName("java.lang.System");
Constructor cons = clazz.getDeclaredConstructor();
cons.setAccessible(true);
Object obj = cons.newInstance();
A

能成功创建System对象

B

编译错误,无法获取私有构造器

C

运行时抛出IllegalAccessException

D

运行时抛出InstantiationException,因为System没有无参构造器

12

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

A

class

B

interface

C

@interface

D

annotation

13

如何获取类的私有字段?

A

clazz.getField("fieldName")

B

clazz.getDeclaredField("fieldName")

C

clazz.getFields("fieldName")

D

clazz.field("fieldName")

多选题
14

关于运行时注解的反射获取,以下说法正确的有哪些?

A

注解必须@Retention(RetentionPolicy.RUNTIME)才能通过反射获取

B

@Retention(CLASS)的注解反射获取会返回null

C

方法、字段、参数都可以通过各自的getAnnotation方法获取注解

D

@Repeatable注解可以通过getAnnotationsByType获取多个实例

15

关于Method.invoke()方法,以下说法正确的有哪些?

A

invoke(obj, args)第一个参数是调用方法的对象实例

B

静态方法调用时,第一个参数可以为null

C

invoke返回方法的返回值,如果方法返回void则返回null

D

invoke可能抛出IllegalAccessException、InvocationTargetException

16

关于Class.forName()方法,以下说法正确的有哪些?

A

需要传入类的全限定名(包名+类名)

B

会执行类的静态初始化块(clinit)

C

可能抛出ClassNotFoundException

D

加载数组类型需要特殊语法,如Class.forName("[Ljava.lang.String;")

17

以下哪些是Java反射机制的典型应用场景?

A

Spring框架的依赖注入和Bean管理

B

Hibernate的实体映射和SQL生成

C

动态代理(如JDK动态代理)

D

JSON序列化框架(如Gson、Jackson)

填空题
18

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

19

Java注解使用____________关键字定义,注解元素类型限制为________________________、Class、枚举、注解以及这些类型的数组。

20

Java反射的核心类位于____________包中,主要类包括________________________、Method、Constructor。

简答题
21

请简述Java反射机制的优缺点及其应用场景。

参考答案
1.正确 2.正确 3.正确 4.正确 5.D 6.C 7.D 8.B 9.D 10.D 11.D 12.C 13.B 14.A;B;C;D 15.A;B;C;D 16.A;B;C;D 17.A;B;C;D 18.get;set;getType 19.@interface;基本类型;String 20.java.lang.reflect;Class;Field 21.
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 JAVA JVM基础与内存模型专题测试
下一套试卷 → JAVA变量与数据类型专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码