概念
从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
@Override:检查被标记的方法是否继承自父类(接口)的
@Override
public String toString() {
return super.toString();
}
@Deprecated:表示已过时
@Deprecated
public void show(){
//有缺陷
}
public void show1(){
//替代show()方法
}
@SuppressWarnings :压制警告(一般传参“all”表示所有)
@SuppressWarnings("all")
public void show(){
//原本可能会有类似never used的警告,添加后就看不到了
}
元注解
public @interface 注解名{
}
元注解顾名思义我们可以理解为注解的注解。
它是作用在注解中,方便我们使用注解实现想要的功能。
元注解分别有@Retention、 @Target、 @Documented、 @Inherited和@Repeatable(JDK1.8加入)五种。
@Target
@Retention
Retention英文意思有保留、保持的意思,它表示注解存在阶段是保留在源码(编译期),字节码(类加载)或者运行期(JVM中运行)。在@Retention注解中使用枚举RetentionPolicy来表示注解保留时期
@Retention(RetentionPolicy.SOURCE),注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS), 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
@Retention(RetentionPolicy.RUNTIME), 注解会在class字节码文件中存在,在运行时可以通过反射获取到
如果是自定义注解,如果注解只存着源码中或者字节码文件中就无法发挥作用,而在运行期间能获取到注解才能实现目的,所以自定义注解中肯定是使用 @Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Repeatable
要求
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnno{
int age();
int length();
String name() default "张三";
}
@MyAnno(age=18,length=20)
public class Worker{
}
//1.获取被注解标记的类的字节码文件对象
Class cl = 类名.class;
//2.获取上面的注释对象(其实就是在内存中生成了一个该注解接口的子类实现对象)
注解名 t = cl.getAnnotation(注解名.class);
//3.调用注解对象中定义的抽象方法,获取返回值
Object obj = t.方法名();
本文地址:https://blog.csdn.net/Save_By/article/details/107378208
如对本文有疑问, 点击进行留言回复!!
网友评论