注解Java

基本概念

注解是指那些插入到源码上的@xxx这种,通过注解使得其他工具类对于其进行处理;
注解不会改变程序的编译方式。Java编译器对于包含注解和不包含注解的代码生成相同指令;
注解的作用:常用于附属文件的自动生成类、测试、日志、事务等语义的自动生成;

注解标注在方法、字段、类上表示进行一定处理;
常用注解

@Deprecated – @Deprecated 所标注内容,不再被建议使用。
@Override – @Override 只能标注方法,表示该方法覆盖父类中的方法。
@Documented – @Documented 所标注内容,可以出现在javadoc中。
@Inherited – @Inherited只能被用来标注“Annotation类型”,它所标注的Annotation具有继承性。
@Retention – @Retention只能被用来标注“Annotation类型”,而且它被用来指定Annotation的RetentionPolicy属性。
@Target – @Target只能被用来标注“Annotation类型”,而且它被用来指定Annotation的ElementType属性。
@SuppressWarnings – @SuppressWarnings 所标注内容产生的警告,编译器会对这些警告保持静默。

注解分类

1、由编译器使用的注解,这类注解不会被编译进入.class文件,它们在编译后就被编译器扔掉了。

// @Override这个注解只能注解方法。
// @Override这个注解是给编译器参考的,和运行阶段没有关系。
// 凡是java中的方法带有这l类注解的,编译器都会进行编译检查,如果这个方法不是重写父类的方法,编译器报错。

//@Override
public class AnnotationTest02 {

    //@Override
    private int no;

    @Override
    public String toString() {
        return "toString";
    }

}

2、由工具处理.class文件使用的注解,这类注解会被编译进入.class文件,但加载结束后并不会存在于内存中。这类注解只被一些底层库使用,一般我们不必自己处理。

3、在程序运行期能够读取的注解,它们在加载后一直存在于JVM中,这也是最常用的注解。例如,一个配置了@PostConstruct的方法会在调用构造方法后自动被调用(这是Java代码读取该注解实现的功能,JVM并不会识别该注解)。

定义一个注解时,还可以定义配置参数。配置参数可以包括:
所有基本类型;
String;
枚举类型;
基本类型、String、Class以及枚举的数组。
因为配置参数必须是常量,所以,上述限制保证了注解在定义时就已经确定了每个参数的值。
注解的配置参数可以有默认值,缺少某个配置参数时将使用默认值。
此外,大部分注解会有一个名为value的配置参数,对此参数赋值,可以只写常量,相当于省略了value参数。
如果只写注解,相当于全部使用默认值。

自定义注解

使用@interface实现,可以在注解上嵌套可用注解;


/*
自定义注解:MyAnnotation
 */
public @interface MyAnnotation {
    String name();

    String color();

    int age() default 25; //属性指定默认值
}
//标注的方法
    @MyAnnotation(name = "zhang",color = "blue")
    public static void m1(){
        //标注的必须指明非默认字段,用作标识
    }

猜你喜欢

转载自blog.csdn.net/qq_44830792/article/details/121190264