注解入门

注解在《java编程思想里》里的定义是:

注解(也被称为元数据)为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后的某个时刻非常方便地使用这些数据。

java se 内置了三种注解:

  • @Override
  • @Deprecated
  • @SuppressWarnings

还有四种元注解,专门用来负责新创建的注解:

  • @Target:表示该注解可以用于什么地方
    ElementType.CONSTRUCTOR(构造器的声明),
    FIELD(域声明),
    LOCAL_VARIABLE(局部变量声明),
    METHOD(方法声明),
    PACKAGE(包声明),
    PARAMETER(参数声明),
    TYPE(类、接口声明)

  • @Retention:表示需要在什么级别来保存该注解信息,可选的参数包括:
    Retention.SOURCE,编译时刻即丢弃
    CLASS,class文件中可用,运行时丢弃
    RUNTIME,运行时仍然可用

  • @Documented
    将此注解保存在javadoc里

  • @Inherited 允许子类继承父类的注解。

来一个简单的例子:

注解类:

@Retention(RUNTIME)
@Target(METHOD)
public @interface Senninha {
    //默认值是senninha
    String name() default "senninha";
}

处理这个注解的方法:

public class AnnotationTest {
    //使用手动设置值为ayrton
    @Senninha(name = "ayrton")
    public void senninha(){
        System.out.println("this is senninha");
    }
    public static void main(String[] args){
        AnnotationTest test = new AnnotationTest();
        try {
        //通过反射获取方法里是否包含注解,并且获取注解里的方法值。
            Method m = test.getClass().getMethod("senninha", null);
            Senninha s = m.getAnnotation(Senninha.class);
            if(s == null){
                System.out.println("don't have annotation");
            }else{
                System.out.println("have annotation");
                //注解里的值变为了我们定义的ayrton
                System.out.println(s.name());
            }
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

你可能感兴趣的:(注解入门)