这篇文章来浅谈一下java的注解,这平时Java开发中或多或少的接触过Java注解,例如@Override,它表示的就是一个方法重写的注解,下面为了更加方便的理解注解,举个简单的例子。
1.认识注解
注解就像你看书时候作笔记时划的线一样,它本并没有什么意义,但是结合Java的反射机制后才具有意义,在代码运行中就会比较关注你这标记注解的地方,结合Java的反射机制就可以实现很多的操作,就像你考试前的时候来复习划线的重点一样。
下面看一下@Override注解时怎么定义的。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
这个注解本身并没有什么意义,但是但你使用注解标记方法时,在编译期间会扫描你注解标记的这个方法是否存在与你的父类中,如果不存在编译器就会报错。
2.元注解
什么时元注解呢?元注解就来用来修饰注解的注解,例如在前面我们看到的@Override注解中的@Target和@Retention都属于元注解,用来表示这个注解的作用目标和生命周期,下面来介绍一下Java的六个元注解。
元注解 | 作用 |
---|---|
@Target | 表示该注解可以用于什么地方,常用的ElementType参数有TYPE 类,接口或枚举声明;FIELD字段声明;METHOD方法声明;PARAMETER形式参数声明;CONSTRUCTOR构造函数声明;LOCAL_VARIABLE局部变量声明;ANNOTATION_TYPE注释类型声明;PACKAGE包声明;TYPE_PARAMETER类型参数声明;TYPE_USE任意类型声明;MODULE模块声明; |
@Retention | 表示该注解的生命周期,常用的RetentionPolicy参数有SOURCE生命周期为编译期间,编译完成后注解失效;CLASS注解通过编译期间并且保留到class文件中,但是JVM加载class文件之后失效;RUNTIME生命周期持续到jvm加载到class文件之后仍在存在。 |
@Documented | 作用在通过Javadoc生成文档时有该注解 |
@Inherited | 表示该注解可以被继承 |
@Repeatable | 表示可以在同一地方多次使用该注解 |
@Native | 用来修饰成员变量,表示该变量可以被本地代码应用,常常被代码生成工具使用 |
3.Java自带的一些注解
- @Deprecated 该注解可以用于标记字段、方法、包、形参,接口枚举等已经过时,当你调用了该注解表的的方法或者属性,中间就会有条划线,表示该方法已经过时。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, MODULE, PARAMETER, TYPE})
public @interface Deprecated {
}
- @Override表示继承并重写父类的方法。
- @SupperessWarnings阻止编译器的某些警告
- @SafeVarargs用于标注构造函数和方法表示这些都是安全的,编译器就不会报uncheck的警告。
总结:Java注解主要起标志的作用,适合添加一个注解可以让程序可读性更高,同时通过反射与注解的配合可以实现很多的功能,在spring和mybatis中就有大量的注解,通过注解可以省去大量的xml配置文件,使程序更加简洁。