java.lang.annotation.Annotataion

Annotation 注解

为什么要有这个东西?

注解,顾名思义,就是标注解释。类似书籍页下角的标注,给读者解释一些晦涩的东西或一些小提示。Annotation也是如此,用来给给程序员或编译器或jvm一些提示。

  1. 给程序员看,如 @Deprecated 表识被弃用的元素,开发者告诉使用者某些东西不希望再被使用。@Override表识重写父类方法。
  2. 给Java编译器看,如 @SafeVarargs让编译器忽略对泛型参数的报错 。 @SuppressWarnings让编译器忽略对传入的内容的检查。
  3. 给jvm看,如 @Inherited,在用户自定义注解时来启用继承,也就是说子类可以继承父类的注解。@Documented表识在javadoc中显示的注解。@Retention 表识注解的声明周期。 @Target表识注解的应用对象时那些。

Demo1 自定义注解

package spring.web.mvc.demo.java.lang.annotation;

import java.lang.annotation.*;
/**
 * @Description 自定义java注解
 * @author  Fan Ruikang
 **/
public @interface MyAnnotation {

}

Demo2 自定义注解的生命周期

package spring.web.mvc.demo.java.lang.annotation;

import java.lang.annotation.*;

/**
 * @Description 定义注解的生命周期:源代码,class文件,还是二进制字节码。
 **/
@Retention(RetentionPolicy.RUNTIME)

/**
 * @Description 自定义java注解
 * @author  Fan Ruikang
 **/
public @interface MyAnnotation {

}

Demo3 定义注解的应用场合

package spring.web.mvc.demo.java.lang.annotation;
import java.lang.annotation.*;

/**
 * @Description 定义注解的应用场地:注解,构造函数,包,类,属性,方法,参数,本地变量
 **/
@Target({ElementType.METHOD,ElementType.TYPE})

/**
 * @Description 自定义java注解
 *
 * @author  Fan Ruikang
 **/
public @interface MyAnnotation {

}

Demo4 让注解可以被继承

package spring.web.mvc.demo.java.lang.annotation;
import java.lang.annotation.*;

/**
 * @Description 定义注解继承性,默认不继承
 **/
@Inherited

/**
 * @Description 自定义java注解
 * @author  Fan Ruikang
 **/
public @interface MyAnnotation {

}

Demo4的测试

package spring.web.mvc.demo.java.lang.annotation;

/**
 * 〈功能简述〉
 * 〈 测试Annotation的特性〉
 *
 * @author Fan Ruikang
 * @version 1.0.0
 * @create 2018/12/5 0005\
 */
public class MyAnnotationTest extends MyAnnotationTestFather{
    public MyAnnotationTest() {
        if (MyAnnotationTest.class.isAnnotationPresent(MyAnnotation.class)) {
            MyAnnotation annotation = (MyAnnotation) MyAnnotationTest.class.getAnnotation(MyAnnotation.class);
            System.out.println(annotation);
        }


    }

    public static void main(String[] args) {
        MyAnnotationTest myAnnotationTest = new MyAnnotationTest();
    }
}

@MyAnnotation
class MyAnnotationTestFather {
    public MyAnnotationTestFather() {
        System.out.println("MyAnnotationTestFather" + MyAnnotationTestFather.class.isAnnotationPresent(MyAnnotation.class));
    }
}

Demo5 给自定义注解增加属性

package spring.web.mvc.demo.java.lang.annotation;

import java.lang.annotation.*;

/**
 * @Description 自定义java注解
 * @author  Fan Ruikang
 **/
public @interface MyAnnotation {
//    给注解增加属性及默认值
    String color() default "blue";//为属性指定缺省值
    int[] arrayAttr() default {1,2,4};
    RetentionPolicy lamp() default RetentionPolicy.RUNTIME;

}

完整的demo

package spring.web.mvc.demo.java.lang.annotation;

import java.lang.annotation.*;

/**
 * @Description 定义注解的生命周期:源代码,class文件,还是二进制字节码。
 **/
@Retention(RetentionPolicy.RUNTIME)

/**
 * @Description 定义注解的应用场地:注解,构造函数,包,类,属性,方法,参数,本地变量
 **/
@Target({ElementType.METHOD,ElementType.TYPE})

/**
 * @Description 定义注解继承性,默认不继承
 **/
@Inherited

/**
 * @Description 自定义java注解
 * @author  Fan Ruikang
 **/
public @interface MyAnnotation {
//    给注解增加属性及默认值
    String color() default "blue";//为属性指定缺省值
    int[] arrayAttr() default {1,2,4};
    RetentionPolicy lamp() default RetentionPolicy.RUNTIME;

}

@SuppressWarning 支持的参数

all : 抑制所有警告
boxing : 抑制装箱、拆箱相关的警告
cast : 抑制强转相关的警告
dep-ann : 抑制过时注解相关的警告
fallthrough : 抑制没有 break 的 switch 语句的警告
finally : 抑制 finally 块没有 return 的警告
hiding : 抑制关于隐藏的本地变量的警告
incomplete-switch : 抑制 switch 语句中 case 不完整的警告(当 case 是枚举时)
nls : 抑制创建无法翻译的字符串的警告 (nls : National Language Support)
null : 抑制关于可能为空的警告
rawtypes : 抑制使用泛型作为类参数时没有指明参数类型的警告
restriction : 抑制使用不建议或者禁止的引用的警告
serial : 抑制一个可序列化类中没有 serialVersionUID 的警告
static-access : 抑制一个不正确的静态访问相关的警告
synthetic-access : 抑制未优化的内部类访问相关的警告
unchecked : 抑制未经检查的操作(比如强转)的警告
unqualified-field-access : 抑制不合格的属性访问的警告
unused : 抑制未使用代码相关的警告
FieldCanBeLocal :抑制全局变量只使用一次,可以被当做局部变量的警告

thanks:http://blog.51cto.com/13545923/2053516

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值