文章目录
- 1. 相关概念
- 2. 基本的Annotation
- 3. 自定义Annotation
注意
:注解这部分内容,了解即可
1. 相关概念
- 从 JDK 5.0 开始 , Java 增加了对元数据 (MetaData) 的支持 , 也就是 Annotation( 注释 )
- Annotation 其实就是代码里的特殊标记 , 这些标记可以在编译 , 类加载 , 运行时被读取 , 并执行相应的处理 。通过使用Annotation, 程序员可以在不改变原有逻辑的情况下, 在源文件中嵌入一些补充信息 。
- Annotation 可以像修饰符一样被使用 , 可用于修饰包 , 类, 构造器 , 方法 , 成员变量 , 参数 , 局部变量的声明 ,这些信息被保存在 Annotation 的
name=value对
中 . - Annotation 能被用来为程序元素 ( 类 , 方法 , 成员变量等 ) 设置元数据
2. 基本的Annotation
使用 Annotation 时要在其前面增加 @
符号 , 并把该 Annotation 当成一个修饰符使用,用于修饰它支持的程序元素
三个基本的 Annotation:
①@Override
:限定重写父类方法 , 该注释只能用于方法
②@Deprecated
:用于表示某个程序元素 ( 类 , 方法等 ) 已过时
③@SuppressWarnings
:抑制编译器警告
举例:
package day11;
import java.util.ArrayList;
import java.util.List;
public class Test4 {
public static void main(String[] args) {
new TestB().test1();
@SuppressWarnings({ "rawtypes", "unused" })//抑制警告
List list = new ArrayList();
}
}
class TestA{
public void test() {
}
}
class TestB extends TestA{
@Override
public void test() {
// TODO Auto-generated method stub
super.test();
}
@Deprecated
public void test1() {
}
}
只看上面代码显示不了提示信息,下面通过截图可以对比出:
不加@SuppressWarnings({ "rawtypes", "unused" })
:
加@SuppressWarnings({ "rawtypes", "unused" })
之后:
3. 自定义Annotation
- 定义新的 Annotation 类型使用
@interface
关键字 - Annotation 的成员变量在 Annotation 定义中以无参数方法的形式来声明,其方法名和返回值定义了该成员的名字和类型 .
- 可以在定义 Annotation 的成员变量时为其指定初始值 , 指定成员变量的初始值可使用 default 关键字
- 没有成员定义的 Annotation 称为标记 ; 包含成员变量的 Annotation 称为元数据 Annotation
举例:
package day11;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
class TestA{
// @TestAnn()//只能给属性做注解,不能给方法做注解
public void test() {
}
}
class TestB extends TestA{
@TestAnn(id = 100, desc = "姓名")
String name;
}
@Target(ElementType.FIELD)//这个注解类是给其他类的属性做注解:只能给属性做注解,不能给方法等做注解
@Retention(RetentionPolicy.RUNTIME)//定义注解的生命周期
@Documented
@interface TestAnn{
public int id() default 0;
public String desc() default "";
}