Java注解

简介: Java注解

1.注解的概念

(1)注释的概念:

说明程序,给计算机看的

(2)注解的定义:

注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。注解的本质是标记,他所有的功能都依赖于对于这个注解解释性的代码,通常需要结合反射来编写解释性代码。

(3)作用分类:

①编写文档:通过代码里标识的注解生成文档【生成文档doc文档】

使用javadoc 类名.java命令,打开index.html文件

②代码分析:通过代码里标识的注解对代码进行分析【使用反射】

③编译检查:通过代码里标识的注解让编译器能够实现基本的编译检查【Override】

(4)注解目前而言最主流的应用就是代替配置文件,例如Spring、SpringBoot等,注解具有开发效率高,成本低的特点,缺点是耦合性高,不利于维护。

2.JDK中预定义的一些注解

(1)@Override:检测被该注解标注的方法是否是继承自父类(接口)的

(2)@Deprecated:该注解标注的内容,表示已过时

(3)@SuppressWarnings:压制警告(一般传递参数all)

(4)@FunctionalInterface:如果一个接口中只有一个抽象方法,则该接口可以使用该注解修饰

3.自定义注解

3.1 格式

元注解

public @interface 注解名称{

属性列表;

}

3.2 本质

public interface 类名 extends java.lang.annotation.Annotation{ }

3.3属性

属性指的是接口中的抽象方法

(1)属性的返回值类型有以下取值

①基本数据类型

②String

③枚举

④注解

⑤以上类型的数组

(2)定义了属性,在使用时需要给属性赋值

①如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值

②如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可

③数组赋值时,值使用大括号{}包裹。如果数组中只有一个值,则{}可以省略

3.4 元注解

元注解就是用于描述注解的注解

(1)@Target:描述注解能够作用的位置(@Target的值是枚举类ElementType中的值)

(2)@Retention:描述注解被保留在哪个阶段可以被反射机制读取到

实例:

@Retention(value = RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
  public String name();
}

(3)@Documented:描述注解是否被抽取到api文档中

(4)@Inherited:描述注解是否被子类继承

3.5 在程序中使用(解析)注解

获取注解中定义的属性值

(1)获取注解定义的位置的对象(Class,Method,Field)

(2)获取指定的注解

getAnnotation(Class)

(3)调用注解中的抽象方法获取配置的属性值

3.6 注解应用需要的三个步骤

(1)编写注解

@Retention(RetentionPolicy.CLASS)
@Target({ElementType.TYPE})
@Documented
public @interface MyAnnotation {
    public String name();
    public int age();//给变量设置默认值
    public String[] like();//定义一个数组变量
}

(2)在类上应用注解

@MyAnnotation(name = "tom",age = 5,like = {"金鱼", "鲤鱼"})
public class Cat {
    private String name;
    private int age;
    private String[] like;
// Getter/Setter,toString,构造方法

(3) 对应用了注解的类进行反射操作的类

public class AnnotationDemo {
    public static void main(String[] args) {
        Class<Cat> catClass = Cat.class;
        //        获取类上应用的的指定注解
        MyAnnotation annotation = catClass.getAnnotation(MyAnnotation.class);
        //        获取注解上变量值
        int age = annotation.age();
        String[] like = annotation.like();
        try {
            Cat cat = catClass.newInstance();
            cat.setAge(age);
            cat.setLike(like);
            System.out.println(cat);
        } catch (
                InstantiationException e) {
            e.printStackTrace();
        } catch (
                IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}


目录
相关文章
|
15天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
51 7
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
98 43
Java学习十六—掌握注解:让编程更简单
|
21天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
58 5
|
1月前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
57 14
|
1月前
|
前端开发 Java
[Java]讲解@CallerSensitive注解
本文介绍了 `@CallerSensitive` 注解及其作用,通过 `Reflection.getCallerClass()` 方法返回调用方的 Class 对象。文章还详细解释了如何通过配置 VM Options 使自定义类被启动类加载器加载,以识别该注解。涉及的 VM Options 包括 `-Xbootclasspath`、`-Xbootclasspath/a` 和 `-Xbootclasspath/p`。最后,推荐了几篇关于 ClassLoader 的详细文章,供读者进一步学习。
36 12
|
1月前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
32 0
|
2月前
|
JSON Java 数据库
java 常用注解大全、注解笔记
关于Java常用注解的大全和笔记,涵盖了实体类、JSON处理、HTTP请求映射等多个方面的注解使用。
43 0
java 常用注解大全、注解笔记
|
3月前
|
Arthas Java 测试技术
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
Java字节码文件、组成、详解、分析;常用工具,jclasslib插件、阿里arthas工具;如何定位线上问题;Java注解
Java字节码文件、组成,jclasslib插件、阿里arthas工具,Java注解
|
2月前
|
IDE Java 编译器
java的反射与注解
java的反射与注解
19 0
|
3月前
|
Java 编译器 程序员
Java注解,元注解,自定义注解的使用
本文讲解了Java中注解的概念和作用,包括基本注解的用法(@Override, @Deprecated, @SuppressWarnings, @SafeVarargs, @FunctionalInterface),Java提供的元注解(@Retention, @Target, @Documented, @Inherited),以及如何自定义注解并通过反射获取注解信息。
Java注解,元注解,自定义注解的使用
下一篇
DataWorks