0 注解和注释的区别
在博主刚开始学习java语言的时候,经常把注释和注解搞混淆,误认为这两个是类似的东西,其实它们完全不是一个东西。
注释:
注释是程序员在代码中添加的说明性文字,用于解释代码的功能、目的或实现细节。Java中的注释有三种类型:
- 单行注释:以
//
开头,直到该行结束。 - 多行注释:以
/*
开始,以*/
结束,可以跨越多行。 - Javadoc注释:以
/**
开始,以*/
结束,通常用于生成API文档。
注释不会被编译器处理,它们只是为了方便程序员和其他阅读代码的人理解代码。因此,注释不会影响代码的执行。
注解:
注解(Annotation)也被称为元数据(Metadata),用于修饰解释 包、类、方法、属性、构造器、局部变量等数据信息。
注解本质是一个接口,它继承自java.lang.annotation.Annotation接口。注解的定义使用@interface关键字。注解可以有元素(类似于接口中的方法),元素可以有默认值。
注解可以被编译器或运行时环境处理。例如,Java编译器可以使用注解来生成额外的代码或进行错误检查。在运行时,程序可以通过反射API访问注解的信息。
区别:
- 目的:注释是为了方便人类阅读和理解代码;注解是为了向编译器或运行时环境提供关于代码的额外信息。
- 处理:注释在编译时被忽略,不会影响代码的执行;注解可以被编译器或运行时环境处理,可能会影响代码的执行或生成额外的代码。
- 语法:注释有特定的格式,如
//
、/* */
和/** */
;注解使用@
符号开始,后面跟着注解的名称和可能的元素值。 - 用途:注释主要用于解释代码;注解可以用于多种目的,如生成代码、进行错误检查、配置框架等。
1 注解的使用
1.1 三个基本的Annotation
@Override:限定某个方法,是重写父类方法,该注解只能用于方法
@Deprecated:用于表示某个程序元素(类、方法)已经过时
@SuppressWarnings:抑制编译器警告
1.2 基本的Annotation应用案例
@Override重写父类方法
源码:
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
@Deprecated:过时了但仍然可以使用
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
@Target表示可以作用与哪些元素上,比如@Deprecated可以作用域构造器、字段、局部变量、方法、包、参数、类型上。
@SuppressWarnings:抑制警告(程序员从不看警告lol)
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
1.3 JDK的元注解
@Retention
RetentionPolicy.SOURCE: 编译器使用后,直接丢弃这种策略的注释
RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解。 这是默认值
RetentionPolicy.RUNTIME:编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以 通过反射获取该注解
@Target刚刚讲过
@Documented
@Inherited