一、JDK自带注解
我们最常见的就是@Override
,表示方法重写,覆盖父元素的该方法。
@Override
public String toString() {
return super.toString();
}
除此之外还有Deprecated
和@Suppvisewarnings
,上代码,
public class Person {
@Deprecated
public void sayHello(){
System.out.println(123);
}
}
这里定义了一个sayHello的方法,并且用@Deprecated修饰了,用来表示该方法即将被废除,不推荐使用了。调用的时候会有删除提示。
image.png但是如果我就想用怎么办呢?也可以,添加一个忽略的注解。
public class Boy {
@SuppressWarnings("deprecation")
public static void main(String args[]){
Person person = new Person();
person.sayHello();
}
}
二、自定义注解
首先自定义注解的语法有一定的要求:
-
使用@interface关键字声明
-
成员声明需要无参数,无异常;可以指定默认值
-
成员的类型有一定的限制:原始类型、String、Class、Annotation(注解接口)、Enumeration(枚举接口)
-
没有任何成员的注解为“标识注解”
Description.java:
import java.lang.annotation.*;
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
String name(); //无参数
int age() default 19; //默认值
}
前面带@号的一些注解为元注解:
- @Target:指定注解的作用域,这里是用在(METHOD)方法上和(TYPE)类上。
如果用在了没有指定的作用域上(这里是成员变量),就会报错
- @Retention:注解的生命周期,包括:
SOURCE
(源码中显示)、CLASS
(编译到.class文件中)、RUNTIME
(运行中,可以通过反射读取)
Class c = Class.forName("Use");
// 判断使用Use这个类中是否有Description这样一个类注解
boolean isExit = c.isAnnotationPresent(Description.class);
-
@Inherited:允许子类继承,仅限作用在类上的注解
-
@Documented:生成javadoc时会包含注解。(此注解就是上面说的标识注解,没有任何成员)
网友评论