注解的一些简单理解,也不知道具体学了个啥,反正学着玩
注解
注释:用文字描述程序,给程序员看的
##### 概念:
给计算机看的程序说明
这是1.5之后的新特性
使用注解的时候:@注解名称
#### 注解作用:
* 编写文档:通过代码里标识的注解生成文档,【例:生成文档doc文档】
    jdk文档就是这样生成的
    
* 代码分析:通过代码里标识的注解对代码进行分析【例:使用反射】
* 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【例:Override】
    比如重写toSting方法
注解的类型
## 1,JDK中预定义的一些注解
    ### @Override
检测被标注的方法是否是继承父类(接口)的
@Deprecated
该注解标注的内容,表示已过时
@SuppressWarnings
压制警告
一般传递参数"all",@SuppressWarnings("all"); 并且一般是放在类名上
2,自定义的注解
格式:
    元注解
    public @interface 注解名{
        属性列表
    }
    
    
通过把上面那排代码使用javac命令编译,再通过javap命令反编译,可得到一行代码:
    public interface 注解名 extends java.lang.annotation.Annotation{}
所以注解的本质是:   
    本质:注解本质上就是一个接口,该接口默认继承Annotattion接口
    
    
属性: 接口可以定义的成员方法
    要求:
        1,属性的返回值类型:
            * 基本数据类型
            * String
            * 枚举
            * 注解
            * 以上类型的数组
            * 无返回值和其他类型都是不可以的!!!
        2,定义了属性,在使用的时候需要给属性赋值
            * 如果定义属性时,使用default关键字给属性默认初始化,在使用时可以不给属性赋值
            * 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值
            * 数组赋值时,值使用{}包裹,如果数组中只有一个值,大括号可以省略
    #### 元注解:用于描述注解的注解
- 
@Target:描述注解能够作用的位置 @Target(value={ElementType.TYPE})表示该注解只能作用于类上
 @Target(value={ElementType.METHOD})表示该注解只能作用于方法
 @Target(value={ElementType.FIELD})表示该注解只能作用于成员变量
- 
@Retention:描述注解被保留的阶段 @Retention(RetentionPolicy.RUNTIME):表示被描述的注解会被保留到class字节码文件中,并被JVM读取到
- 
@Documented:描述注解是否被抽取道api文档中 - 
@Inherited:描述注解是否被子类继承 
 
- 
3,在程序中使用注解
获取在程序中 获取定义的属性值
1,获取注解定义位置的对象(class,Method,Field)
2,获取指定的注解
getAnnotation(class)
3,调用注解中的抽象方法获取配置的属性值
判断这个方法上是否有某个注解:
Mehrod类型.isAnnotationPresent(注解名.class)——返回值是布尔型
小结:
1,大多数时候,我们会使用注解,而不是自定义注解
2,注解给谁用?
- 
编译器 
- 
给解析程序用 3,注解不是程序的一部分 
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号