java注解介绍与使用

注解介绍

Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。
Java 语言中的类、方法、变量、参数和包等都可以被标注,通俗来讲就给类,方法,变量,参数打上一个标记,接下来可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然它也支持自定义 Java 标注。

内置的注解

Java 定义了一套注解,共有 7 个,3 个在 java.lang 中,剩下 4 个在 java.lang.annotation 中。

作用在代码的注解:

@Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。
@Deprecated - 标记过时方法。如果使用该方法,会报编译警告。
@SuppressWarnings - 指示编译器去忽略注解中声明的警告。

作用在其他注解的注解(也就是常说的元注解):

@Retention - 标识这个注解怎么保存,是只在代码中,还是编入class文件中,或者是在运行时可以通过反射访问。
@Documented - 标记这些注解是否包含在用户文档中。
@Target - 标记这个注解应该是哪种 Java 成员。
@Inherited - 标记这个注解是继承于哪个注解类(默认 注解并没有继承于任何子类)

从 Java 7 开始,额外添加了 3 个注解:

@SafeVarargs - Java 7 开始支持,忽略任何使用参数为泛型变量的方法或构造函数调用产生的警告。
@FunctionalInterface - Java 8 开始支持,标识一个匿名函数或函数式接口。
@Repeatable - Java 8 开始支持,标识某注解可以在同一个声明上使用多次。

idea创建自己自定义的注解

在这里插入图片描述
创建好的自定义注解
在这里插入图片描述

使用元注解来定义我们自己注解的用法

package com.example.springboot.Demo;

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
/* 该注解用来定义自定义注解的生命周期,其中value值为RententionPolicy枚举类中的一下三个值:
        RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
         RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM 中。
        -RetentionPolicy.RUNTIME 注解可以保留到程序运行的时候,它会被加载进入到 JVM 中,所以在程序运行时可以获取到它们*/
@Documented //它的作用是能够将注解中的元素包含到 Javadoc 中去。
@Target(ElementType.TYPE)
/*
@Target表示Annotation可用用来修饰那些元素,如果未标注则表示可以修饰所有元素。取值范围如下:

    ElementType.TYPE:修饰类、接口、枚举
    ElementType.FIELD:修饰属性
    ElementType.METHOD:修饰方法
    ElementType.PARAMETER:修饰方法参数
    ElementType.CONSTRUCTOR:修饰构造方法
    ElementType.LOCAL_VARIABLE:修饰局部变量
    ElementType.ANNOTATION_TYPE:修饰注解
    ElementType.PACKAGE:修饰包
    ElementType.TYPE_PARAMETER:泛型参数(1.8加入)
    ElementType.TYPE_USE:使用类型的地方(1.8加入)

 */
@Inherited
/*
@Inherited标识某个被标注的类型是被继承的。使用了@Inherited修饰的annotation类型被用于一个class之时,则这个annotation将被用于该class的相应子类。

 */
@Repeatable(MyAnnotaions.class)
/* @Repeatable 用来定义自定义注解是否可以重复使用 MyAnnotaions中的value定义了一个MyAnnotation数组
        @Retention(RetentionPolicy.RUNTIME)
        @Target(ElementType.ANNOTATION_TYPE)
        public @interface MyAnnotaions {
             MyAnnotation [] value() ;
        }

    不使用@Repeatable注解时,想要多次使用注解写法:
        @MyAnnotaions({
            @MyAnnotation(name = "张三",age = 18),
            @MyAnnotation(name = "李四",age = 20)
        })
        public class AnnotationDemo {}

     使用@Repeatable注解时,可以这么写
        @MyAnnotation(name = "张三",age = 18)
        @MyAnnotation(name = "李四",age = 20)
        public class AnnotationDemo {}

     这种方式不仅看起来简洁,使用反射方式获取时,也可以直接使用MyAnnotation.class获取注解数组集合


*/
public @interface MyAnnotation {
    String name() ;
    int age();
}

自定义注解的简单使用使用

package com.example.springboot.Demo.controller;

import com.example.springboot.Demo.MyAnnotation;


@MyAnnotation(name = "张三",age = 18)
public class AnnotationDemo { //此类便是我们的普通类
    public static void main(String[] args) {//此处随便写了一个main方法,仅供参观
        System.out.println("");
    }
}

注解只是给某个类或方法打上个标签,真正解释该标签真正的含义是在,后边反射中获取到该注解,对注解进行详细的业务逻辑处理.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值