一、注解概述
-
注解也被称为元数据,用于修饰包、类、方法等数据信息
-
和注释一样,注解不影响程序逻辑,但注解可以被编译或运行,相当于嵌入在代码中的补充信息
-
在 JavaSE 中,注解使用的目的比较简单,例如标记过时的功能,忽略警告等
-
JavaEE 中注解会充当更加重要的角色
二、三种注解
1、@Override
(1)基本介绍
-
指定重写父类方法(从编译层面验证),如果父类没有被重写的该方法,则报错
-
不用 @Override 修饰,仍然能构成重写
-
@Override 只能修饰方法
(2)演示
- Father 类
java
package com.my.entity;
public class Father {
public void sayHi() {
System.out.println("Hello");
}
}
- Son 类
java
package com.my.entity;
public class Person {
@Deprecated
public void sayHi() {
System.out.println("Hello");
}
}
- OverrideAnnotationTest 类
java
package com.my.test;
import com.my.entity.Son;
public class OverrideAnnotationTest {
public static void main(String[] args) {
Son son = new Son();
son.sayHi();
}
}
(3)源码
java
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
2、@Deprecated
(1)基本介绍
-
用于表示某个元素已过时,可以修饰类,构造器,方法等
-
被修饰的元素仍然可以被使用,可以做版本升级过渡
(2)演示
- Person 类
java
package com.my.entity;
public class Person {
@Deprecated
public void sayHi() {
System.out.println("Hello");
}
}
- DeprecatedAnnotationTest 类
java
package com.my.test;
import com.my.entity.Person;
public class DeprecatedAnnotationTest {
public static void main(String[] args) {
Person person = new Person();
person.sayHi();
}
}
(3)源码
java
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
3、@SuppressWarnings
(1)基本介绍
- 用于抑制编译器警告,作用范围取决于注解位置
抑制类型 | 说明 |
---|---|
all | 所有警告 |
unchecked | 没有检查的警告 |
rawtypes | 没有指定泛型的警告 |
unused | 没有使用某个变量的警告 |
(2)演示
- SuppressWarningsTest 类
java
package com.my.test;
public class SuppressWarningsTest {
@SuppressWarnings({"unused"})
public static void main(String[] args) {
int i;
System.out.println("Hello World");
}
}
(3)源码
java
@Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
三、元注解概述
- 用于修饰其他注解,学习元注解的作用更多的是为了更好的理解源码
四、四种元注解
1、@Retention
- 用于修饰一个注解可以保留的情况
保留情况 | 说明 |
---|---|
RetentionPolicy.SOURCE | 编译器使用后,直接丢弃注解 |
RetentionPolicy.CLASS | 编译器将注解记录在 class 文件中 当运行 Java 程序时,JVM 不会保留注解(默认情况) |
RetentionPolicy.RUNTIME | 编译器将注解记录在 class 文件中 当运行 Java 程序时,JVM 会保留注解,程序可通过反射获取该注解 |
2、@Target
- 用于指定被修饰的注解能用于修饰哪些元素
3、@Documented
- 用于指定被修饰的注解将被 javadoc 命令提取成文档
4、@Inherited
- 被修饰的注解将具有继承性,如果某个类使用了被 @Inherited 修饰的注解,则其子类将自动具有该注解