zoukankan      html  css  js  c++  java
  • Java之注解

    package com.demo.test;
    
    import java.lang.annotation.Documented;
    import java.lang.annotation.ElementType;
    import java.lang.annotation.Inherited;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Target({ElementType.FIELD})//作用域,Column的作用域为:成员变量
    @Retention(RetentionPolicy.RUNTIME)//生命周期,属性值为RUNTIME,注解处理器就可以通过反射,获取到该注解的属性值
    //从而去做一些运行时的逻辑处理
    @Documented
    public @interface Column {
        public String value() default "miaoying";
    }
    
    /*
     * 
    Java 元注解:
    1.@Target-->说明了Annotation所修饰的对象范围:Annotation可被用于packages,types(类,接口,枚举,Annotation类型)
    类型成员(方法,构造函数,成员变量,枚举值),方法参数和本地变量(如循环变量,catch变量),
    在Annotation类型的声明中使用了target可更加明确其所修饰的目标
    (概括来说:即@Target用于描述注解的适用范围)
    取值有:
        CONSTRUCTOR:用于描述构造器
        FIELD:用于描述域
        LOCAT_VARIABLE:用于描述局部变量
        METHOD:用于描述方法
        PACHAGE:用于描述包
        PARAMETER:用于描述参数
        TYPE:用于描述类,接口(包括注解类型)或enum声明
        
    2.@Retention-->定义了该Annotation被保留的时间长短:某些Annotation仅出现在源代码中,而被编译器丢弃;
    而另一些却被编译在class文件中;编译在class文件中的Annotation可能会被虚拟机忽略,而另一些在class被装载时
    将被读取(注意:这并不影响class的执行,因为Annotation与class在使用上是被分离的)。使用这个元注解可以对Annotation
    的“生命周期”进行限制
    (概括来说,即表示需要在什么级别保存该注释信息,用于描述注解的生命周期,也就是该注解在什么范围内有效)
    取值有:
        SOURCE:在源文件中有效
        CLASS:在class文件中有效
        RUNTIME:在运行时有效
        
    3.@Documented-->用于描述其他类型的Annotation应该被作为标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化
    ,Documented是一个标记注解,没有成员。
    
    4.@Inherited-->Inherited元注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的
    Annotation类型被用于一个class,则这个Annotation将被用于该class的子类。
    
    
    自定义注解:
    使用@interface自定义注解时,自动继承了java.lang.anotation.Annotation接口,有编译程序自动完成其他细节。在
    自定义注解时,不能继承其他的注解或接口。@interface用来声明一个注解,其中的每一个方法实际上是声明了一个配置参数。
    返回值类型就是参数的类型(返回值类型只能是基本类型,class,String,enum)可以通过default来声明默认值。
    
    
    定义注解格式:
    public @interface 注解名{定义体}
    注解参数可支持的数据类型:
    1.所有的基本数据类型(int,float,boolean,byte,double,long,char,short)
    2.String类型
    3.Class类型
    4.enum类型
    5.Annotation类型
    6.以上所有类型的数组
    
    
    Annotation类型里面的参数设定:
    ①只能用public或默认(default)这两个访问权限修饰,例如,String value();这里把方法设为default默认类型
    ②参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String,Enum,Class,annotation等数据类型
    以及着一些数据类型的数组,例如:String value();这里的参数成员就是 String;
    ③如果只有一个参数成员,最好把参数名称设为“value”,后加小括号,例如: String value();
    
    
    
    注解元素的默认值:
    注解元素必须有默认值,要么在定义注解的默认值中指定,要么在使用注解时制定,非基本类型的注解元素的值不可以为null。因此,
    使用空字符串或0作为默认值是一种常用的做法。这个约束时的处理其很难表现一个元素的存在或者缺失的状态,因为每个注解的声明中,
    所有的元素都存在,并且具有相应的值,为了绕开这个约束,我们之定义一些特殊的值,例如空字符串或者负数,以此来表示某个元素不存在。
    例如:
    public int id() default -1;
    
    public String name() default "";
    
    定义了注解,并在需要的时候给相关类,类属性加上注解信息,如果没有响应的注解信息处理流程,注解可以说是没有使用价值。
    
    
    
    
    
    
    
     * */

    转载自  http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html

  • 相关阅读:
    Educational Codeforces Round 10 C. Foe Pairs 水题
    Educational Codeforces Round 10 B. z-sort 构造
    CDOJ 1048 Bob's vector 三分
    Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
    第14届电子科大初赛民间盗版部分题目题解
    HDU 5654 xiaoxin and his watermelon candy 离线树状数组 区间不同数的个数
    HDU 5653 Bomber Man wants to bomb an Array. dp
    HDU 5652 India and China Origins 二分+并查集
    HDU 5651 xiaoxin juju needs help 数学
    HDU 5650 so easy 数学
  • 原文地址:https://www.cnblogs.com/miaoying/p/5747071.html
Copyright © 2011-2022 走看看