zoukankan      html  css  js  c++  java
  • 注解和自定义注解

    1.什么是注解
    注解是JDK1.5的新特性,它是一种标记,可以标记类,方法,成员变量,局部变量,参数等....
    这个标记主要是给编译器看的,或者给JVM看的   
    2.注解的三个作用
    a.生成帮助文档:
        @author 作者信息
        @verson 版本信息
    b.编译检查:
        @Override 检查方法重写是否正确
    c.给框架的作为配置使用        
        (Mybatis,Spring,SpringMVC)这些框架都会用到注解    
    3.常见的注解介绍
    @Override 方法重写注解
    @FunctionalInterface 函数式接口注解
    @Deprecated 过期注解 
    @author 用来标识作者
    @version 用于标识版本
    @Test junit单元测试
    4.自定义注解
    public @interface 注解名{}
    5.给自定义注解添加属性
    格式:
        public @interface 注解名{
            //注解中只能写属性
            数据类型 属性名() [default 默认值];
        }
    注解中属性的数据类型必须是以下三大类之一:
    a.8种基本类型(byte,short,int,long,char,float,double,boolean)
    b.4种引用类型(String,枚举类型,Class类型,其他注解类型)
    c.以上12种的一维数组

      注意事项:
      a.默认情况下,我们的注解可以标记在类上,方法上,成员变量上,参数上,局部变量上等...
      b.使用注解进行标记时,必须保证该注解的某个属性都有值
      即没有默认值的属性必须赋值,有默认值的属性可以赋值也可以不赋值

    /**
     * 自定义注解
     */
    public @interface MyAnnotation {
        //给注解添加属性
        int age();// default 10;
        String name();// default "张三";
        String[] hobby();// default {"抽烟","喝酒","烫头"};
    }
    6.自定义注解中的特殊属性名value
    a.如果注解中只有一个属性且名字叫value,则在使用该注解时可以直接给该属性赋值,而不需要 给出属性名。
    /**
     * 特殊属性名value
     */
    public @interface MyAnno {
        String value();
    }
    @MyAnno("jack") //省略"value="直接写属性值
    public class Demo {
    }
    
    b.如果注解中除了value之外,其他的属性都有默认值,并且使用时只给value赋值,那么直接给该属性赋值,而不需要 给出属性名。
    /**
     * 特殊属性名value
     */
    public @interface MyAnno {
        String value();
        int age() default 10;
        String name() default "rose";
    }
    @MyAnno("jack") //省略"value="直接写属性值
    public class Demo {
    }  
    7.注解的注解--元注解
    两个元注解:
        a.@Target元注解
            作用: 规定我们的注解的标记目标
            属性名: value
            属性值:
                在ElementType枚举类中的如下值:
                    TYPE,类,接口 
                    FIELD, 成员变量 
                    METHOD, 成员方法 
                    PARAMETER, 方法参数 
                    CONSTRUCTOR, 构造方法 
                    LOCAL_VARIABLE, 局部变量
           /**
             * 自定义注解
             */
            //@Target(ElementType.TYPE)
            //@Target(ElementType.FIELD)
            //@Target(ElementType.METHOD)
            //@Target(ElementType.CONSTRUCTOR)
            //@Target(ElementType.PARAMETER)
            @Target(ElementType.LOCAL_VARIABLE)
            public @interface MyAnnotation {
            }  
    
    b.@Retension元注解
            作用:规定我们的注解的生命周期
            属性名:value
            属性值: 
                必须是RetensionPolicy枚举类中的成员,其值如下:
                SOURCE: 代表我们的注解只在源码阶段存在
                CLASS: 代表我们的注解在源码中存在,编译之后也存在,但是加载到JVM中会删除
                RUNTIME:代表我们的注解 在源码中存在,编译之后也存在,加载到JVM后还是存在(一直存在)    
    
            @Rentension(RetensionPolicy.SOURCE)
            public @interface MyAnnotation {
            } 
  • 相关阅读:
    ThinkPHP3.1快速入门(12)自动验证
    ThinkPHP CURD方法盘点:page方法
    ThinkPHP CURD方法盘点:table方法
    ThinkPHP CURD方法盘点:order方法
    ThinkPHP CURD方法盘点:data方法
    openssl安装问题导致nginx添加ssl模块失败
    rsync介绍
    基于CRF序列标注的中文依存句法分析器的Java实现
    千万级巨型汉语词库分享
    几个开源分词系统所使用标注集的来源
  • 原文地址:https://www.cnblogs.com/xiaozhang666/p/13235983.html
Copyright © 2011-2022 走看看