JDK中预定义的一些注解
@Oerride:检测被该注解标注的方法是否是继承父类(接口)的
@Deprecated:标记一个已经过时的方法
@SuppressWarnings:压制警告
自定义注解
格式:
元注解
public @interface 注解名称{}
本质: 注解本质上就是一个接口该接口默认继承Annotation接口
属性: 接口中的抽象方法
要求:
-
属性的返回值类型
基本数据类型 String 枚举 注解 以上类型的数组
-
定义了属性,在使用时需要给属性赋值
1.如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
2.如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可
3. 数组赋值时。值使用{}包裹。如果数组中只有一个值,则{}省略 元注解:用于描述注解的注解 @Target
用来定义注解的使用范围
ElementType.ANNOTATION_TYPE 用在注解中
PACKAGE 用在包中
TYPE 用在类型上
CONSTRUCTOR 用在构造方法上
FIELD 用在属性上
METHOD 用在方法上@Retention 用来定义注解的存在时间 RetentionPolicy.SOURCE 注解只存在于源代码中,编译成class的时候会丢弃注解 RetentionPolicy.CLASS 注解存在于class文件中,在加载到JVM中的时候会丢弃注解 RetentionPolicy.RUNTIME 注解在程序运行中依然存在 @Documented 注解文档化 @Inherited 是否能被子类自动继承
3.在程序中使用注解
定义
@Target({ElementType.METHOD,ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String value();
}
使用
public class Student {
@MyAnnotation("张三")
private String name;
public void play(){
System.out.println(name+"在打游戏");
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
'}';
}
}