Java注解入门(一):理解内置注解的本质与作用
·
一、最重要的一句话:
注解本身不做任何事,它的作用只有描述代码,学习spring时和基础阶段的某些代码上加上注释,触发了特定的行为这并不是注解所做的,而是框架和编译器看到注解后所做的,注解就像一本书上所划的标记,代码就像书的内容,看书的人就像编译器和框架,当看书时遇到这些标记,会触发行为如仔细看,跳过,但这是人做的而不是注解做的。
二、Java内置注解详解
Java提供了4个核心内置注解(JDK自带),它们由编译器直接处理。下面逐一解析,附带使用示例。
1. @Override:重写方法的“校验器”
- 作用:标记方法为覆盖父类方法,编译器会检查父类是否存在同名方法。
- 为什么重要:重写父类方法时,如果加入这个注解可以判断是不是重写父类中的方法,如果在父类中不存在,会报错(这是编译器做的,不是注解本身)
- 示例:java
class Parent { void sayHello() { System.out.println("Parent"); } } class Child extends Parent { @Override // 编译器会检查父类是否有sayHello() void sayHello() { System.out.println("Child"); } // 正确 } class WrongChild extends Parent { @Override // 编译器报错:父类无此方法(拼写错误) void sayHelloe() { } // 错误! }关键点:若去掉
@Override,代码仍能编译运行,但编译器无法帮你发现重写错误。
2. @Deprecated:过时方法的“警示灯”
- 作用:标记方法/类为过时,使用时IDE会显示删除线警告,但代码仍可编译运行。
- 为什么重要:向开发者传递“此功能已弃用,请改用新方法”的信号。
- 示例:java
编辑


- 最佳实践:在
@Deprecated后添加@Deprecated注释结合javaDoc,说明替代方案:java编辑

-
效果:鼠标悬浮在方法上

3. @SuppressWarnings:警告的“屏蔽罩”
- 作用:抑制特定编译器警告(如未检查的泛型警告、未使用的变量)。
- 为什么重要:当代码逻辑安全但编译器误报警告时,避免无意义的编译报错。
- 示例:java
编辑
@SuppressWarnings("unchecked") // 抑制unchecked警告 public List<String> getNames() { return (List<String>) (List) new ArrayList(); // 未检查的强制转换 } - 注意:
- 优先用
@SuppressWarnings("unchecked")而非全局抑制(如@SuppressWarnings("all"))。 - 不常用?不!在泛型、反射等场景中非常常见(如Spring框架中常用)。
- 优先用
4. @FunctionalInterface:函数式接口的“守门员”
- 作用:标记接口为函数式接口(仅含1个抽象方法),编译器会强制检查。
- 为什么重要:Java 8引入Lambda表达式后,确保接口符合函数式要求(如
Runnable、Comparator)。 - 示例:java
编辑
@FunctionalInterface // 编译器检查:只能有1个抽象方法 public interface MyFunction { void execute(); // 仅有一个抽象方法 } // 错误!添加第二个抽象方法会触发编译错误 @FunctionalInterface public interface WrongFunction { void execute(); void anotherMethod(); // 编译报错:Too many abstract methods } - 关键点:
@FunctionalInterface是编译器校验工具,不是强制要求(不加也能用Lambda,但编译器无法保证唯一性)。
更多推荐




所有评论(0)