备忘录四
前言 简单记录一下车载开发中修改的部分记录,记录于此,方便自...
简单记录一下Java面试中注解(Annotation)相关知识点,记录于此,方便自己查阅。
注解(Annotation)是一种为代码添加“元数据”的机制,本身不影响程序逻辑,但可以被编译器、框架或运行时读取并使用。
可以简单理解为:
给代码打“标签”
编译检查
代码分析
框架配置
运行时行为控制
典型场景:
| 注解 | 作用 |
|---|---|
| @Override | 表示方法重写 |
| @Deprecated | 标识过时 |
| @SuppressWarnings | 抑制编译器警告 |
| @FunctionalInterface | 函数式接口校验 |
@Override public String toString() { return "..."; }
元注解:用来注解“注解”的注解
注解能用在哪里
@Target({ElementType.METHOD, ElementType.FIELD})常见取值:
TYPE(类、接口)
METHOD
FIELD
PARAMETER
CONSTRUCTOR
注解生命周期
@Retention(RetentionPolicy.RUNTIME)| 策略 | 说明 |
|---|---|
| SOURCE | 只在源码中存在(编译丢弃) |
| CLASS | 字节码中存在(默认) |
| RUNTIME | 运行时可用(反射读取) |
框架注解一般是 RUNTIME
注解会被 javadoc 记录
子类可以继承父类的注解
定义注解
@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Log { String value() default ""; boolean printParam() default false; }
使用注解
@Log(value = "查询用户", printParam = true) public User getUserById(Long id) { ... }
可以,前提是 @Retention(RUNTIME)
注解本身不能继承
但可以用 @Inherited让子类继承父类注解
可以,但本质是 属性
注解是Java提供的一种元数据机制,用于为代码添加描述信息
注解本身不影响程序逻辑,但可以在编译期、类加载期或运行期被读取和使用
Java 提供了@Target 和 @Retention 等元注解来控制注解的使用范围和生命周期
自定义注解通常配合反射使用,在框架中实现配置、校验、日志等功能