注解

作者: 还是那个没头脑 | 来源:发表于2020-08-14 08:56 被阅读0次

1.1 注解概述

概念:说明程序的。给计算机看的

注释:用文字描述程序的。给程序员看的

定义:注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、 接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。

作用分类

  • 编写文档:通过代码里标识的注解生成文档【例如,生成文档doc文档】
  • 代码分析:通过代码里标识的注解对代码进行分析【例如,注解的反射】
  • 编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【例如,Override】

常见注解

  1. @author:用来标识作者名
  2. @version:用于标识对象的版本号,适用范围:文件、类、方法。
  3. @Override :用来修饰方法声明,告诉编译器该方法是重写父类中的方法,如果父类不存在该方法,则编译失败。
  4. @Deprecated :该注解标注的内容,表示已过时
  5. @SuppressWarnings :压制警告, 一般传递传递参数all @SuppressWarnings("all")

1.2 自定义注解

定义格式
元注解 
public @interface 注解名称{    
    属性列表; 
}
  • 注解本质上就是一个接口,该接口默认继承Annotation接口
    public interface MyAnno extends java.lang.annotation.Annotation {}
注解的属性
  1. 属性的作用
  • 可以让用户在使用注解时传递参数,让注解的功能更加强大。 属性:接口中的抽象方法
  1. 属性的格式
  • 格式1:数据类型 属性名();
  • 格式2:数据类型 属性名() default 默认值;
  1. 属性定义示例
public @interface Student {  
    String name(); // 姓名  
    int age() default 18; // 年龄  
    String gender() default "男"; // 性别 
} 
// 该注解就有了三个属性:name,age,gender
  1. 属性的返回值类型
  • 八种基本数据类型(int,float,boolean,byte,double,char,long,short)
  • String类型,Class类型,枚举类型,注解类型
  • 以上所有类型的一维数组

1.3 使用自定义注解

在程序中使用(解析)注解的步骤(获取注解中定义的属性值):

  1. 获取注解定义的位置的对象 (Class,Method,Field)
  2. 获取指定的注解 getAnnotation(Class)
  3. 调用注解中的抽象方法获取配置的属性值

使用格式:
@注解名(属性名=属性值,属性名=属性值,属性名=属性值...)

定义注解
  1. 定义一个注解:Book
  • 包含属性:String value() 书名
  • 包含属性:double price() 价格,默认值为 100
  • 包含属性:String[] authors() 多位作者
  1. 代码实现
public @interface Book {    
    // 书名    
    String value();    
    // 价格    
    double price() default 100;    
    // 多位作者    
    String[] authors(); 
}
使用注解
  1. 定义类在成员方法上使用Book注解
/** 
* @author itheima 
* @version 1.0 
*/ 
public class BookShelf {   
   
    @Book(value = "西游记",price = 998,authors = {"吴承恩","白求恩"})    
    public void showBook(){
 
    } 
}
  1. 使用注意事项
    1.如果属性有默认值,则使用注解的时候,这个属性可以不用赋值。
    2.如果属性没有默认值,那么在使用注解时一定要给属性赋值。
    3.数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}省略。
特殊属性value
  1. 当注解中只有一个属性且名称是value,在使用注解时给value属性赋值可以直接给属性值,无论value是单值元素还是数组类型。
// 定义注解Book
public @interface Book {    
    // 书名    
    String value(); 
}
 
// 使用注解Book 
public class BookShelf {    
    @Book("西游记")    
    public void showBook(){
 
    } 
} 
或 
public class BookShelf {    
    @Book(value="西游记")    
    public void showBook(){
 
    } 
}

2.如果注解中除了value属性还有其他属性,且至少有一个属性没有默认值,则在使用注解给属性赋值时,value属性名不能省略。

// 定义注解Book 
public @interface Book {    
    // 书名    
    String value();    
    // 价格    
    double price() default 100;    
    // 多位作者    
    String[] authors(); 
} 
// 使用Book注解:正确方式 
@Book(value="红楼梦",authors = "曹雪芹") 
public class BookShelf {  
    // 使用Book注解:正确方式    
    @Book(value="西游记",authors = {"吴承恩","白求恩"})    
    public void showBook(){
 
    } 
}
 
// 使用Book注解:错误方式 
public class BookShelf {    
    @Book("西游记",authors = {"吴承恩","白求恩"})    
    public void showBook(){
 
    } 
} 
// 此时value属性名不能省略了。

1.4元注解

元注解:用于描述注解的注解

  • @Target:描述注解能够作用的位置
        ElementType取值:
            TYPE:可以作用于类上
            METHOD:可以作用于方法上
            FIELD:可以作用于成员变量上
  • @Retention:描述注解被保留的阶段
        Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
  • @Documented:描述注解是否被抽取到api文档中
  • @Inherited:描述注解知否被子类继承

相关文章

  • 注解学习笔记

    什么是注解注解分类注解作用分类 元注解 Java内置注解 自定义注解自定义注解实现及使用编译时注解注解处理器注解处...

  • 注解与反射

    注解 声明一个注解类型 元注解 在定义注解时,注解类也能够使用其他的注解声明。对注解类型进行注解的注解类,我们称之...

  • 1.8 Java 注解annotation

    1.1 注解声明 Java注解Annotation,有声明注解和元注解 元注解:Java提供的元注解,所谓元注解就...

  • 注解的使用

    元注解 注解 注解本质就是接口: 元注解:修饰注解的注解 自定义注解 Text.java FruitName.ja...

  • 注解

    Java注解 注解 元注解 自定义注解 元注解:负责注解其他注解 共有4个标准的meta-annotation类型...

  • Spring高级应用之组合注解和元注解

    1.核心概念: 元注解:可以注解在其他注解上的注解;被注解的注解成为组合注解; 2.组合注解的定义步骤 定义组合注...

  • 2016.10.13-关于注解的自定义和注解的解析

    注解可以分为:1、标识性注解(没有成员变量) 2、注解 3、元注解(注解的注解) 1、注解的自定义 自定义注解的格...

  • 自定义注解

    注解分类 1、代码注解2、编译时注解3、运行时注解 注解范例 使用注解的类 注解解析类 注解实战 需求1、有一张用...

  • 【JAVA】注解

    元注解 用来定义、声明注解的注解。 @Inherited注解 使用此注解声明出来的自定义注解,在使用此自定义注解时...

  • Spring Boot常用注解

    注解速览 配置加载相关 Bean 声明注解 Bean 注入注解 SpringMVC 注解 MyBatis 注解 配...

网友评论

      本文标题:注解

      本文链接:https://www.haomeiwen.com/subject/kgppdktx.html