【05】注解的定义

(1)一个人只要自己不放弃自己,整个世界也不会放弃你.
(2)天生我才必有大用
(3)不能忍受学习之苦就一定要忍受生活之苦,这是多么痛苦而深刻的领悟.
(4)做难事必有所得
(5)精神乃真正的刀锋
(6)战胜对手有两次,第一次在内心中.
(7)好好活就是做有意义的事情.
(8)亡羊补牢,为时未晚
(9)科技领域,没有捷径与投机取巧。
(10)有实力,一年365天都是应聘的旺季,没实力,天天都是应聘的淡季。
(11)基础不牢,地动天摇
(12)写博客初心:成长自己,辅助他人。当某一天离开人世,希望博客中的思想还能帮人指引方向.
(13)编写实属不易,若喜欢或者对你有帮助记得点赞+关注或者收藏哦~

注解的定义

1.注解的定义

1.1注解的作用或者意义是什么?

(1)注解本身是没有任何意义的,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义。

(2)Java注解(Annotation)又称Java标注,是JDK1.5引入的一种注释机制。是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。

在这里插入图片描述

(3)如果需要开发一些框架,做架构设计,那么注解就变得非常非常的有用。

(4)注解如何定义

  • 定义类的时候用 @interface。
  • 注解会有元素,元素可以指定基本数据类型,引用类型。
  • 可以给注解元素增加一个默认值,default 加上数据类型的默认值。
package com.annotations.class1.annotation;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.SOURCE)
public @interface Lance {
    String value() default "注解作用于类上";
}

1.2元注解

(1)是注解上的注解

(2)上面案例中的@Target注解就是一个元注解,用来指示这个Lance注解可以作用于哪些元素类型上面。

(3)Java中有哪些元素呢,类名、方法、成员属性、方法参数。

(4)没有指定元注解@Target的Lance注解默认可以作用于一个类的任何位置,可以作用在类上,成员属性上,方法上,方法参数上。

package com.annotations.class1.test;

import com.annotations.class1.annotation.Lance;

/**
 * @PackageName:com.annotations.class1.test
 * @ClassName:Test1
 * @Description:
 * @author:青风百草
 * @date:2020/9/5 10:09
 */
@Lance("注解作用在类上")
public class Test1 {

    @Lance("注解作用在成员属性上")
    private int age;

    @Lance("注解作用在成员方法上")
    public void getAge(){

    }
    
    public void setAge(@Lance("注解作用在方法参数上") int age){

    }

    @Lance("注解作用在静态方法上")
    public static void main(String[] args) {

    }
}
1.2.1 ElementType表示注解可以作用于哪些地方
package java.lang.annotation;

public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}
1.2.2 注解定义
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface ClassAnnotation {
    String value() default "注解作用于类上";
}

(1)value()是一个特殊的元素。

(2)可以为注解增加多个属性

(3)多属性注解定义如下


@ClassAnnotation(value = "注解作用于类上",id = "1")
public class Test2 {

    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

(4)多属性注解的使用

@ClassAnnotation(value = "注解作用于类上",id = "1")
public class Test2 {

    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
1.2.3 @Target元注解指定当前注解作用于多个类元素上面
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.TYPE,ElementType.FIELD,ElementType.METHOD,ElementType.LOCAL_VARIABLE})
@Retention(RetentionPolicy.SOURCE)
public @interface MultiAttrAnno {
    
}
1.2.4 @Retention注解的作用

(1)用于指定注解的保留级别

(2)注解本身是没有意义的,它结合了其他的的技术才有了更加丰富的运行场景,这一个运行场景有哪些呢?

public enum RetentionPolicy {
    SOURCE,
    CLASS,
    RUNTIME
}
1.2.5 小结

(1)在定义注解时,注解类也能够使用其他的注解声明。

(2)对注解类型注解的注解类,我们称之为元注解(meta-annotation)。

(3)声明的注解允许作用于哪些节点使用@Target声明;

(4)保留级别由@Retention声明。

(5)注解的保留级别如下:

  • RetentionPolicy.SOURCE

标记的注解仅保留在源码级别中,并被编译器忽略。

  • RetentionPolicy.CLASS

标记的注解在编译时由编译器保留,但Java虚拟机(JVM)会忽略。

  • RetentionPolicy.RUNTIME

标记的注解由JVM保留,因此运行时环境可以使用它。

(6)SOURCE < CLASS < RUNTIME ,即CLASS包含了SOURCE,RUNTIME包含了SOURCE,CLASS。

2.打赏鼓励

感谢您的细心阅读,您的鼓励是我写作的不竭动力!!!

2.1微信打赏

在这里插入图片描述

2.2支付宝打赏

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值