JAVA注解(Annotation)初窥和使用

  1. 概念

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。

官方解释:注解(一种元数据形式)提供有关不属于程序本身的程序的数据。注解对它们注解的代码的操作没有直接影响。

简单理解为:给代码贴上标签,不影响它运用。

2、用途

  • 编译器的信息 - 编译器可以使用注解来检测错误或抑制警告,如@Override,可以在编译时检查是否是重载方法。
  • 编译时和部署时处理 - 软件工具可以处理注解信息以生成代码,XML文件等。
  • 运行时处理 - 可以在运行时检查某些注解。

3、内置的注解

注解名

作用

@Override

检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。

@Deprecated

标记过时方法。如果使用该方法,会报编译警告。

@SuppressWarnings

指示编译器去忽略注解中声明的警告。

@Retention元注解

标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。

@Documented元注解

标记这些注解是否包含在用户文档中。

@Target元注解

标记这个注解应该是哪种 Java 成员。

@Inherited元注解

标记这个注解是继承于哪个注解类(默认注解并没有继承于任何子类)

@SafeVarargs

Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。

@FunctionalInterface

Java 8 开始支持,标识一个匿名函数或函数式接口。

@Repeatable元注解

Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

4、注解架构

 

5、注解属性类型可以有以下列出的类型

1)基本数据类型

2String

3)枚举类型

4)注解类型

5Class类型

6)以上类型的一维数组类型

6、接口定义

格式:

public @interface 注解名{

定义方法

}

import java.lang.annotation.ElementType;

import java.lang.annotation.Retention;

import java.lang.annotation.RetentionPolicy;

import java.lang.annotation.Target;

@Target({ElementType.TYPE,ElementType.METHOD})

@Retention(RetentionPolicy.RUNTIME)

public @interface MyAnnotation {

   String CHANGLIANG="常量";

   String value() default "123";

   String name() ;

}

 

7、注解使用

@MyAnnotation(name="name")

public class TestMyAnnotation {

    

}

(1)当注解中只有value方法时,可以省略不写,直接赋值。

@MyAnnotation("123")

(2)当注解中有默认值时,可以不用赋值

@MyAnnotation(name="name")

(3)当注解中有多个方法,都没有默认值,全部都需要赋值。

@MyAnnotation(name="name")

8、注解获取

import java.lang.annotation.Annotation;

import java.lang.reflect.Method;



@MyAnnotation(name="name")

public class TestMyAnnotation {

    @MyAnnotation(value = "void",name="Method")

    public void setName(){



    }

    public static void main(String[] args) {

        //获取类的注解

        Annotation[] annotations = TestMyAnnotation.class.getAnnotations();

        for (Annotation annotation:annotations) {

            MyAnnotation myAnnotation = (MyAnnotation)annotation;

            System.out.println(myAnnotation.name());

            System.out.println(myAnnotation.value());

        }

        //获取方法的注解

        Method[] methods = TestMyAnnotation.class.getDeclaredMethods();

        for (Method method:methods) {

            Annotation[] methodAnnotations =  method.getAnnotations();

            if(methodAnnotations!=null){

                for (Annotation annotation:methodAnnotations) {

                    MyAnnotation myAnnotation = (MyAnnotation)annotation;

                    System.out.println(myAnnotation.name());

                    System.out.println(myAnnotation.value());

                }

            }

        }

    }

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值